From 0787c63fedff64dd1c51010f30b5b3790b813927 Mon Sep 17 00:00:00 2001 From: bbedward Date: Sat, 27 Dec 2025 00:49:11 -0500 Subject: [PATCH] bar: change widget base hover blend logic --- quickshell/Common/Theme.qml | 5 ++++- quickshell/Modules/DankBar/Widgets/Media.qml | 4 ++-- .../Modules/DankBar/Widgets/PrivacyIndicator.qml | 10 ++++------ .../Modules/DankBar/Widgets/RunningApps.qml | 12 +++++------- .../Modules/DankBar/Widgets/SystemTrayBar.qml | 16 ++++++++-------- quickshell/Modules/Plugins/BasePill.qml | 8 +++----- 6 files changed, 26 insertions(+), 29 deletions(-) diff --git a/quickshell/Common/Theme.qml b/quickshell/Common/Theme.qml index 1473a03c..e68e8d19 100644 --- a/quickshell/Common/Theme.qml +++ b/quickshell/Common/Theme.qml @@ -687,7 +687,10 @@ Singleton { } } - property alias widgetBaseHoverColor: root.primaryPressed + property color widgetBaseHoverColor: { + const blended = blend(widgetBaseBackgroundColor, primary, 0.1); + return withAlpha(blended, Math.max(0.3, blended.a)); + } property color widgetIconColor: { if (typeof SettingsData === "undefined") { diff --git a/quickshell/Modules/DankBar/Widgets/Media.qml b/quickshell/Modules/DankBar/Widgets/Media.qml index 29681445..3e18e1cb 100644 --- a/quickshell/Modules/DankBar/Widgets/Media.qml +++ b/quickshell/Modules/DankBar/Widgets/Media.qml @@ -317,7 +317,7 @@ BasePill { height: 20 radius: 10 anchors.verticalCenter: parent.verticalCenter - color: prevArea.containsMouse ? Theme.primaryHover : "transparent" + color: prevArea.containsMouse ? Theme.widgetBaseHoverColor : "transparent" visible: root.playerAvailable opacity: (activePlayer && activePlayer.canGoPrevious) ? 1 : 0.3 @@ -374,7 +374,7 @@ BasePill { height: 20 radius: 10 anchors.verticalCenter: parent.verticalCenter - color: nextArea.containsMouse ? Theme.primaryHover : "transparent" + color: nextArea.containsMouse ? Theme.widgetBaseHoverColor : "transparent" visible: playerAvailable opacity: (activePlayer && activePlayer.canGoNext) ? 1 : 0.3 diff --git a/quickshell/Modules/DankBar/Widgets/PrivacyIndicator.qml b/quickshell/Modules/DankBar/Widgets/PrivacyIndicator.qml index fa5dd51a..a76f14b0 100644 --- a/quickshell/Modules/DankBar/Widgets/PrivacyIndicator.qml +++ b/quickshell/Modules/DankBar/Widgets/PrivacyIndicator.qml @@ -86,12 +86,10 @@ Item { return "transparent"; } - if (privacyArea.containsMouse) { - return Theme.primaryPressed; - } - - const baseColor = Theme.widgetBaseBackgroundColor; - const transparency = (root.barConfig && root.barConfig.widgetTransparency !== undefined) ? root.barConfig.widgetTransparency : 1.0; + const rawTransparency = (root.barConfig && root.barConfig.widgetTransparency !== undefined) ? root.barConfig.widgetTransparency : 1.0; + const isHovered = privacyArea.containsMouse; + const transparency = isHovered ? Math.max(0.3, rawTransparency) : rawTransparency; + const baseColor = isHovered ? Theme.widgetBaseHoverColor : Theme.widgetBaseBackgroundColor; return Theme.withAlpha(baseColor, transparency); } } diff --git a/quickshell/Modules/DankBar/Widgets/RunningApps.qml b/quickshell/Modules/DankBar/Widgets/RunningApps.qml index 4b861a78..de8e0fb4 100644 --- a/quickshell/Modules/DankBar/Widgets/RunningApps.qml +++ b/quickshell/Modules/DankBar/Widgets/RunningApps.qml @@ -348,10 +348,9 @@ Item { radius: Theme.cornerRadius color: { if (isFocused) { - return mouseArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.3) : Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.2); - } else { - return mouseArea.containsMouse ? Qt.rgba(Theme.primaryHover.r, Theme.primaryHover.g, Theme.primaryHover.b, 0.1) : "transparent"; + return mouseArea.containsMouse ? Theme.primarySelected : Theme.withAlpha(Theme.primary, 0.2); } + return mouseArea.containsMouse ? Theme.widgetBaseHoverColor : "transparent"; } // App icon @@ -598,10 +597,9 @@ Item { radius: Theme.cornerRadius color: { if (isFocused) { - return mouseArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.3) : Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.2); - } else { - return mouseArea.containsMouse ? Qt.rgba(Theme.primaryHover.r, Theme.primaryHover.g, Theme.primaryHover.b, 0.1) : "transparent"; + return mouseArea.containsMouse ? Theme.primarySelected : Theme.withAlpha(Theme.primary, 0.2); } + return mouseArea.containsMouse ? Theme.widgetBaseHoverColor : "transparent"; } IconImage { @@ -912,7 +910,7 @@ Item { Rectangle { anchors.fill: parent radius: parent.radius - color: closeMouseArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.08) : "transparent" + color: closeMouseArea.containsMouse ? Theme.widgetBaseHoverColor : "transparent" } StyledText { diff --git a/quickshell/Modules/DankBar/Widgets/SystemTrayBar.qml b/quickshell/Modules/DankBar/Widgets/SystemTrayBar.qml index f35eb7dc..145ab9b5 100644 --- a/quickshell/Modules/DankBar/Widgets/SystemTrayBar.qml +++ b/quickshell/Modules/DankBar/Widgets/SystemTrayBar.qml @@ -193,7 +193,7 @@ Item { height: 24 anchors.centerIn: parent radius: Theme.cornerRadius - color: trayItemArea.containsMouse ? Theme.primaryHover : "transparent" + color: trayItemArea.containsMouse ? Theme.widgetBaseHoverColor : "transparent" IconImage { id: iconImg @@ -257,7 +257,7 @@ Item { height: 24 anchors.centerIn: parent radius: Theme.cornerRadius - color: caretArea.containsMouse ? Theme.primaryHover : "transparent" + color: caretArea.containsMouse ? Theme.widgetBaseHoverColor : "transparent" DankIcon { anchors.centerIn: parent @@ -326,7 +326,7 @@ Item { height: 24 anchors.centerIn: parent radius: Theme.cornerRadius - color: trayItemArea.containsMouse ? Theme.primaryHover : "transparent" + color: trayItemArea.containsMouse ? Theme.widgetBaseHoverColor : "transparent" IconImage { id: iconImg @@ -390,7 +390,7 @@ Item { height: 24 anchors.centerIn: parent radius: Theme.cornerRadius - color: caretAreaVert.containsMouse ? Theme.primaryHover : "transparent" + color: caretAreaVert.containsMouse ? Theme.widgetBaseHoverColor : "transparent" DankIcon { anchors.centerIn: parent @@ -749,7 +749,7 @@ Item { width: 28 height: 28 radius: Theme.cornerRadius - color: itemArea.containsMouse ? Theme.primaryHover : Theme.withAlpha(Theme.surfaceContainer, 0) + color: itemArea.containsMouse ? Theme.widgetBaseHoverColor : Theme.withAlpha(Theme.surfaceContainer, 0) IconImage { id: menuIconImg @@ -1209,7 +1209,7 @@ Item { width: parent.width height: 28 radius: 0 - color: visibilityToggleArea.containsMouse ? Theme.primaryHover : Theme.withAlpha(Theme.surfaceContainer, 0) + color: visibilityToggleArea.containsMouse ? Theme.widgetBaseHoverColor : Theme.withAlpha(Theme.surfaceContainer, 0) StyledText { anchors.left: parent.left @@ -1262,7 +1262,7 @@ Item { width: parent.width height: 28 radius: 0 - color: backArea.containsMouse ? Theme.primaryHover : Theme.withAlpha(Theme.surfaceContainer, 0) + color: backArea.containsMouse ? Theme.widgetBaseHoverColor : Theme.withAlpha(Theme.surfaceContainer, 0) Row { anchors.left: parent.left @@ -1314,7 +1314,7 @@ Item { if (menuEntry?.isSeparator) { return Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2); } - return itemArea.containsMouse ? Theme.primaryHover : Theme.withAlpha(Theme.surfaceContainer, 0); + return itemArea.containsMouse ? Theme.widgetBaseHoverColor : Theme.withAlpha(Theme.surfaceContainer, 0); } MouseArea { diff --git a/quickshell/Modules/Plugins/BasePill.qml b/quickshell/Modules/Plugins/BasePill.qml index 9f5d105e..bb3d6c0d 100644 --- a/quickshell/Modules/Plugins/BasePill.qml +++ b/quickshell/Modules/Plugins/BasePill.qml @@ -92,13 +92,11 @@ Item { return "transparent"; } + const rawTransparency = (root.barConfig && root.barConfig.widgetTransparency !== undefined) ? root.barConfig.widgetTransparency : 1.0; const isHovered = mouseArea.containsMouse || (root.isHovered || false); - if (isHovered) { - return Theme.primaryPressed; - } + const transparency = isHovered ? Math.max(0.3, rawTransparency) : rawTransparency; + const baseColor = isHovered ? Theme.widgetBaseHoverColor : Theme.widgetBaseBackgroundColor; - const baseColor = Theme.widgetBaseBackgroundColor; - const transparency = (root.barConfig && root.barConfig.widgetTransparency !== undefined) ? root.barConfig.widgetTransparency : 1.0; if (Theme.widgetBackgroundHasAlpha) { return Qt.rgba(baseColor.r, baseColor.g, baseColor.b, baseColor.a * transparency); }