From 2d95d3370f0698ad98eee235110edb3d0e990e0c Mon Sep 17 00:00:00 2001 From: felixzsh Date: Thu, 5 Nov 2026 12:29:07 -0600 Subject: [PATCH] feat(ui): follow Hyprland decoration:rounding like native Omarchy HUD Style.cornerRadius already mirrors Hyprland's `decoration:rounding` (Omarchy Style.qml sets it from the compositor, default 0), so the Math.max floors forced rounded corners even when rounding is off and the launcher didn't match the rest of the desktop. Use Style.cornerRadius directly on the card, rows, action panel, alerts and info panel, and cap the small badges/keycaps with Math.min like Menu.qml. Rebased onto current main, which moved ui/ out of plugin/. --- ui/ActionPanel.qml | 6 ++++-- ui/Alert.qml | 4 ++-- ui/InfoPanel.qml | 2 +- ui/KeyHint.qml | 3 ++- ui/LauncherWindow.qml | 8 +++++--- ui/ResultRow.qml | 7 ++++--- 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/ui/ActionPanel.qml b/ui/ActionPanel.qml index 880161f..40df3c2 100644 --- a/ui/ActionPanel.qml +++ b/ui/ActionPanel.qml @@ -37,7 +37,9 @@ Rectangle { width: px(340) height: Math.min(px(360), list.contentHeight + searchRow.height + px(16)) - radius: Math.max(Style.cornerRadius, px(8)) + // Follow Hyprland like the native HUD: Style.cornerRadius already mirrors + // `decoration:rounding`, so rounding 0 renders square. + radius: Style.cornerRadius color: look.background border.width: 1 border.color: Util.alpha(look.foreground, 0.15) @@ -77,7 +79,7 @@ Rectangle { anchors.right: parent.right anchors.bottom: parent.bottom height: panel.px(34) - radius: Math.max(Style.cornerRadius, panel.px(6)) + radius: Style.cornerRadius color: index === panel.selectedIndex ? panel.look.selectedBackground : "transparent" Text { diff --git a/ui/Alert.qml b/ui/Alert.qml index e545258..94ad4af 100644 --- a/ui/Alert.qml +++ b/ui/Alert.qml @@ -26,7 +26,7 @@ Rectangle { anchors.centerIn: parent width: alert.px(320) height: column.implicitHeight + alert.px(36) - radius: Math.max(Style.cornerRadius, alert.px(10)) + radius: Style.cornerRadius color: alert.look.background border.width: 1 border.color: Util.alpha(alert.look.foreground, 0.18) @@ -83,7 +83,7 @@ Rectangle { readonly property bool danger: modelData.primary && alert.spec && alert.spec.destructive width: (column.width - alert.px(10)) / 2 height: alert.px(34) - radius: Math.max(Style.cornerRadius, alert.px(6)) + radius: Style.cornerRadius color: danger ? Util.alpha(alert.danger, 0.85) : modelData.primary ? alert.look.selectedBackground : Util.alpha(alert.look.foreground, 0.08) diff --git a/ui/InfoPanel.qml b/ui/InfoPanel.qml index b8daf06..9d0040b 100644 --- a/ui/InfoPanel.qml +++ b/ui/InfoPanel.qml @@ -15,7 +15,7 @@ Rectangle { width: px(400) height: content.implicitHeight + px(24) - radius: Math.max(Style.cornerRadius, px(8)) + radius: Style.cornerRadius color: look.background border.width: 1 border.color: Util.alpha(look.foreground, 0.15) diff --git a/ui/KeyHint.qml b/ui/KeyHint.qml index 0dca37f..b31d66d 100644 --- a/ui/KeyHint.qml +++ b/ui/KeyHint.qml @@ -19,7 +19,8 @@ Row { required property string modelData height: label.implicitHeight + Math.round(Style.space(4) * hint.zoom) width: Math.max(height, label.implicitWidth + Math.round(Style.space(10) * hint.zoom)) - radius: Math.round(Style.space(4) * hint.zoom) + // Keycap: follow Hyprland down to square, capped like Menu.qml. + radius: Math.min(Style.cornerRadius, Math.round(Style.space(4) * hint.zoom)) color: Util.alpha(hint.color, 0.1) Text { diff --git a/ui/LauncherWindow.qml b/ui/LauncherWindow.qml index 618a8ad..980c67d 100644 --- a/ui/LauncherWindow.qml +++ b/ui/LauncherWindow.qml @@ -664,7 +664,9 @@ PanelWindow { id: card width: window.cardWidth height: window.compact ? window.headerHeight + card.borderTop + card.borderBottom : window.fullHeight - radius: Math.max(Style.cornerRadius, window.px(8)) + // Follow Hyprland like the native HUD: Style.cornerRadius already mirrors + // `decoration:rounding`, so rounding 0 renders square. + radius: Style.cornerRadius anchors.horizontalCenter: parent.horizontalCenter y: Math.max(Style.gapsOut, Math.min(Math.round(window.height / 4), window.height - window.fullHeight - Style.gapsOut)) color: window.look.background @@ -771,7 +773,7 @@ PanelWindow { readonly property bool focused: window.argFocus === index height: window.px(28) width: Math.min(window.px(220), pillText.implicitWidth + window.px(20)) - radius: Math.max(Style.cornerRadius, window.px(6)) + radius: Style.cornerRadius color: Util.alpha(window.look.foreground, pill.focused ? 0.12 : 0.06) border.width: 1 border.color: pill.focused ? window.look.accent : Util.alpha(window.look.foreground, 0.15) @@ -818,7 +820,7 @@ PanelWindow { anchors.verticalCenter: parent.verticalCenter height: window.px(28) width: filterRow.implicitWidth + window.px(20) - radius: Math.max(Style.cornerRadius, window.px(6)) + radius: Style.cornerRadius color: Util.alpha(window.look.foreground, window.dropdownOpen ? 0.12 : 0.06) border.width: 1 border.color: Util.alpha(window.look.foreground, 0.12) diff --git a/ui/ResultRow.qml b/ui/ResultRow.qml index ab5a1ec..49b05d7 100644 --- a/ui/ResultRow.qml +++ b/ui/ResultRow.qml @@ -45,7 +45,7 @@ Item { anchors.fill: parent sourceComponent: Rectangle { anchors.fill: parent - radius: Math.max(Style.cornerRadius, row.px(6)) + radius: Style.cornerRadius color: row.selected ? row.look.selectedBackground : Util.alpha(row.look.foreground, 0.04) border.width: 1 border.color: Util.alpha(row.look.foreground, row.selected ? 0 : 0.08) @@ -144,7 +144,7 @@ Item { Rectangle { visible: !row.isSection && !row.isCalculator anchors.fill: parent - radius: Math.max(Style.cornerRadius, row.px(6)) + radius: Style.cornerRadius color: row.selected ? row.look.selectedBackground : "transparent" opacity: row.disabled ? 0.45 : 1 @@ -189,7 +189,8 @@ Item { anchors.verticalCenter: parent.verticalCenter height: aliasText.implicitHeight + row.px(4) width: aliasText.implicitWidth + row.px(12) - radius: row.px(4) + // Small badge: follow Hyprland down to square, capped like Menu.qml. + radius: Math.min(Style.cornerRadius, row.px(4)) color: "transparent" border.width: 1 border.color: Util.alpha(row.look.foreground, 0.3)