mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-02 04:37:49 +02:00
Themes now drive typography the same way they drive colors: one [font] base-size in shell.toml is the rem root, and every Style.font.<token> (caption, bodySmall, body, subtitle, title, heading, display, displayLarge, iconSmall, icon, iconLarge) derives from it via a fixed multiplier. Themes can also pin individual tokens for stylistic emphasis. base-size is clamped 11..13 until row-height tokens exist. Bar dimensions move to the same singleton: [bar] size-horizontal / size-vertical replace the hardcoded 26/28 in Bar.qml, exposed as Style.bar.sizeHorizontal / sizeVertical. Style.qml also resolves the fontconfig 'monospace' alias via fc-match and exposes Style.font.resolvedFamily so panels can display the concrete family. Watches ~/.config/fontconfig/fonts.conf so it tracks 'omarchy font set <name>'. The qs.Ui kit (PillButton, Dropdown, Toggle, TextField, etc.) and every first-party plugin (bar widgets, settings, menu, clipboard, emoji, polkit, notifications, osd, image-picker, dev-gallery) now bind to Style.font.* instead of pixel literals. Only three deliberate display-scale outliers remain: the notification empty-state glyph and the weather flyout's hero temperature pair, all commented. Background plugin's applyTheme IPC fast-path also pushes shell.toml to Style so theme swaps update typography and bar size without waiting for inotify debounce. Dev gallery (omarchy dev ui-preview) now ships a Typography section that renders the full scale and theme tokens live, and its summon command is fixed (omarchy-shell-ipc -> omarchy-shell).
72 lines
2.0 KiB
QML
72 lines
2.0 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Wayland
|
|
import qs.Commons
|
|
|
|
Item {
|
|
id: root
|
|
|
|
property QtObject bar: null
|
|
property string moduleName: "activeWindow"
|
|
property var settings: ({})
|
|
|
|
function setting(name, fallback) {
|
|
var value = settings ? settings[name] : undefined
|
|
return value === undefined || value === null ? fallback : value
|
|
}
|
|
|
|
readonly property var toplevel: ToplevelManager.activeToplevel
|
|
readonly property string title: toplevel ? (toplevel.title || toplevel.appId || "") : ""
|
|
readonly property int maxLabelWidth: Number(setting("maxWidth", 280))
|
|
|
|
readonly property bool vertical: bar ? bar.vertical : false
|
|
|
|
visible: title !== "" && !vertical
|
|
implicitWidth: visible ? Math.min(maxLabelWidth, labelText.implicitWidth) + 16 : 0
|
|
implicitHeight: bar ? bar.barSize : 26
|
|
|
|
Behavior on implicitWidth {
|
|
NumberAnimation { duration: 180; easing.type: Easing.OutCubic }
|
|
}
|
|
|
|
Item {
|
|
anchors.fill: parent
|
|
anchors.leftMargin: 8
|
|
anchors.rightMargin: 8
|
|
clip: true
|
|
|
|
Text {
|
|
id: labelText
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.left: parent.left
|
|
width: parent.width
|
|
text: root.title
|
|
color: root.bar ? root.bar.foreground : "#cacccc"
|
|
font.family: root.bar ? root.bar.fontFamily : "JetBrainsMono Nerd Font"
|
|
font.pixelSize: Style.font.body
|
|
elide: Text.ElideRight
|
|
opacity: 0.85
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
|
|
cursorShape: Qt.PointingHandCursor
|
|
|
|
onClicked: function(mouse) {
|
|
if (!root.toplevel) return
|
|
if (mouse.button === Qt.MiddleButton) {
|
|
root.toplevel.close()
|
|
} else if (mouse.button === Qt.RightButton) {
|
|
root.toplevel.close()
|
|
} else {
|
|
root.toplevel.activate()
|
|
}
|
|
}
|
|
onEntered: if (root.bar) root.bar.showTooltip(root, root.title)
|
|
onExited: if (root.bar) root.bar.hideTooltip(root)
|
|
}
|
|
}
|