75 lines
1.8 KiB
QML
75 lines
1.8 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import qs.components
|
|
|
|
Image {
|
|
id: root
|
|
|
|
property bool hadPrevious
|
|
property bool fadingOut
|
|
property bool preventInit
|
|
property int fadeOutAnim: Anim.FastEffects
|
|
property int fadeInAnim: Anim.DefaultEffects
|
|
property int fadeInLargeAnim: Anim.StandardLarge
|
|
|
|
function maybeStartInAnim(): void {
|
|
if (!preventInit && !opacityInAnim.running && status === Image.Ready) {
|
|
opacityInAnim.type = hadPrevious ? fadeInAnim : fadeInLargeAnim;
|
|
opacityInAnim.start();
|
|
}
|
|
}
|
|
|
|
asynchronous: true
|
|
fillMode: Image.PreserveAspectCrop
|
|
|
|
sourceSize: {
|
|
const dpr = (QsWindow.window as QsWindow)?.devicePixelRatio ?? 1;
|
|
return Qt.size(width * dpr, height * dpr);
|
|
}
|
|
|
|
retainWhileLoading: true
|
|
opacity: 0
|
|
|
|
onStatusChanged: maybeStartInAnim()
|
|
onPreventInitChanged: maybeStartInAnim()
|
|
|
|
Anim on opacity {
|
|
id: opacityInAnim
|
|
|
|
running: false
|
|
to: 1
|
|
}
|
|
|
|
Behavior on source {
|
|
SequentialAnimation {
|
|
ScriptAction {
|
|
script: opacityInAnim.stop()
|
|
}
|
|
PropertyAction {
|
|
target: root
|
|
property: "fadingOut"
|
|
value: true
|
|
}
|
|
Anim {
|
|
target: root
|
|
property: "opacity"
|
|
to: 0
|
|
type: root.fadeOutAnim
|
|
}
|
|
PropertyAction {
|
|
target: root
|
|
property: "fadingOut"
|
|
value: false
|
|
}
|
|
PropertyAction {
|
|
target: root
|
|
property: "hadPrevious"
|
|
value: root.source
|
|
}
|
|
PropertyAction {}
|
|
ScriptAction {
|
|
script: root.maybeStartInAnim()
|
|
}
|
|
}
|
|
}
|
|
}
|