summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/background/Background.qml2
-rw-r--r--modules/background/Wallpaper.qml75
-rw-r--r--services/Wallpapers.qml14
3 files changed, 91 insertions, 0 deletions
diff --git a/modules/background/Background.qml b/modules/background/Background.qml
index 7a46c72..2dda9fb 100644
--- a/modules/background/Background.qml
+++ b/modules/background/Background.qml
@@ -26,6 +26,8 @@ Variants {
anchors.bottom: true
anchors.left: true
anchors.right: true
+
+ Wallpaper {}
}
}
}
diff --git a/modules/background/Wallpaper.qml b/modules/background/Wallpaper.qml
new file mode 100644
index 0000000..80848d5
--- /dev/null
+++ b/modules/background/Wallpaper.qml
@@ -0,0 +1,75 @@
+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: Image {
+ id: img
+
+ function update(): void {
+ if (source === root.source)
+ root.current = this;
+ else
+ source = root.source;
+ }
+
+ anchors.fill: parent
+ asynchronous: true
+ fillMode: Image.PreserveAspectCrop
+ opacity: 0
+ scale: 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 {
+ from: "*"
+ to: "*"
+
+ NumberAnimation {
+ target: img
+ properties: "opacity,scale"
+ duration: Appearance.anim.durations.normal
+ easing.type: Easing.BezierSpline
+ easing.bezierCurve: Appearance.anim.curves.standard
+ }
+ }
+ }
+}
diff --git a/services/Wallpapers.qml b/services/Wallpapers.qml
index 7e9a576..8e98e32 100644
--- a/services/Wallpapers.qml
+++ b/services/Wallpapers.qml
@@ -9,9 +9,14 @@ import Qt.labs.platform
Singleton {
id: root
+ readonly property string currentPath: `${StandardPaths.standardLocations(StandardPaths.GenericStateLocation)[0]}/caelestia/wallpaper/last.txt`.slice(7)
readonly property string path: `${StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0]}/Wallpapers`.slice(7)
property list<Wallpaper> list
+ property bool showPreview: false
+ readonly property string current: showPreview ? preview : actualCurrent
+ property string preview
+ property string actualCurrent
readonly property list<var> preppedWalls: list.map(w => ({
name: Fuzzy.prepare(w.name),
@@ -32,6 +37,15 @@ Singleton {
setWall.startDetached();
}
+ reloadableId: "wallpapers"
+
+ FileView {
+ path: root.currentPath
+ watchChanges: true
+ onFileChanged: reload()
+ onLoaded: root.actualCurrent = text().trim()
+ }
+
Process {
id: setWall