From 7198f0e33c6c847739fd30f436a40ca21e67db25 Mon Sep 17 00:00:00 2001
From: SeeLook <seelook@gmail.com>
Date: Tue, 29 Dec 2020 09:20:15 +0100
Subject: [PATCH] Added pinch zoom to main score

---
 src/qml/MainScore.qml          | 47 ++++++++++++++++++++++------------
 src/qml/level/LevelPreview.qml |  7 +++--
 2 files changed, 33 insertions(+), 21 deletions(-)

diff --git a/src/qml/MainScore.qml b/src/qml/MainScore.qml
index 216160555..3dec45666 100644
--- a/src/qml/MainScore.qml
+++ b/src/qml/MainScore.qml
@@ -56,24 +56,37 @@ Score {
   }
 
   Timer { id: zoomTimer; interval: 500 }
-  MouseArea {
+  PinchArea {
     anchors.fill: parent
-    z: -1
-    onWheel: {
-      if (wheel.modifiers & Qt.ControlModifier) {
-          if (wheel.angleDelta.y > 0) {
-              if (!zoomTimer.running) {
-                zoomInAct.trigger()
-                zoomTimer.running = true
-              }
-          } else if (wheel.angleDelta.y < 0) {
-              if (!zoomTimer.running) {
-                zoomOutAct.trigger()
-                zoomTimer.running = true
-              }
-          }
-      } else
-          wheel.accepted = false
+    pinch.dragAxis: Pinch.XandYAxis
+    onPinchFinished: {
+      if (pinch.scale > 1.2)
+        zoom(true)
+      else if (pinch.scale < 0.8)
+        zoom(false)
+    }
+    // HACK: keeping MouseArea inside PinchArea makes it working
+    MouseArea {
+      anchors.fill: parent
+      z: -1
+      onWheel: {
+        if (wheel.modifiers & Qt.ControlModifier) {
+            if (wheel.angleDelta.y > 0)
+              zoom(true)
+            else if (wheel.angleDelta.y < 0)
+              zoom(false)
+        } else
+            wheel.accepted = false
+      }
+    }
+  }
+  function zoom(zoomIn) {
+    if (!zoomTimer.running) {
+      if (zoomIn)
+        zoomInAct.trigger()
+      else
+        zoomOutAct.trigger()
+      zoomTimer.running = true
     }
   }
 
diff --git a/src/qml/level/LevelPreview.qml b/src/qml/level/LevelPreview.qml
index 66df30193..4ff5d89a0 100644
--- a/src/qml/level/LevelPreview.qml
+++ b/src/qml/level/LevelPreview.qml
@@ -21,7 +21,6 @@ TlevelPreviewItem {
       text: instrumentGlyph
     }
     PinchArea {
-      id: pinchArea
       anchors.fill: parent
       pinch.target: levCol
       pinch.minimumScale: 0.5
@@ -34,10 +33,10 @@ TlevelPreviewItem {
           if (wheel.modifiers & Qt.ControlModifier) {
             if (wheel.angleDelta.y > 0)
               zoom(true)
-              else if (wheel.angleDelta.y < 0)
-                zoom(false)
+            else if (wheel.angleDelta.y < 0)
+              zoom(false)
           } else
-            wheel.accepted = false
+              wheel.accepted = false
         }
       }
     }
-- 
GitLab