diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-07-19 16:59:32 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-07-19 16:59:32 +1000 |
| commit | 58826b7deb07f187d2c2c8cac3bf651a008b4646 (patch) | |
| tree | 2df9f0fa10739beb363ac1da518bb467e996c32a /modules/launcher/items/WallpaperItem.qml | |
| parent | launcher: better scheme search (diff) | |
| download | caelestia-shell-58826b7deb07f187d2c2c8cac3bf651a008b4646.tar.gz caelestia-shell-58826b7deb07f187d2c2c8cac3bf651a008b4646.tar.bz2 caelestia-shell-58826b7deb07f187d2c2c8cac3bf651a008b4646.zip | |
internal: move launcher stuff into subfolders
Diffstat (limited to 'modules/launcher/items/WallpaperItem.qml')
| -rw-r--r-- | modules/launcher/items/WallpaperItem.qml | 96 |
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 + } +} |