Revert "quickshell: bar surface is the bar column, frame moves to its own background layer"
This reverts commit 89eaeca2f9.
This commit is contained in:
parent
89eaeca2f9
commit
9a873dacae
1 changed files with 13 additions and 80 deletions
|
|
@ -1474,31 +1474,22 @@ in
|
|||
// the grab — it self-clears and instantly closes the panel.
|
||||
WlrLayershell.keyboardFocus: (launcherPanel.open || bar.activeDropdown !== null) && !bar.screenshotPinned ? WlrKeyboardFocus.OnDemand : WlrKeyboardFocus.None
|
||||
|
||||
// Vertical bar on the left edge.
|
||||
// Vertical bar on the left edge. The surface still covers the
|
||||
// whole screen (the frame band and every panel are drawn into
|
||||
// it); only the reserved strip is the bar itself.
|
||||
anchors {
|
||||
top: true
|
||||
left: true
|
||||
bottom: true
|
||||
}
|
||||
|
||||
// True while something is drawn outside the bar column and the
|
||||
// surface therefore has to span the screen.
|
||||
readonly property bool surfaceWide: bar.activeDropdown !== null
|
||||
|| launcherPanel.visible || toastItem.visible
|
||||
|
||||
// THE performance knob for this whole shell. Hyprland blurs
|
||||
// this namespace, and blur behind a surface is recomputed
|
||||
// whenever what is BEHIND it changes — which, with a game
|
||||
// running underneath, is every pixel of the screen every
|
||||
// frame. At 3440x1440 that measured ~a third of the card and
|
||||
// halved framerates; at 46px it is free. So the surface is the
|
||||
// bar column at rest and only grows while a panel, the toast
|
||||
// or the launcher is actually on screen, where a momentary
|
||||
// cost doesn't matter.
|
||||
//
|
||||
// exclusiveZone stays fixed at barWidth, so windows never
|
||||
// reflow when this resizes.
|
||||
implicitWidth: bar.surfaceWide ? bar.screen.width : Theme.barWidth
|
||||
// DIAGNOSTIC — normally bar.screen.width, because the frame
|
||||
// band and every panel are drawn into this one surface.
|
||||
// Shrinking it to the bar column clips all of that, which
|
||||
// looks broken on purpose: the point is to measure whether
|
||||
// blur and the SDF shader are expensive because of this
|
||||
// surface's AREA. Revert this line to restore the shell.
|
||||
implicitWidth: Theme.barWidth
|
||||
exclusiveZone: Theme.barWidth
|
||||
color: "transparent"
|
||||
|
||||
|
|
@ -1986,9 +1977,9 @@ in
|
|||
// buries a full corner radius inside the bar column.
|
||||
readonly property real surfLeftX: Theme.barWidth - meltInto / 2
|
||||
property vector4d cutout: Qt.vector4d(
|
||||
(Theme.barWidth + bar.screen.width - Theme.frameWidth) / 2,
|
||||
(Theme.barWidth + bar.width - Theme.frameWidth) / 2,
|
||||
bar.height / 2,
|
||||
(bar.screen.width - Theme.frameWidth - Theme.barWidth) / 2,
|
||||
(bar.width - Theme.frameWidth - Theme.barWidth) / 2,
|
||||
bar.height / 2 - Theme.frameWidth)
|
||||
property vector4d panel: chrome.visible
|
||||
? Qt.vector4d(surfLeftX + chrome.width / 2, (panelTop + panelBottom) / 2,
|
||||
|
|
@ -2053,7 +2044,7 @@ in
|
|||
NumberAnimation { duration: Theme.animMorph; easing.type: Easing.OutExpo }
|
||||
}
|
||||
|
||||
x: Math.round((bar.screen.width - openW) / 2)
|
||||
x: Math.round((bar.width - openW) / 2)
|
||||
y: bar.height - Theme.frameWidth - openH
|
||||
width: openW
|
||||
height: openH
|
||||
|
|
@ -6811,64 +6802,6 @@ in
|
|||
}
|
||||
}
|
||||
|
||||
// ── Screen frame band, on its OWN background-layer surface.
|
||||
//
|
||||
// This used to be drawn into the bar's surface, and it is the
|
||||
// reason that surface had to be screen-sized — which is what
|
||||
// made blur behind it cost a third of the GPU. The frame is
|
||||
// static decoration that never takes input, so it belongs
|
||||
// below windows: no blur rule matches this namespace, nothing
|
||||
// ever repaints it, and gaps_out keeps it visible.
|
||||
//
|
||||
// Hidden (the shader, not the window — mapping and unmapping a
|
||||
// layer surface on every panel open would flicker) while the
|
||||
// bar's own surface is wide, because chromeSdf then draws the
|
||||
// frame itself and melts panels into it. Two translucent
|
||||
// copies of the same band would read as a darker strip.
|
||||
PanelWindow {
|
||||
id: frameWin
|
||||
screen: bar.screen
|
||||
WlrLayershell.namespace: "quickshell-frame"
|
||||
WlrLayershell.layer: WlrLayer.Background
|
||||
WlrLayershell.keyboardFocus: WlrKeyboardFocus.None
|
||||
exclusionMode: ExclusionMode.Ignore
|
||||
anchors { top: true; left: true; right: true; bottom: true }
|
||||
color: "transparent"
|
||||
mask: Region {} // decoration only, never takes a click
|
||||
|
||||
ShaderEffect {
|
||||
// Offset past the bar column so this and the bar never
|
||||
// composite on top of each other.
|
||||
x: Theme.barWidth
|
||||
width: frameWin.width - Theme.barWidth
|
||||
height: frameWin.height
|
||||
visible: !bar.surfaceWide
|
||||
|
||||
// Push the cutout's left edge well off-item so only
|
||||
// straight edges reach the bar column — a rounded
|
||||
// corner landing here would leave a nub beside the bar.
|
||||
readonly property real cutLeft: -2 * Theme.radius
|
||||
readonly property real cutRight: width - Theme.frameWidth
|
||||
property vector4d cutout: Qt.vector4d(
|
||||
(cutLeft + cutRight) / 2,
|
||||
height / 2,
|
||||
(cutRight - cutLeft) / 2,
|
||||
height / 2 - Theme.frameWidth)
|
||||
// No panels down here — the bar's surface owns those.
|
||||
property vector4d panel: Qt.vector4d(0, 0, 0, 0)
|
||||
property vector4d toast: Qt.vector4d(0, 0, 0, 0)
|
||||
property vector4d launcher: 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: Theme.radius
|
||||
property real panelR: Theme.radius
|
||||
property real meltK: Theme.radius / 2
|
||||
property real borderW: Theme.borderWidth
|
||||
fragmentShader: "file://${chromeShader}"
|
||||
}
|
||||
}
|
||||
|
||||
// ── OSD: volume / brightness level, shown inline in the bar's
|
||||
// empty middle — the gap between the two clusters exists for
|
||||
// this. Volume is reactive: Pipewire reports changes from any
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue