From 1a3b3e649e21a6cee2b8026f62ecfb5391f13840 Mon Sep 17 00:00:00 2001 From: Ming Rui Zhang <mingrui.zhang@savoirfairelinux.com> Date: Mon, 10 May 2021 15:16:07 -0400 Subject: [PATCH] avatarimage: fix opacity animation when switching to another screen Gitlab: #404 Change-Id: I38983d2616fb618f7960112a2408a52bb3c9ad35 --- src/commoncomponents/AvatarImage.qml | 49 ++++++++++++++++------------ 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/src/commoncomponents/AvatarImage.qml b/src/commoncomponents/AvatarImage.qml index 96acf5ebc..b4f6f2214 100644 --- a/src/commoncomponents/AvatarImage.qml +++ b/src/commoncomponents/AvatarImage.qml @@ -106,8 +106,18 @@ Item { enableAnimation = false rootImage.source = "" - rootImage.source = tempImageSource + enableAnimation = tempEnableAnimation + rootImage.source = tempImageSource + } + + function rootImageOverlayReadyCallback() { + if (rootImageOverlay.status === Image.Ready && + (rootImageOverlay.state === "avatarImgFadeIn")) { + rootImageOverlay.statusChanged.disconnect(rootImageOverlayReadyCallback) + + rootImageOverlay.state = '' + } } Image { @@ -127,8 +137,7 @@ Item { onStatusChanged: { if (status === Image.Ready) { if (enableAnimation) { - rootImageOverlay.state = "" - rootImageOverlay.state = "rootImageLoading" + rootImageOverlay.state = "avatarImgFadeIn" } else { rootImageOverlay.source = rootImage.source root.imageIsReady() @@ -156,30 +165,30 @@ Item { fillMode: Image.PreserveAspectFit - opacity: enableAnimation ? 1 : 0 - - onOpacityChanged: { - if (opacity === 0) - source = rootImage.source - } - - onStatusChanged: { - if (status === Image.Ready && opacity === 0) { - opacity = 1 - root.imageIsReady() - } - } - states: State { - name: "rootImageLoading" - PropertyChanges { target: rootImageOverlay; opacity: 0} + name: "avatarImgFadeIn" + PropertyChanges { + target: rootImageOverlay + opacity: 0 + } } transitions: Transition { NumberAnimation { properties: "opacity" easing.type: Easing.InOutQuad - duration: transitionDuration + duration: enableAnimation ? 400 : 0 + } + + onRunningChanged: { + if ((rootImageOverlay.state === "avatarImgFadeIn") && (!running)) { + if (rootImageOverlay.source === rootImage.source) { + rootImageOverlay.state = '' + return + } + rootImageOverlay.statusChanged.connect(rootImageOverlayReadyCallback) + rootImageOverlay.source = rootImage.source + } } } } -- GitLab