From 15b17207756755ac004874bfcf14870e36de23a5 Mon Sep 17 00:00:00 2001 From: miruka Date: Mon, 20 Jul 2020 01:07:00 -0400 Subject: [PATCH] Pause timeline GIF while image viewer is open --- TODO.md | 3 +-- src/gui/Base/HImage.qml | 9 ++++----- src/gui/Pages/Chat/Timeline/EventImage.qml | 17 +++++++++++++---- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/TODO.md b/TODO.md index 98b9e6c3..aa389ba3 100644 --- a/TODO.md +++ b/TODO.md @@ -1,10 +1,9 @@ # TODO - Image viewer: - - fix gifs - open externally in context menu in timeline thumbnail - hflickable support kinetic scrolling disabler and speed/decel settings - - buttons + - buttons (include a working GIF play/pause) - keyboard controls - prevent drag-scrolling timeline when image opened diff --git a/src/gui/Base/HImage.qml b/src/gui/Base/HImage.qml index e7680855..ce3b09c2 100644 --- a/src/gui/Base/HImage.qml +++ b/src/gui/Base/HImage.qml @@ -16,6 +16,7 @@ Image { property alias radius: roundMask.radius property alias showProgressBar: progressBarLoader.active + property bool pause: ! window.settings.media.autoPlayGIF readonly property int circleRadius: Math.ceil(Math.max(image.width, image.height)) @@ -50,8 +51,6 @@ Image { AnimatedImage { id: animatedImage - property bool userPaused: ! window.settings.media.autoPlayGIF - source: image.source autoTransform: image.autoTransform asynchronous: image.asynchronous @@ -66,7 +65,7 @@ Image { // Online GIFs won't be able to loop if cache is set to false, // but caching GIFs is expansive. cache: ! Qt.resolvedUrl(source).startsWith("file://") - paused: ! visible || window.hidden || userPaused + paused: ! visible || window.hidden || image.pause layer.enabled: image.radius !== 0 layer.effect: OpacityMask { maskSource: roundMask } @@ -96,10 +95,10 @@ Image { anchors.bottomMargin: theme.spacing / 2 enableRadius: true - icon.name: parent.userPaused ? "player-play" : "player-pause" + icon.name: image.pause ? "player-play" : "player-pause" iconItem.small: true visible: parent.width > width * 2 && parent.height > height * 2 - onClicked: parent.userPaused = ! parent.userPaused + onClicked: image.pause = ! image.pause } } } diff --git a/src/gui/Pages/Chat/Timeline/EventImage.qml b/src/gui/Pages/Chat/Timeline/EventImage.qml index 3a29b864..c495aae7 100644 --- a/src/gui/Pages/Chat/Timeline/EventImage.qml +++ b/src/gui/Pages/Chat/Timeline/EventImage.qml @@ -67,10 +67,19 @@ HMxcImage { acceptedModifiers: Qt.NoModifier gesturePolicy: TapHandler.ReleaseWithinBounds - onTapped: - eventList.selectedCount ? - eventDelegate.toggleChecked() : - eventList.openImageViewer(singleMediaInfo) + onTapped: { + if (eventList.selectedCount) { + eventDelegate.toggleChecked() + return + } + + const wasPaused = image.pause + image.pause = true + + eventList.openImageViewer(singleMediaInfo, "", popup => { + popup.closed.connect(() => image.pause = wasPaused) + }) + } } TapHandler {