wallpaper now uses Image (hopefully temporarily)
Format (JS/TS) / format (pull_request) Failing after 7s
Lint (JS/TS) / lint (pull_request) Failing after 10s
Lint (Python) / lint (pull_request) Failing after 19s
Lint (Rust) / lint (pull_request) Failing after 1m36s

This commit is contained in:
2026-05-19 22:12:37 +02:00
parent 62ec1b9f33
commit 24d5584b98
5 changed files with 102 additions and 57 deletions
+1
View File
@@ -14,6 +14,7 @@ Searcher {
property string actualCurrent: WallpaperPath.currentWallpaperPath property string actualCurrent: WallpaperPath.currentWallpaperPath
readonly property string current: showPreview ? previewPath : actualCurrent readonly property string current: showPreview ? previewPath : actualCurrent
property string previewPath property string previewPath
property bool recentlyChanged
property bool showPreview: false property bool showPreview: false
function preview(path: string): void { function preview(path: string): void {
@@ -18,8 +18,8 @@ Item {
property real displayY: (height - paintedHeight) * 0.5 property real displayY: (height - paintedHeight) * 0.5
property real scaleX: sourceW / displayW property real scaleX: sourceW / displayW
property real scaleY: sourceH / displayH property real scaleY: sourceH / displayH
property real sourceH: sourceSize.height property real sourceH: Quickshell.screens[0].height
property real sourceW: sourceSize.width property real sourceW: Quickshell.screens[0].width
anchors.fill: parent anchors.fill: parent
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
@@ -85,6 +85,7 @@ Item {
updateCrop(mouse.x, mouse.y); updateCrop(mouse.x, mouse.y);
} }
onReleased: { onReleased: {
Wallpapers.recentlyChanged = false;
Config.background.sourceClipX = cropRect.sourceRect.x; Config.background.sourceClipX = cropRect.sourceRect.x;
Config.background.sourceClipY = cropRect.sourceRect.y; Config.background.sourceClipY = cropRect.sourceRect.y;
Config.background.sourceClipW = cropRect.sourceRect.width; Config.background.sourceClipW = cropRect.sourceRect.width;
+80
View File
@@ -0,0 +1,80 @@
pragma ComponentBehavior: Bound
import QtQuick
import qs.Components
import qs.Helpers
import qs.Config
Item {
id: root
property Image current: one
property string source: Wallpapers.current
anchors.fill: parent
Component.onCompleted: {
if (source)
Qt.callLater(() => one.update());
}
onSourceChanged: {
if (!source) {
current = null;
} else 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
retainWhileLoading: true
scale: Wallpapers.showPreview ? 1 : 0.8
sourceClipRect: Qt.rect(Config.background.sourceClipX, Config.background.sourceClipY, Config.background.sourceClipW, Config.background.sourceClipH)
states: State {
name: "visible"
when: root.current === img
PropertyChanges {
img.opacity: 1
img.scale: 1
}
}
transitions: Transition {
Anim {
duration: Config.background.wallFadeDuration
properties: "opacity,scale"
target: img
}
}
onStatusChanged: {
if (status === Image.Ready) {
root.current = this;
}
}
}
}
+17 -55
View File
@@ -1,5 +1,6 @@
pragma ComponentBehavior: Bound pragma ComponentBehavior: Bound
import Quickshell
import QtQuick import QtQuick
import qs.Components import qs.Components
import qs.Helpers import qs.Helpers
@@ -8,73 +9,34 @@ import qs.Config
Item { Item {
id: root id: root
property Image current: one required property ShellScreen screen
property string source: Wallpapers.current property string source: Wallpapers.current
anchors.fill: parent anchors.fill: parent
Component.onCompleted: { Image {
if (source)
Qt.callLater(() => one.update());
}
onSourceChanged: {
if (!source) {
current = null;
} else if (current === one) {
two.update();
} else {
one.update();
}
}
Img {
id: one
}
Img {
id: two
}
component Img: Image {
id: img id: img
function update(): void {
if (source === root.source) {
root.current = this;
} else {
source = root.source;
}
}
anchors.fill: parent anchors.fill: parent
asynchronous: true asynchronous: true
fillMode: Image.PreserveAspectCrop fillMode: Image.PreserveAspectCrop
opacity: 0 opacity: 1
retainWhileLoading: true retainWhileLoading: true
scale: Wallpapers.showPreview ? 1 : 0.8 source: root.source
sourceClipRect: Qt.rect(Config.background.sourceClipX, Config.background.sourceClipY, Config.background.sourceClipW, Config.background.sourceClipH) sourceClipRect: Wallpapers.recentlyChanged ? null : Qt.rect(Config.background.sourceClipX, Config.background.sourceClipY, Config.background.sourceClipW, Config.background.sourceClipH)
sourceSize.height: root.screen.height
sourceSize.width: root.screen.width
states: State { onSourceChanged: {
name: "visible" if (Wallpapers.recentlyChanged) {
when: root.current === img Config.background.sourceClipH = 0;
Config.background.sourceClipW = 0;
PropertyChanges { Config.background.sourceClipY = 0;
img.opacity: 1 Config.background.sourceClipX = 0;
img.scale: 1 Config.background.zoom = 1.0;
} Config.save();
}
transitions: Transition {
Anim {
duration: Config.background.wallFadeDuration
properties: "opacity,scale"
target: img
}
}
onStatusChanged: {
if (status === Image.Ready) {
root.current = this;
} }
Wallpapers.recentlyChanged = true;
} }
} }
} }
+1
View File
@@ -30,6 +30,7 @@ Loader {
} }
WallBackground { WallBackground {
screen: root.screen
} }
Loader { Loader {