Disable viewfinder in settings pages
authorMohammed Sameer <msameer@foolab.org>
Thu, 27 Dec 2012 04:25:40 +0000 (06:25 +0200)
committerMohammed Sameer <msameer@foolab.org>
Thu, 27 Dec 2012 04:25:40 +0000 (06:25 +0200)
imports/camera.cpp
imports/camera.h
lib/qtcamgraphicsviewfinder.cpp
lib/qtcamgraphicsviewfinder.h
qml/CameraPage.qml
qml/ImageSettingsPage.qml
qml/VideoSettingsPage.qml
qml/main.qml

index 03bf053..36815bd 100644 (file)
@@ -73,6 +73,7 @@ Camera::Camera(QDeclarativeItem *parent) :
 
   QObject::connect(m_vf, SIGNAL(renderAreaChanged()), this, SIGNAL(renderAreaChanged()));
   QObject::connect(m_vf, SIGNAL(videoResolutionChanged()), this, SIGNAL(videoResolutionChanged()));
+  QObject::connect(m_vf, SIGNAL(renderingEnabledChanged()), this, SIGNAL(renderingEnabledChanged()));
 }
 
 Camera::~Camera() {
@@ -412,5 +413,13 @@ VideoMute *Camera::videoMute() const {
 }
 
 VideoTorch *Camera::videoTorch() const {
-return m_videoTorch;
+  return m_videoTorch;
+}
+
+bool Camera::isRenderingEnabled() const {
+  return m_vf->isRenderingEnabled();
+}
+
+void Camera::setRenderingEnabled(bool enabled) {
+  m_vf->setRenderingEnabled(enabled);
 }
index a826828..d34b7ed 100644 (file)
@@ -80,6 +80,8 @@ class Camera : public QDeclarativeItem {
   Q_PROPERTY(VideoMute *videoMute READ videoMute NOTIFY videoMuteChanged);
   Q_PROPERTY(VideoTorch *videoTorch READ videoTorch NOTIFY videoTorchChanged);
 
+  Q_PROPERTY(bool renderingEnabled READ isRenderingEnabled WRITE setRenderingEnabled NOTIFY renderingEnabledChanged);
+
   Q_ENUMS(CameraMode);
 
 public:
@@ -138,6 +140,9 @@ public:
   QRectF renderArea() const;
   QSizeF videoResolution() const;
 
+  bool isRenderingEnabled() const;
+  void setRenderingEnabled(bool enabled);
+
 signals:
   void deviceCountChanged();
   void deviceIdChanged();
@@ -166,6 +171,7 @@ signals:
 
   void videoMuteChanged();
   void videoTorchChanged();
+  void renderingEnabledChanged();
 
 protected:
   void geometryChanged(const QRectF& newGeometry, const QRectF& oldGeometry);
index 0cd418e..5dbbdf8 100644 (file)
@@ -53,6 +53,7 @@ public:
   QtCamConfig *conf;
   QtCamDevice *dev;
   QtCamGraphicsViewfinder *q_ptr;
+  bool enabled;
 };
 
 QtCamGraphicsViewfinder::QtCamGraphicsViewfinder(QtCamConfig *config, QGraphicsItem *parent) :
@@ -61,6 +62,7 @@ QtCamGraphicsViewfinder::QtCamGraphicsViewfinder(QtCamConfig *config, QGraphicsI
   d_ptr->dev = 0;
   d_ptr->renderer = 0;
   d_ptr->q_ptr = this;
+  d_ptr->enabled = true;
 }
 
 QtCamGraphicsViewfinder::~QtCamGraphicsViewfinder() {
@@ -112,7 +114,7 @@ void QtCamGraphicsViewfinder::paint(QPainter *painter, const QStyleOptionGraphic
 
   painter->fillRect(boundingRect(), Qt::black);
 
-  if (!d_ptr->renderer) {
+  if (!d_ptr->renderer || !d_ptr->enabled) {
     return;
   }
 
@@ -130,11 +132,15 @@ void QtCamGraphicsViewfinder::resizeEvent(QGraphicsSceneResizeEvent *event) {
 }
 
 void QtCamGraphicsViewfinder::updateRequested() {
-  update();
+  if (d_ptr->enabled) {
+    update();
+  }
 }
 
 void QtCamGraphicsViewfinder::stop() {
   d_ptr->resetBackend();
+
+  setRenderingEnabled(true);
 }
 
 QRectF QtCamGraphicsViewfinder::renderArea() const {
@@ -152,3 +158,15 @@ QSizeF QtCamGraphicsViewfinder::videoResolution() const {
 
   return d_ptr->renderer->videoResolution();
 }
+
+bool QtCamGraphicsViewfinder::isRenderingEnabled() const {
+  return d_ptr->enabled;
+}
+
+void QtCamGraphicsViewfinder::setRenderingEnabled(bool enabled) {
+  if (d_ptr->enabled != enabled) {
+    d_ptr->enabled = enabled;
+
+    emit renderingEnabledChanged();
+  }
+}
index e9db5b8..4a0257f 100644 (file)
@@ -46,9 +46,13 @@ public:
   QRectF renderArea() const;
   QSizeF videoResolution() const;
 
+  bool isRenderingEnabled() const;
+  void setRenderingEnabled(bool enabled);
+
 signals:
   void renderAreaChanged();
   void videoResolutionChanged();
+  void renderingEnabledChanged();
 
 protected:
   void resizeEvent(QGraphicsSceneResizeEvent *event);
index 5363a60..98503cf 100644 (file)
@@ -38,6 +38,7 @@ Page {
         property bool modesVisible: true
         property bool standbyVisible: true
         property bool focusReticleVisible: true
+        property bool enableViewfinder: true
 
         property alias previewAnimationRunning: preview.animationRunning
 
@@ -52,8 +53,15 @@ Page {
         }
 
         onStatusChanged: {
-                if (status == PageStatus.Active) {
+                if (status == PageStatus.Activating && enableViewfinder) {
+                        cam.renderingEnabled = true;
+                }
+                else if (status == PageStatus.Active) {
                         focusReticle.setRegionOfInterest();
+
+                        if (!enableViewfinder) {
+                                cam.renderingEnabled = false;
+                        }
                 }
         }
 
index 1c3b472..a54d797 100644 (file)
@@ -31,7 +31,7 @@ CameraPage {
         id: page
         controlsVisible: false
         policyMode: CameraResources.Image
-        needsPipeline: false
+        enableViewfinder: false
         standbyVisible: !Qt.application.active
 
         Rectangle {
index 7fdb402..3e62440 100644 (file)
@@ -31,7 +31,7 @@ CameraPage {
         id: page
         controlsVisible: false
         policyMode: CameraResources.Video
-        needsPipeline: false
+        enableViewfinder: false
         standbyVisible: !Qt.application.active
 
         Rectangle {
index 3400488..936b7f1 100644 (file)
@@ -31,7 +31,6 @@ import QtMobility.location 1.2
 // TODO: postcapture
 // TODO: flash not ready (battery low or flash not ready message)
 // TODO: portrait/landscape
-// TODO: stop viewfinder in settings pages ?
 // TODO: grid lines, face tracking
 // TODO: select primary/secondary camera.
 // TODO: disable debug builds.