The square markers, block meters and hard-cornered fills read as boxy next to the porthole. The desktop is now soft throughout: the porthole is the shape everything is built around and every smaller surface echoes it. - Theme gains radiusS / radiusM / radiusL. radiusL is frameRadius - padS, so anything inset padS inside one of the frame's curves is concentric with it. - P5Panel and Skew draw rounded rectangles (Geom.roundedRect) whenever they neither lean nor are chopped, which is always now; the polygon path is kept for shapes brought back on purpose. - Markers are dots; workspace pips, toggles, transport and media chips, notification actions and today's date are pills or discs; the slider handle is round. Meters are one continuous rounded line that glides to its level instead of a row of segments. - Album art is rounded with ClippingRectangle in the bar, the media popout and the dashboard. - Free-standing panels (launcher, ask) drop the corner brackets and take the frame radius. - Fix: a hovered notification's wash was a full-bleed square, so in the drawer's bottom corner it ran past the drawer's curve. It is inset by padS/2 and rounded by radiusL, which keeps it inside the curve. Hyprland: the discord special workspace and its window rule are gone, SUPER+S stays the only scratchpad, and SUPER+D now opens the dashboard (it was on SUPER+I). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
69 lines
1.7 KiB
QML
69 lines
1.7 KiB
QML
import QtQuick
|
|
import "root:/config"
|
|
import "root:/components"
|
|
|
|
// Title bar for a popout, in the NieR header pattern: glyph, tracked heading,
|
|
// right-aligned status text, and a hairline rule that ends in a dot.
|
|
Item {
|
|
id: root
|
|
|
|
property string title: ""
|
|
property string subtitle: ""
|
|
property string icon: ""
|
|
property color accent: Theme.primary
|
|
|
|
implicitHeight: 34
|
|
|
|
Row {
|
|
anchors.left: parent.left
|
|
anchors.top: parent.top
|
|
spacing: Theme.padM
|
|
|
|
Icon {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
visible: root.icon !== ""
|
|
text: root.icon
|
|
color: root.accent
|
|
font.pixelSize: Theme.fsTitle
|
|
}
|
|
|
|
SplitText {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: root.title.toUpperCase()
|
|
pixelSize: Theme.fsLarge
|
|
}
|
|
}
|
|
|
|
Text {
|
|
anchors.right: parent.right
|
|
anchors.top: parent.top
|
|
anchors.topMargin: 6
|
|
visible: root.subtitle !== ""
|
|
text: root.subtitle
|
|
color: Theme.subtext
|
|
font.family: Theme.fontMono
|
|
font.pixelSize: Theme.fsMicro
|
|
font.letterSpacing: 1
|
|
renderType: Text.NativeRendering
|
|
}
|
|
|
|
Rectangle {
|
|
anchors.bottom: parent.bottom
|
|
anchors.bottomMargin: (Theme.marker - 1) / 2
|
|
anchors.left: parent.left
|
|
anchors.right: endMark.left
|
|
height: 1
|
|
color: Theme.alpha(root.accent, 0.6)
|
|
}
|
|
|
|
Rectangle {
|
|
id: endMark
|
|
anchors.bottom: parent.bottom
|
|
anchors.right: parent.right
|
|
width: Theme.marker
|
|
height: Theme.marker
|
|
radius: width / 2
|
|
color: Theme.accent
|
|
}
|
|
}
|