diff --git a/settings/quickshell.nix b/settings/quickshell.nix index c6bbd00..e1b80e9 100644 --- a/settings/quickshell.nix +++ b/settings/quickshell.nix @@ -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() {