quickshell/modules/background/Wallpaper.qml
2025-06-10 15:34:15 +02:00

77 lines
1.6 KiB
QML

pragma ComponentBehavior: Bound
import "root:/widgets"
import "root:/services"
import "root:/config"
import QtQuick
Item {
id: root
property url source: Wallpapers.current ? `file://${Wallpapers.current}` : ""
property Image current: one
anchors.fill: parent
onSourceChanged: {
if (current === one)
two.update();
else
one.update();
}
Img {
id: one
}
Img {
id: two
}
component Img: CachingImage {
id: img
function update(): void {
const srcPath = `${root.source}`.slice(7);
if (thumbnail.originalPath === srcPath) {
root.current = this;
} else
path = srcPath;
}
anchors.fill: parent
loadOriginal: true
asynchronous: true
cache: false
fillMode: Image.PreserveAspectCrop
opacity: 0
scale: Wallpapers.showPreview ? 1 : 0.8
onStatusChanged: {
if (status === Image.Ready)
root.current = this;
}
states: State {
name: "visible"
when: root.current === img
PropertyChanges {
img.opacity: 1
img.scale: 1
}
}
transitions: Transition {
NumberAnimation {
target: img
properties: "opacity,scale"
duration: Appearance.anim.durations.normal
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.standard
}
}
}
}