summaryrefslogtreecommitdiff
path: root/modules/controlcenter/appearance
diff options
context:
space:
mode:
authorATMDA <atdma2600@gmail.com>2025-11-15 23:41:31 -0500
committerATMDA <atdma2600@gmail.com>2025-11-15 23:41:31 -0500
commitce3902d8f34922401d7bec542c6116091aa2cf58 (patch)
tree3beafffdcb047ae08848593c747e4dc47b7fac82 /modules/controlcenter/appearance
parentcontrolcenter: wallpaper gradient/outline 1px fix (diff)
downloadcaelestia-shell-ce3902d8f34922401d7bec542c6116091aa2cf58.tar.gz
caelestia-shell-ce3902d8f34922401d7bec542c6116091aa2cf58.tar.bz2
caelestia-shell-ce3902d8f34922401d7bec542c6116091aa2cf58.zip
controlcenter: wallpaper selector
Diffstat (limited to 'modules/controlcenter/appearance')
-rw-r--r--modules/controlcenter/appearance/AppearancePane.qml130
1 files changed, 94 insertions, 36 deletions
diff --git a/modules/controlcenter/appearance/AppearancePane.qml b/modules/controlcenter/appearance/AppearancePane.qml
index b94a1e2..11eb2b0 100644
--- a/modules/controlcenter/appearance/AppearancePane.qml
+++ b/modules/controlcenter/appearance/AppearancePane.qml
@@ -1812,10 +1812,7 @@ RowLayout {
Loader {
id: rightAppearanceLoader
anchors.fill: parent
- anchors.topMargin: Appearance.padding.large * 2
- anchors.bottomMargin: Appearance.padding.large * 2
- anchors.leftMargin: 0
- anchors.rightMargin: 0
+ anchors.margins: Appearance.padding.large * 2
asynchronous: true
sourceComponent: appearanceRightContentComponent
property var rootPane: root
@@ -1844,12 +1841,12 @@ RowLayout {
anchors.left: parent.left
anchors.right: parent.right
- anchors.leftMargin: Appearance.padding.large * 2
- anchors.rightMargin: Appearance.padding.large * 2
+ anchors.top: parent.top
spacing: Appearance.spacing.normal
MaterialIcon {
- Layout.alignment: Qt.AlignHCenter
+ Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
+ Layout.topMargin: 0
text: "palette"
font.pointSize: Appearance.font.size.extraLarge * 3
font.bold: true
@@ -1877,39 +1874,53 @@ RowLayout {
color: Colours.palette.m3onSurfaceVariant
}
- GridView {
- id: wallpaperGrid
+ Item {
Layout.fillWidth: true
Layout.topMargin: Appearance.spacing.large
- Layout.preferredHeight: Math.min(600, Math.ceil(count / Math.floor(width / cellWidth)) * cellHeight)
- Layout.alignment: Qt.AlignHCenter
-
- cellWidth: 200 + Appearance.spacing.normal
- cellHeight: 140 + Appearance.spacing.normal
+ Layout.preferredHeight: wallpaperGrid.Layout.preferredHeight
+
+ GridView {
+ id: wallpaperGrid
+ anchors.fill: parent
+
+ readonly property int minCellWidth: 200 + Appearance.spacing.normal
+ readonly property int columnsCount: Math.max(1, Math.floor(parent.width / minCellWidth))
+
+ Layout.preferredHeight: Math.ceil(count / columnsCount) * cellHeight
+ height: Layout.preferredHeight
+
+ // Distribute width evenly across columns
+ cellWidth: width / columnsCount
+ cellHeight: 140 + Appearance.spacing.normal
+
+ leftMargin: 0
+ rightMargin: 0
+ topMargin: 0
+ bottomMargin: 0
- model: Wallpapers.list
- clip: true
+ model: Wallpapers.list
+ clip: true
+
+ // Disable GridView's own scrolling - let parent handle it
+ interactive: false
// Enable caching for better performance
cacheBuffer: cellHeight * 2
- StyledScrollBar.vertical: StyledScrollBar {
- flickable: wallpaperGrid
- }
-
delegate: Item {
required property var modelData
- width: 200
- height: 140
-
- // Center in cell
- x: (wallpaperGrid.cellWidth - width) / 2
- y: (wallpaperGrid.cellHeight - height) / 2
+ width: wallpaperGrid.cellWidth
+ height: wallpaperGrid.cellHeight
readonly property bool isCurrent: modelData.path === Wallpapers.actualCurrent
StateLayer {
+ anchors.fill: parent
+ anchors.leftMargin: Appearance.spacing.normal / 2
+ anchors.rightMargin: Appearance.spacing.normal / 2
+ anchors.topMargin: Appearance.spacing.normal / 2
+ anchors.bottomMargin: Appearance.spacing.normal / 2
radius: Appearance.rounding.normal
function onClicked(): void {
@@ -1921,6 +1932,10 @@ RowLayout {
id: image
anchors.fill: parent
+ anchors.leftMargin: Appearance.spacing.normal / 2
+ anchors.rightMargin: Appearance.spacing.normal / 2
+ anchors.topMargin: Appearance.spacing.normal / 2
+ anchors.bottomMargin: Appearance.spacing.normal / 2
color: Colours.tPalette.m3surfaceContainer
radius: Appearance.rounding.normal
antialiasing: true
@@ -1930,6 +1945,7 @@ RowLayout {
path: modelData.path
anchors.fill: parent
+ fillMode: Image.PreserveAspectCrop
cache: true
visible: opacity > 0
antialiasing: true
@@ -1981,6 +1997,10 @@ RowLayout {
// Border overlay that doesn't affect image size
Rectangle {
anchors.fill: parent
+ anchors.leftMargin: Appearance.spacing.normal / 2
+ anchors.rightMargin: Appearance.spacing.normal / 2
+ anchors.topMargin: Appearance.spacing.normal / 2
+ anchors.bottomMargin: Appearance.spacing.normal / 2
color: "transparent"
radius: Appearance.rounding.normal
border.width: isCurrent ? 2 : 0
@@ -2012,27 +2032,63 @@ RowLayout {
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
+ anchors.leftMargin: isCurrent ? 2 : 0
+ anchors.rightMargin: isCurrent ? 2 : 0
+ anchors.bottomMargin: isCurrent ? 2 : 0
- implicitHeight: filenameText.implicitHeight + Appearance.padding.normal * 2
+ implicitHeight: filenameText.implicitHeight + Appearance.padding.normal * 1.5
- radius: Appearance.rounding.normal
+ // Only round bottom corners
+ topLeftRadius: 0
+ topRightRadius: 0
+ bottomLeftRadius: Appearance.rounding.normal
+ bottomRightRadius: Appearance.rounding.normal
+
+ Behavior on anchors.leftMargin {
+ NumberAnimation {
+ duration: 150
+ easing.type: Easing.OutQuad
+ }
+ }
+
+ Behavior on anchors.rightMargin {
+ NumberAnimation {
+ duration: 150
+ easing.type: Easing.OutQuad
+ }
+ }
+
+ Behavior on anchors.bottomMargin {
+ NumberAnimation {
+ duration: 150
+ easing.type: Easing.OutQuad
+ }
+ }
gradient: Gradient {
GradientStop {
position: 0.0
- color: Qt.rgba(0, 0, 0, 0)
+ color: Qt.rgba(Colours.palette.m3surfaceContainer.r,
+ Colours.palette.m3surfaceContainer.g,
+ Colours.palette.m3surfaceContainer.b, 0)
}
GradientStop {
- position: 0.4
- color: Qt.rgba(0, 0, 0, 0.2)
+ position: 0.3
+ color: Qt.rgba(Colours.palette.m3surfaceContainer.r,
+ Colours.palette.m3surfaceContainer.g,
+ Colours.palette.m3surfaceContainer.b, 0.7)
}
GradientStop {
- position: 0.8
- color: Qt.rgba(0, 0, 0, 0.5)
+ position: 0.6
+ color: Qt.rgba(Colours.palette.m3surfaceContainer.r,
+ Colours.palette.m3surfaceContainer.g,
+ Colours.palette.m3surfaceContainer.b, 0.9)
}
GradientStop {
position: 1.0
- color: Qt.rgba(0, 0, 0, 0.6)
+ color: Qt.rgba(Colours.palette.m3surfaceContainer.r,
+ Colours.palette.m3surfaceContainer.g,
+ Colours.palette.m3surfaceContainer.b, 0.95)
}
}
}
@@ -2069,9 +2125,10 @@ RowLayout {
text: fileName
font.pointSize: Appearance.font.size.smaller
font.weight: 500
- color: isCurrent ? Colours.palette.m3primary : "#FFFFFF"
+ color: isCurrent ? Colours.palette.m3primary : Colours.palette.m3onSurface
elide: Text.ElideMiddle
maximumLineCount: 1
+ horizontalAlignment: Text.AlignHCenter
opacity: 0
@@ -2088,8 +2145,9 @@ RowLayout {
}
}
}
- }
+ }
}
}
}
+ }
}