quickshell: session menu was painted UNDER the chrome shader — move above it, calendar palette

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
rope 2026-06-12 19:31:56 +01:00
parent a4a34e7248
commit d2bcdad2fe

View file

@ -531,6 +531,44 @@ in
sessionMenu.toggle();
}
// Shell chrome: bar, frame, panel and toast rendered as
// ONE signed-distance field (caelestia-style). Surfaces merge
// via circular smooth-min, and the 2px border is the distance
// band just inside the boundary borders flow through every
// junction fillet by construction, so all of the previous
// ears / border-gaps / melt geometry lives in the math now.
ShaderEffect {
anchors.fill: parent
readonly property real panelLeft: chrome.x + 8
readonly property real panelRight: chrome.x + chrome.width + (chrome.flushRight ? 4 : -8)
property vector4d cutout: Qt.vector4d(
bar.width / 2,
(30 + bar.height - Theme.frameWidth) / 2,
bar.width / 2 - Theme.frameWidth,
(bar.height - Theme.frameWidth - 30) / 2)
property vector4d panel: chrome.visible
? Qt.vector4d((panelLeft + panelRight) / 2, 26 + chrome.height / 2,
(panelRight - panelLeft) / 2, 4 + chrome.height / 2)
: Qt.vector4d(0, 0, 0, 0)
property vector4d toast: toastItem.visible && _toastRect.height > 0.5
? Qt.vector4d(toastItem.x + 8 + _toastRect.width / 2, 26 + _toastRect.height / 2,
_toastRect.width / 2, 4 + _toastRect.height / 2)
: Qt.vector4d(0, 0, 0, 0)
readonly property real sessRight: bar.width - Theme.frameWidth + 4
property vector4d session: sessionMenu.visible
? Qt.vector4d((sessionMenu.x + sessRight) / 2, sessionMenu.y + sessionMenu.height / 2,
(sessRight - sessionMenu.x) / 2, sessionMenu.height / 2)
: Qt.vector4d(0, 0, 0, 0)
property vector4d fillColor: Qt.vector4d(Theme.barBg.r, Theme.barBg.g, Theme.barBg.b, Theme.barBg.a)
property vector4d borderColor: Qt.vector4d(Theme.base03.r, Theme.base03.g, Theme.base03.b, 1)
property vector2d res: Qt.vector2d(width, height)
property real cutoutR: 8
property real panelR: 8
property real meltK: 12
property real borderW: Theme.borderWidth
fragmentShader: "file://${chromeShader}"
}
// Session menu: icon-only power controls morphing out of
// the right frame column at screen centre (Super+L). Keyboard:
// arrows/Tab move the selection, Enter activates, Esc closes.
@ -640,11 +678,10 @@ in
Text {
anchors.centerIn: parent
text: sessBtn.modelData.icon
// Accent for the active icon (like the workspace
// pill), base05 idle, base08 for armed danger
color: sessBtn.selected
? (sessBtn.modelData.danger ? Theme.base08 : Theme.base0D)
: Theme.base05
// Calendar palette: base05 icons; red only when
// a destructive action is the armed selection
color: sessBtn.selected && sessBtn.modelData.danger
? Theme.base08 : Theme.base05
Behavior on color { ColorAnimation { duration: 120 } }
font.family: Theme.iconFont
font.pixelSize: 20
@ -666,44 +703,6 @@ in
}
}
// Shell chrome: bar, frame, panel and toast rendered as
// ONE signed-distance field (caelestia-style). Surfaces merge
// via circular smooth-min, and the 2px border is the distance
// band just inside the boundary borders flow through every
// junction fillet by construction, so all of the previous
// ears / border-gaps / melt geometry lives in the math now.
ShaderEffect {
anchors.fill: parent
readonly property real panelLeft: chrome.x + 8
readonly property real panelRight: chrome.x + chrome.width + (chrome.flushRight ? 4 : -8)
property vector4d cutout: Qt.vector4d(
bar.width / 2,
(30 + bar.height - Theme.frameWidth) / 2,
bar.width / 2 - Theme.frameWidth,
(bar.height - Theme.frameWidth - 30) / 2)
property vector4d panel: chrome.visible
? Qt.vector4d((panelLeft + panelRight) / 2, 26 + chrome.height / 2,
(panelRight - panelLeft) / 2, 4 + chrome.height / 2)
: Qt.vector4d(0, 0, 0, 0)
property vector4d toast: toastItem.visible && _toastRect.height > 0.5
? Qt.vector4d(toastItem.x + 8 + _toastRect.width / 2, 26 + _toastRect.height / 2,
_toastRect.width / 2, 4 + _toastRect.height / 2)
: Qt.vector4d(0, 0, 0, 0)
readonly property real sessRight: bar.width - Theme.frameWidth + 4
property vector4d session: sessionMenu.visible
? Qt.vector4d((sessionMenu.x + sessRight) / 2, sessionMenu.y + sessionMenu.height / 2,
(sessRight - sessionMenu.x) / 2, sessionMenu.height / 2)
: Qt.vector4d(0, 0, 0, 0)
property vector4d fillColor: Qt.vector4d(Theme.barBg.r, Theme.barBg.g, Theme.barBg.b, Theme.barBg.a)
property vector4d borderColor: Qt.vector4d(Theme.base03.r, Theme.base03.g, Theme.base03.b, 1)
property vector2d res: Qt.vector2d(width, height)
property real cutoutR: 8
property real panelR: 8
property real meltK: 12
property real borderW: Theme.borderWidth
fragmentShader: "file://${chromeShader}"
}
property var activeDropdown: null
function closeAllDropdowns() {