A chamfer with no neighbour behind it now carries the corner it removed, put back OUTSIDE the panel as a detached accent triangle. capGap is the perpendicular distance from the cut, hence the per-axis shift of capGap over root 2: the cap moves along the cut's normal, not along an axis. The trace joining two caps belongs to the RAIL, not the panel — the run it draws is the gap BETWEEN two panels, which no panel can see. HyprChromeBar filters the row down to panels (a slack Item has no `rightChamfer`, so spacers drop out, and dropping them is exactly what makes a trace span them), then joins each right cap to the next left cap: straight, one 45° step at the midpoint of the gap, straight. It meets the middle of each cap's outward face rather than its tip. TestPanel is a staging slot between two spacers. It counts seconds since load, which is the cheapest proof the panel is live, and standing alone it exercises a cap and a trace at both ends — something a rail of butted panels never does. Restructures the module in the same commit, since the moves and the edits above land in the same files: folders are PascalCase, the bar and its widgets moved under Widgets/Bar, and DebugWindow takes the HyprChrome Theme instead of the legacy one. The two singletons are identical today, so that is not a visual fix — it is a palette edit reaching the debug stage in future. Rename detection needs -M40% to follow HyprChromeBar, which grew past the default similarity threshold. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U19X5LGTxtq4pb4jdNVivv
76 lines
2.4 KiB
QML
76 lines
2.4 KiB
QML
//@ pragma UseQApplication
|
||
|
||
import QtQuick
|
||
import Quickshell
|
||
import Quickshell.Widgets
|
||
import qs.widgets.bar
|
||
import qs.widgets.launcher
|
||
import qs.widgets.notifications
|
||
import qs.widgets.osd
|
||
import qs.widgets.systray
|
||
import qs.widgets.theme
|
||
import qs.widgets.vitals
|
||
import qs.HyprChrome
|
||
import qs.HyprChrome.Widgets
|
||
import qs.HyprChrome.Widgets.Bar.Debug
|
||
import qs.HyprChrome.Widgets.Bar.Host
|
||
import qs.HyprChrome.Widgets.Bar.Vitals
|
||
|
||
Scope {
|
||
// Dense multi-monitor status rail; visual core is headlessly renderable.
|
||
HyprChromeShell {}
|
||
|
||
// App launcher variants — 1–11; variant 8 remains the primary HUD.
|
||
LauncherStack {} // 1 — left vertical list
|
||
LauncherGrid {} // 2 — centered icon grid
|
||
LauncherSpotlight {} // 3 — top-center command bar
|
||
LauncherConsole {} // 4 — full-width deck unfolding from the top bar
|
||
LauncherDock {} // 5 — deck rising from the bottom bar
|
||
LauncherSlant {} // 6 — angular / sheared panel
|
||
LauncherCorner {} // 7 — Slant (V6) copy + floating power panel (shutdown/reboot)
|
||
ApplicationLauncher {} // 8 — dense HUD command index (primary)
|
||
BladeLauncher {} // 9 — asymmetric blade matrix
|
||
OrbitLauncher {} // 10 — radial targeting arena
|
||
CyberDock {} // 11 — cyberpunk bottom cartridge dock
|
||
|
||
Notifications {}
|
||
VolumeOsd {}
|
||
|
||
// Host vitals HUD — toggle with SUPER CTRL V.
|
||
Vitals {}
|
||
|
||
// Widget staging area, centered on the secondary monitor (HDMI-A-1),
|
||
// toggled with SUPER CTRL D. Swap the children below for whatever widget
|
||
// is being worked on; they must carry their own size (see DebugWindow).
|
||
// DebugWindow {
|
||
// id: debugStage
|
||
|
||
// // VitalsPanel has no implicit width — the slot measures its children, so
|
||
// // each staged panel states its own. Height follows the mode it is in.
|
||
// // Click a panel to collapse or expand it.
|
||
// Column {
|
||
// spacing: 12
|
||
// padding: 12
|
||
|
||
// HostPanel {
|
||
// width: 560
|
||
// }
|
||
|
||
// HostPanel {
|
||
// width: 560
|
||
// expanded: false
|
||
// }
|
||
|
||
// VitalsPanel {
|
||
// width: 560
|
||
// }
|
||
|
||
// VitalsPanel {
|
||
// width: 560
|
||
// expanded: false
|
||
// }
|
||
|
||
// }
|
||
// }
|
||
}
|