Implemented capturing via proximity sensor
authorMohammed Sameer <msameer@foolab.org>
Sat, 24 Aug 2013 09:33:55 +0000 (12:33 +0300)
committerMohammed Sameer <msameer@foolab.org>
Sat, 24 Aug 2013 09:33:55 +0000 (12:33 +0300)
qml/CaptureControl.qml [new file with mode: 0644]
qml/ImageOverlay.qml
qml/VideoOverlay.qml
qml/qml.qrc

diff --git a/qml/CaptureControl.qml b/qml/CaptureControl.qml
new file mode 100644 (file)
index 0000000..ce778fc
--- /dev/null
@@ -0,0 +1,76 @@
+// -*- qml -*-
+
+/*!
+ * This file is part of CameraPlus.
+ *
+ * Copyright (C) 2012-2013 Mohammed Sameer <msameer@foolab.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+import QtQuick 2.0
+
+Item {
+    id: captureControl
+
+    property bool capturePressed: false
+    property bool zoomPressed: false
+    property bool proximityClosed: false
+    property bool canceled: false
+    property bool showCancelBanner: (zoomPressed || proximityClosed) && state == "capturing"
+
+    signal startCapture
+    signal cancelCapture
+
+    states: [
+        State {
+            name: "idle"
+            when: !capturePressed && !zoomPressed && !proximityClosed
+        },
+        State {
+            name: "canceled"
+            when: canceled
+        },
+        State {
+            name: "capturing"
+            when: capturePressed || zoomPressed || proximityClosed
+        }
+    ]
+
+    state: "idle"
+
+    onStateChanged: {
+        if (state == "idle") {
+            captureControl.canceled = false
+        }
+    }
+
+    transitions: [
+        Transition {
+            from: "capturing"
+            to: "idle"
+            ScriptAction {
+                script: captureControl.startCapture()
+            }
+        },
+        Transition {
+            from: "capturing"
+            to: "canceled"
+            ScriptAction {
+                script: captureControl.cancelCapture()
+            }
+        }
+    ]
+}
index 99d9fb6..f191b35 100644 (file)
@@ -76,13 +76,12 @@ Item {
         width: 75
         height: 75
         opacity: 0.5
-        onClicked: captureImage()
         visible: controlsVisible
 
         onExited: {
             if (mouseX <= 0 || mouseY <= 0 || mouseX > width || mouseY > height) {
                 // Release outside the button:
-                stopAutoFocus()
+                captureControl.canceled = true
             }
         }
     }
@@ -90,7 +89,7 @@ Item {
     Timer {
         id: autoFocusTimer
         interval: 200
-        running: capture.pressed || zoomCapture.zoomPressed
+        running: captureControl.state == "capturing"
         repeat: false
         onTriggered: {
             if (cam.autoFocus.cafStatus != AutoFocus.Success) {
@@ -101,18 +100,21 @@ Item {
 
     ZoomCaptureButton {
         id: zoomCapture
-        onReleased: parent.captureImage()
+    }
+
+    CaptureControl {
+        id: captureControl
+        capturePressed: capture.pressed
+        zoomPressed: zoomCapture.zoomPressed
+        proximityClosed: proximitySensor.close
+        onStartCapture: captureImage()
+        onCancelCapture: stopAutoFocus()
     }
 
     CaptureCancel {
         anchors.fill: parent
-        enabled: zoomCapture.zoomPressed
-        onPressed: {
-            zoomCapture.zoomPressed = false
-            if (!autoFocusTimer.running) {
-                stopAutoFocus()
-            }
-        }
+        enabled: captureControl.showCancelBanner
+        onPressed:  captureControl.canceled = true
     }
 
     CameraToolBar {
@@ -291,7 +293,9 @@ Item {
 
     function stopAutoFocus() {
         if (!overlay.cam.quirks.hasQuirk(Quirks.NoAutoFocus)) {
-            cam.autoFocus.stopAutoFocus()
+            if (!autoFocusTimer.running) {
+                cam.autoFocus.stopAutoFocus()
+            }
         }
     }
 
index 6f19d48..164ebae 100644 (file)
@@ -66,13 +66,20 @@ Item {
 
     ZoomCaptureButton {
         id: zoomCapture
-        onReleased: overlay.toggleRecording()
+    }
+
+    CaptureControl {
+        id: captureControl
+        capturePressed: capture.pressed
+        zoomPressed: zoomCapture.zoomPressed
+        proximityClosed: proximitySensor.close
+        onStartCapture: overlay.toggleRecording()
     }
 
     CaptureCancel {
         anchors.fill: parent
-        enabled: zoomCapture.zoomPressed
-        onPressed: zoomCapture.zoomPressed = false
+        enabled: captureControl.showCancelBanner
+        onPressed: captureControl.canceled = true
     }
 
     CaptureButton {
@@ -85,9 +92,14 @@ Item {
         height: 75
         opacity: 0.5
 
-        onClicked: overlay.toggleRecording()
-
         visible: controlsVisible
+
+        onExited: {
+            if (mouseX <= 0 || mouseY <= 0 || mouseX > width || mouseY > height) {
+                // Release outside the button:
+                captureControl.canceled = true
+            }
+        }
     }
 
     CameraToolBar {
index 99858db..3875f11 100644 (file)
@@ -47,5 +47,6 @@
        <file>ZoomCaptureButton.qml</file>
        <file>CaptureCancel.qml</file>
        <file>ZoomSlider.qml</file>
+       <file>CaptureControl.qml</file>
     </qresource>
 </RCC>