Convert the bar from a vertical left-edge strip to a horizontal top bar. The shell had no orientation abstraction, so this flips the geometry across the bar and the drawer/region/interaction layer: - Bar.qml: ColumnLayout -> RowLayout; hit-testing (checkPopout/handleWheel), scroll halves and popout-center anchoring all keyed off x instead of y; first/last padding -> left/right margins. - BarWrapper.qml: the bar's "thickness" is now its height (clampedHeight/ contentHeight/implicitHeight); content anchors left/right/top. - drawers: Exclusions (exclusive zone moved left->top), Panels (content inset topMargin = bar height), Regions + ContentWindow (panel->window coordinate mapping and the thick border flip left->top), Interactions (bar-region check y<barHeight, panel Y-origin uses bar height, scroll passes x, bar drag-reveal is vertical). - widgets: Clock (Row, HH:MM with a colon), StatusIcons (Row), Workspaces + Workspace (Row), Tray (Row, expand chevron at the right) — each sizes to the bar height instead of width. Verified live in the dev VM: top bar renders with centered-clock entries, the exclusion zone keeps windows below the bar, and the dashboard drops down correctly. Popout fly-outs still anchor sideways (Phase B). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
40 lines
768 B
QML
40 lines
768 B
QML
pragma ComponentBehavior: Bound
|
|
|
|
import QtQuick
|
|
import Quickshell
|
|
import Caelestia.Config
|
|
import qs.components.containers
|
|
import qs.modules.bar as Bar
|
|
|
|
Scope {
|
|
id: root
|
|
|
|
required property ShellScreen screen
|
|
required property Bar.BarWrapper bar
|
|
|
|
ExclusionZone {
|
|
anchors.left: true
|
|
}
|
|
|
|
ExclusionZone {
|
|
anchors.top: true
|
|
exclusiveZone: root.bar.exclusiveZone
|
|
}
|
|
|
|
ExclusionZone {
|
|
anchors.right: true
|
|
}
|
|
|
|
ExclusionZone {
|
|
anchors.bottom: true
|
|
}
|
|
|
|
component ExclusionZone: StyledWindow {
|
|
screen: root.screen
|
|
name: "border-exclusion"
|
|
exclusiveZone: contentItem.Config.border.thickness
|
|
mask: Region {}
|
|
implicitWidth: 1
|
|
implicitHeight: 1
|
|
}
|
|
}
|