moment/src/qml/Base/HImage.qml

70 lines
1.9 KiB
QML
Raw Normal View History

import QtQuick 2.12
Image {
id: image
autoTransform: true
asynchronous: true
fillMode: Image.PreserveAspectFit
2019-09-13 06:23:30 +10:00
cache: ! (animate && animated) &&
2019-09-13 06:16:35 +10:00
(sourceSize.width + sourceSize.height) <= 512
property bool animate: true
2019-09-13 06:23:30 +10:00
readonly property bool animated:
image.source.toString()
.split("/").splice(-1)[0].split("?")[0].toLowerCase()
.endsWith(".gif")
2019-09-13 06:16:35 +10:00
Component {
2019-09-13 07:27:26 +10:00
id: animatedImageComponent
2019-09-13 06:16:35 +10:00
AnimatedImage {
2019-09-13 07:27:26 +10:00
id: animatedImage
2019-09-13 06:16:35 +10:00
source: image.source
autoTransform: image.autoTransform
asynchronous: image.asynchronous
fillMode: image.fillMode
mirror: image.mirror
mipmap: image.mipmap
smooth: image.smooth
horizontalAlignment: image.horizontalAlignment
verticalAlignment: image.verticalAlignment
cache: true // Needed to allow GIFs to loop
2019-09-13 06:23:30 +10:00
paused: ! visible || window.hidden || userPaused
2019-09-13 07:27:26 +10:00
property var pr: frameCount
onPrChanged: print(source, pr)
2019-09-13 06:23:30 +10:00
property bool userPaused: false
TapHandler {
onTapped: parent.userPaused = ! parent.userPaused
}
2019-09-13 07:27:26 +10:00
HIcon {
svgName: "play"
colorize: "transparent"
anchors.centerIn: parent
dimension: Math.min(
parent.width - theme.spacing * 2,
parent.height - theme.spacing * 2,
theme.controls.image.maxPauseIndicatorSize,
)
scale: parent.paused ? 1 : 0
visible: scale > 0
Behavior on scale { HNumberAnimation { overshoot: 4 } }
}
2019-09-13 06:16:35 +10:00
}
}
HLoader {
id: loader
anchors.fill: parent
2019-09-13 07:27:26 +10:00
sourceComponent: animate && animated ? animatedImageComponent : null
2019-09-13 06:16:35 +10:00
}
}