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:
parent
a4a34e7248
commit
d2bcdad2fe
1 changed files with 42 additions and 43 deletions
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue