summaryrefslogtreecommitdiff
path: root/modules/launcher/items/WallpaperItem.qml
diff options
context:
space:
mode:
Diffstat (limited to 'modules/launcher/items/WallpaperItem.qml')
-rw-r--r--modules/launcher/items/WallpaperItem.qml96
1 files changed, 96 insertions, 0 deletions
diff --git a/modules/launcher/items/WallpaperItem.qml b/modules/launcher/items/WallpaperItem.qml
new file mode 100644
index 0000000..e3d84d4
--- /dev/null
+++ b/modules/launcher/items/WallpaperItem.qml
@@ -0,0 +1,96 @@
+import qs.widgets
+import qs.services
+import qs.config
+import Quickshell
+import Quickshell.Widgets
+import QtQuick
+import QtQuick.Effects
+
+StyledRect {
+ id: root
+
+ required property Wallpapers.Wallpaper modelData
+ required property PersistentProperties visibilities
+
+ scale: 0.5
+ opacity: 0
+ z: PathView.z ?? 0
+
+ Component.onCompleted: {
+ scale = Qt.binding(() => PathView.isCurrentItem ? 1 : PathView.onPath ? 0.8 : 0);
+ opacity = Qt.binding(() => PathView.onPath ? 1 : 0);
+ }
+
+ implicitWidth: image.width + Appearance.padding.larger * 2
+ implicitHeight: image.height + label.height + Appearance.spacing.small / 2 + Appearance.padding.large + Appearance.padding.normal
+
+ StateLayer {
+ radius: Appearance.rounding.normal
+
+ function onClicked(): void {
+ Wallpapers.setWallpaper(root.modelData.path);
+ root.visibilities.launcher = false;
+ }
+ }
+
+ RectangularShadow {
+ opacity: root.PathView.isCurrentItem ? 0.7 : 0
+ anchors.fill: image
+ radius: image.radius
+ color: Colours.palette.m3shadow
+ blur: 10
+ spread: 3
+
+ Behavior on opacity {
+ Anim {}
+ }
+ }
+
+ ClippingRectangle {
+ id: image
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ y: Appearance.padding.large
+ color: "transparent"
+ radius: Appearance.rounding.normal
+
+ implicitWidth: Config.launcher.sizes.wallpaperWidth
+ implicitHeight: implicitWidth / 16 * 9
+
+ CachingImage {
+ path: root.modelData.path
+ smooth: !root.PathView.view.moving
+
+ anchors.fill: parent
+ }
+ }
+
+ StyledText {
+ id: label
+
+ anchors.top: image.bottom
+ anchors.topMargin: Appearance.spacing.small / 2
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ width: image.width - Appearance.padding.normal * 2
+ horizontalAlignment: Text.AlignHCenter
+ elide: Text.ElideRight
+ renderType: Text.QtRendering
+ text: root.modelData.name
+ font.pointSize: Appearance.font.size.normal
+ }
+
+ Behavior on scale {
+ Anim {}
+ }
+
+ Behavior on opacity {
+ Anim {}
+ }
+
+ component Anim: NumberAnimation {
+ duration: Appearance.anim.durations.normal
+ easing.type: Easing.BezierSpline
+ easing.bezierCurve: Appearance.anim.curves.standard
+ }
+}