summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--resources/qml/Root.qml4
-rw-r--r--resources/qml/dialogs/ImageOverlay.qml59
2 files changed, 28 insertions, 35 deletions
diff --git a/resources/qml/Root.qml b/resources/qml/Root.qml
index cd97cce2..72f30b7a 100644
--- a/resources/qml/Root.qml
+++ b/resources/qml/Root.qml
@@ -288,7 +288,9 @@ Pane {
             var dialog = imageOverlay.createObject(timelineRoot, {
                 "room": room,
                 "eventId": eventId,
-                "url": url
+                "url": url,
+                "originalWidth": originalWidth ?? 0,
+                "proportionalHeight": proportionalHeight ?? 0
             });
             dialog.showFullScreen();
             destroyOnClose(dialog);
diff --git a/resources/qml/dialogs/ImageOverlay.qml b/resources/qml/dialogs/ImageOverlay.qml
index 2e1261d3..dff96f35 100644
--- a/resources/qml/dialogs/ImageOverlay.qml
+++ b/resources/qml/dialogs/ImageOverlay.qml
@@ -4,7 +4,6 @@
 
 import QtQuick 2.15
 import QtQuick.Window 2.15
-import Qt.labs.animation 1.0
 
 import ".."
 
@@ -16,10 +15,12 @@ Window {
     required property string url
     required property string eventId
     required property Room room
+    required property int originalWidth
+    required property double proportionalHeight
 
     flags: Qt.FramelessWindowHint
 
-    visibility: Window.FullScreen
+    //visibility: Window.FullScreen
     color: Qt.rgba(0.2,0.2,0.2,0.66)
 
     Shortcut {
@@ -28,11 +29,18 @@ Window {
     }
 
 
+
     Item {
-        height: Math.min(parent.height, img.implicitHeight)
-        width: Math.min(parent.width, img.implicitWidth)
-        x: (parent.width - img.width)/2
-        y: (parent.height - img.height)/2
+        id: imgContainer
+
+        property int imgSrcWidth: (originalWidth && originalWidth > 200) ? originalWidth : Screen.width
+        property int imgSrcHeight: proportionalHeight ? imgSrcWidth * proportionalHeight : Screen.height
+
+        height: Math.min(parent.height, imgSrcHeight)
+        width: Math.min(parent.width, imgSrcWidth)
+
+        x: (parent.width - width)
+        y: (parent.height - height)
 
         Image {
             id: img
@@ -57,46 +65,29 @@ Window {
             eventId: imageOverlay.eventId
         }
 
-        BoundaryRule on scale {
-            enabled: img.loaded || mxcimage.loaded
-            id: sbr
-            minimum: 0.1
-            maximum: 10
-            minimumOvershoot: 0.02; maximumOvershoot: 10.02
+        onScaleChanged: {
+            if (scale > 10) scale = 10;
+            if (scale < 0.1) scale = 0.1
         }
+    }
 
-        BoundaryRule on x {
-           enabled: img.loaded || mxcimage.loaded
-           id: xbr
-           minimum: -100
-           maximum: imageOverlay.width - img.width + 100
-           minimumOvershoot: 100; maximumOvershoot: 100
-           overshootFilter: BoundaryRule.Peak
-        }
+    Item {
+        anchors.fill: parent
 
-        BoundaryRule on y {
-           enabled: img.loaded || mxcimage.loaded
-           id: ybr
-           minimum: -100
-           maximum: imageOverlay.height - img.height + 100
-           minimumOvershoot: 100; maximumOvershoot: 100
-           overshootFilter: BoundaryRule.Peak
-        }
 
         PinchHandler {
-            onActiveChanged: if (!active) sbr.returnToBounds();
+            target: imgContainer
+            maximumScale: 10
+            minimumScale: 0.1
         }
 
         WheelHandler {
             property: "scale"
-            onActiveChanged: if (!active) sbr.returnToBounds();
+            target: imgContainer
         }
 
         DragHandler {
-            onActiveChanged: if (!active) {
-               xbr.returnToBounds();
-               ybr.returnToBounds();
-            }
+            target: imgContainer
         }
 
         HoverHandler {