From 39301c534cccee344a6a8e52ea03a234138f7567 Mon Sep 17 00:00:00 2001 From: purian23 Date: Wed, 17 Jun 2026 11:38:25 -0400 Subject: [PATCH] add: DankColorSwatch component & settings sync --- quickshell/Widgets/DankColorSwatch.qml | 45 ++++++ quickshell/Widgets/DankDropdown.qml | 19 +-- .../translations/settings_search_index.json | 146 +++++++++++------- 3 files changed, 140 insertions(+), 70 deletions(-) create mode 100644 quickshell/Widgets/DankColorSwatch.qml diff --git a/quickshell/Widgets/DankColorSwatch.qml b/quickshell/Widgets/DankColorSwatch.qml new file mode 100644 index 00000000..586b68ca --- /dev/null +++ b/quickshell/Widgets/DankColorSwatch.qml @@ -0,0 +1,45 @@ +import QtQuick +import qs.Common + +Item { + id: root + + property color swatchColor: "transparent" + property color ringColor: Theme.outline + property real minPreviewAlpha: 0.4 + readonly property bool translucent: swatchColor.a > 0 && swatchColor.a < 1 + readonly property color displayColor: translucent ? Qt.rgba(swatchColor.r, swatchColor.g, swatchColor.b, Math.max(swatchColor.a, minPreviewAlpha)) : swatchColor + + Loader { + anchors.fill: parent + active: root.translucent + sourceComponent: Component { + Canvas { + onPaint: { + const ctx = getContext("2d"); + ctx.reset(); + ctx.beginPath(); + ctx.arc(width / 2, height / 2, width / 2, 0, 2 * Math.PI); + ctx.clip(); + const s = Math.max(2, Math.round(width / 4)); + for (let y = 0; y < height; y += s) { + for (let x = 0; x < width; x += s) { + ctx.fillStyle = (((x / s) + (y / s)) % 2 === 0) ? "#ffffff" : "#bdbdbd"; + ctx.fillRect(x, y, s, s); + } + } + } + onVisibleChanged: if (visible) + requestPaint() + } + } + } + + Rectangle { + anchors.fill: parent + radius: width / 2 + color: root.displayColor + border.color: root.ringColor + border.width: 1 + } +} diff --git a/quickshell/Widgets/DankDropdown.qml b/quickshell/Widgets/DankDropdown.qml index 5397dadc..2d8fc3b8 100644 --- a/quickshell/Widgets/DankDropdown.qml +++ b/quickshell/Widgets/DankDropdown.qml @@ -161,19 +161,14 @@ Item { anchors.rightMargin: Theme.spacingS spacing: Theme.spacingS - Rectangle { + DankColorSwatch { id: triggerSwatch - property var swatchColor: root.optionColorMap[root.currentValue] - width: 16 height: 16 - radius: 8 - color: swatchColor !== undefined ? swatchColor : "transparent" - border.color: Theme.outline - border.width: 1 anchors.verticalCenter: parent.verticalCenter - visible: swatchColor !== undefined + visible: root.optionColorMap[root.currentValue] !== undefined + swatchColor: visible ? root.optionColorMap[root.currentValue] : "transparent" } DankIcon { @@ -473,17 +468,15 @@ Item { anchors.verticalCenter: parent.verticalCenter spacing: Theme.spacingS - Rectangle { + DankColorSwatch { id: optionSwatch width: 16 height: 16 - radius: 8 - color: delegateRoot.swatchColor !== undefined ? delegateRoot.swatchColor : "transparent" - border.color: delegateRoot.isCurrentValue ? Theme.primary : Theme.outline - border.width: 1 anchors.verticalCenter: parent.verticalCenter visible: delegateRoot.swatchColor !== undefined + swatchColor: visible ? delegateRoot.swatchColor : "transparent" + ringColor: delegateRoot.isCurrentValue ? Theme.primary : Theme.outline } DankIcon { diff --git a/quickshell/translations/settings_search_index.json b/quickshell/translations/settings_search_index.json index bbf180aa..00e8e6da 100644 --- a/quickshell/translations/settings_search_index.json +++ b/quickshell/translations/settings_search_index.json @@ -2088,7 +2088,8 @@ "appearance", "around", "bar", - "border", + "color", + "custom", "dank", "desktop", "focused", @@ -2103,8 +2104,7 @@ "workspace" ], "icon": "palette", - "description": "Show an outline ring around the focused workspace indicator", - "conditionKey": "isNiri" + "description": "Show an outline ring around the focused workspace indicator" }, { "section": "_tab_7", @@ -3180,6 +3180,33 @@ "description": "Mouse pointer appearance", "conditionKey": "isNiri" }, + { + "section": "widgetBackgroundCustomStrength", + "label": "Custom Blend", + "tabIndex": 10, + "category": "Theme & Colors", + "keywords": [ + "appearance", + "background", + "between", + "blend", + "color", + "colors", + "colour", + "custom", + "high", + "hue", + "look", + "scheme", + "selected", + "style", + "surface", + "theme", + "tint", + "widget" + ], + "description": "Blend between Surface High and the selected custom color" + }, { "section": "matugenTemplateNeovimSettings", "label": "Dark mode base", @@ -4045,78 +4072,59 @@ "wezterm" ] }, - { - "section": "widgetBackgroundColor", - "label": "Widget Background Color", - "tabIndex": 10, - "category": "Theme & Colors", - "keywords": [ - "appearance", - "background", - "choose", - "color", - "colors", - "colour", - "components", - "hue", - "look", - "modules", - "scheme", - "style", - "theme", - "tint", - "widget", - "widgets" - ], - "description": "Choose the background color for widgets" - }, - { - "section": "widgetColorMode", - "label": "Widget Style", - "tabIndex": 10, - "category": "Theme & Colors", - "keywords": [ - "appearance", - "change", - "colorful", - "colors", - "default", - "look", - "panel", - "scheme", - "statusbar", - "style", - "taskbar", - "theme", - "topbar", - "widget" - ], - "description": "Change bar appearance" - }, { "section": "widgetStyling", "label": "Widget Styling", "tabIndex": 10, "category": "Theme & Colors", "keywords": [ + "accent", "appearance", - "change", + "choose", + "colored", "colors", + "colour", + "hue", "look", + "neutral", "opacity", - "panel", "scheme", - "statusbar", "style", "styling", - "taskbar", + "text", "theme", - "topbar", + "tint", "transparency", "widget" ], "icon": "opacity", - "description": "Change bar appearance" + "description": "Choose neutral or accent-colored widget text" + }, + { + "section": "widgetColorMode", + "label": "Widget Text Style", + "tabIndex": 10, + "category": "Theme & Colors", + "keywords": [ + "accent", + "appearance", + "choose", + "colored", + "colorful", + "colors", + "colour", + "default", + "hue", + "look", + "neutral", + "scheme", + "style", + "text", + "theme", + "tint", + "widget" + ], + "description": "Choose neutral or accent-colored widget text" }, { "section": "matugenTemplateZed", @@ -5295,6 +5303,30 @@ ], "description": "Play sound after logging in" }, + { + "section": "muteSoundsWhenMediaPlaying", + "label": "Mute During Playback", + "tabIndex": 15, + "category": "Sounds", + "keywords": [ + "audio", + "during", + "effects", + "media", + "mpris", + "music", + "mute", + "playback", + "playing", + "sfx", + "silence", + "sound", + "sounds", + "system", + "while" + ], + "description": "Silence system sounds while media is playing" + }, { "section": "soundNewNotification", "label": "New Notification",