feat(quickshell): dim the desktop behind the expanded hyprchrome bar
A full-screen scrim carrying the dense bar's drafting grid, shown while the rail is expanded and faded out with it. It sits on the TOP layer while the bar moves to OVERLAY. Both on one layer would stack by surface creation order, which is not something to rely on; a layer apart makes "above windows, below the bar" a guarantee. The mask is an empty Region, so the scrim takes no clicks and reserves nothing. The grid is the dense bar's, at twice the spacing and with registration crosses on every other intersection. Its 0.018 opacity was tuned against a near-black panel and is invisible over a scrim on lit windows, so grid and crosses are both properties rather than constants, and the lines take a desaturated accent derived from the palette instead of plain text colour. Cross geometry rounds with Math.floor on both the mark's offset and the bars inside it. anchors.*Center halves the box unfloored, which put an even-sized mark half a pixel off the 1px rule it registers against. crossThickness is in steps for the same reason: 1 -> 1px, 2 -> 3px, 3 -> 5px, since only an odd width straddles a rule symmetrically. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HEtXvseVb5gwAtKNhFx2PU
This commit is contained in:
@@ -3,6 +3,7 @@ import QtQuick.Shapes
|
||||
import QtQuick.Layouts
|
||||
import Quickshell
|
||||
import Quickshell.Hyprland
|
||||
import Quickshell.Wayland
|
||||
import qs.hyprchrome.widgets
|
||||
import qs.hyprchrome.widgets.host
|
||||
import qs.hyprchrome.widgets.vitals
|
||||
@@ -45,12 +46,24 @@ Scope {
|
||||
onPressed: root.toggle()
|
||||
}
|
||||
|
||||
// Scrim first: it is a layer below the bar, so stacking does not depend on
|
||||
// creation order, but keeping the declaration order the same as the visual
|
||||
// order costs nothing.
|
||||
ChromeBackdrop {
|
||||
screen: root.targetScreen
|
||||
active: root.expanded
|
||||
}
|
||||
|
||||
PanelWindow {
|
||||
id: window
|
||||
|
||||
screen: root.targetScreen
|
||||
visible: root.targetScreen !== null
|
||||
|
||||
// One layer above the scrim, so the stacking is guaranteed rather than
|
||||
// dependent on surface creation order. See ChromeBackdrop.
|
||||
WlrLayershell.layer: WlrLayer.Overlay
|
||||
|
||||
property int margin: 12
|
||||
|
||||
// Where the panels will SETTLE, not where they are mid-transition. Binding
|
||||
|
||||
Reference in New Issue
Block a user