Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Assets/Translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -853,6 +853,10 @@
"appearance-floating-label": "Floating bar",
"appearance-font-scale-description": "Adjust the font size scale for text displayed in the bar.",
"appearance-font-scale-label": "Font scale",
"appearance-widget-radius-description": "Adjust the corner roundness of bar widget capsules.",
"appearance-widget-radius-label": "Widget radius",
"appearance-override-plugin-widget-radius-description": "Apply the bar widget radius to plugin widgets automatically.",
"appearance-override-plugin-widget-radius-label": "Override plugin widget radius",
"appearance-frame-radius": "Inner Radius",
"appearance-frame-settings-description": "Adjust frame thickness and inner corner radius",
"appearance-frame-settings-label": "Frame Settings",
Expand Down
2 changes: 2 additions & 0 deletions Assets/settings-default.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
"widgetSpacing": 6,
"contentPadding": 2,
"fontScale": 1,
"widgetRadiusRatio": 1,
"overridePluginWidgetRadius": true,
"enableExclusionZoneInset": true,
"backgroundOpacity": 0.93,
"useSeparateOpacity": false,
Expand Down
20 changes: 19 additions & 1 deletion Assets/settings-search-index.json
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,24 @@
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.bar.appearance-widget-radius-label",
"descriptionKey": "panels.bar.appearance-widget-radius-description",
"widget": "NValueSlider",
"tab": 4,
"tabLabel": "panels.bar.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.bar.appearance-override-plugin-widget-radius-label",
"descriptionKey": "panels.bar.appearance-override-plugin-widget-radius-description",
"widget": "NToggle",
"tab": 4,
"tabLabel": "panels.bar.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.bar.appearance-widget-spacing-label",
"descriptionKey": "panels.bar.appearance-widget-spacing-description",
Expand Down Expand Up @@ -2725,4 +2743,4 @@
"subTab": 1,
"subTabLabel": "common.look"
}
]
]
2 changes: 2 additions & 0 deletions Commons/Settings.qml
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,8 @@ Singleton {
property int widgetSpacing: 6
property int contentPadding: 2
property real fontScale: 1.0
property real widgetRadiusRatio: 1.0
property bool overridePluginWidgetRadius: true
property bool enableExclusionZoneInset: true

// Bar background opacity settings
Expand Down
8 changes: 8 additions & 0 deletions Commons/Style.qml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@ Singleton {
readonly property int iRadiusM: Math.round(16 * Settings.data.general.iRadiusRatio)
readonly property int iRadiusL: Math.round(20 * Settings.data.general.iRadiusRatio)

// Bar widget radii: bar capsules and bar widget surfaces
readonly property int barRadiusXXXS: Math.round(3 * Settings.data.bar.widgetRadiusRatio)
readonly property int barRadiusXXS: Math.round(4 * Settings.data.bar.widgetRadiusRatio)
readonly property int barRadiusXS: Math.round(8 * Settings.data.bar.widgetRadiusRatio)
readonly property int barRadiusS: Math.round(12 * Settings.data.bar.widgetRadiusRatio)
readonly property int barRadiusM: Math.round(16 * Settings.data.bar.widgetRadiusRatio)
readonly property int barRadiusL: Math.round(20 * Settings.data.bar.widgetRadiusRatio)

readonly property int screenRadius: Math.round(20 * Settings.data.general.screenRadiusRatio)

// Border
Expand Down
12 changes: 6 additions & 6 deletions Modules/Bar/Extras/BarPillHorizontal.qml
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ Item {
id: pillBackground
width: collapseToIcon ? pillHeight : root.width
height: pillHeight
radius: Style.radiusM
radius: Style.barRadiusM
color: root.bgColor
anchors.verticalCenter: parent.verticalCenter
border.color: Style.capsuleBorderColor
Expand Down Expand Up @@ -124,10 +124,10 @@ Item {
color: "transparent" // Make pill background transparent to avoid double opacity

// iconPosition takes precedence, fallback to oppositeDirection
topLeftRadius: iconPosition ? (iconPosition === "right" ? Style.radiusM : 0) : (oppositeDirection ? 0 : Style.radiusM)
bottomLeftRadius: iconPosition ? (iconPosition === "right" ? Style.radiusM : 0) : (oppositeDirection ? 0 : Style.radiusM)
topRightRadius: iconPosition ? (iconPosition === "right" ? 0 : Style.radiusM) : (oppositeDirection ? Style.radiusM : 0)
bottomRightRadius: iconPosition ? (iconPosition === "right" ? 0 : Style.radiusM) : (oppositeDirection ? Style.radiusM : 0)
topLeftRadius: iconPosition ? (iconPosition === "right" ? Style.barRadiusM : 0) : (oppositeDirection ? 0 : Style.barRadiusM)
bottomLeftRadius: iconPosition ? (iconPosition === "right" ? Style.barRadiusM : 0) : (oppositeDirection ? 0 : Style.barRadiusM)
topRightRadius: iconPosition ? (iconPosition === "right" ? 0 : Style.barRadiusM) : (oppositeDirection ? Style.barRadiusM : 0)
bottomRightRadius: iconPosition ? (iconPosition === "right" ? 0 : Style.barRadiusM) : (oppositeDirection ? Style.barRadiusM : 0)
anchors.verticalCenter: parent.verticalCenter

NText {
Expand Down Expand Up @@ -181,7 +181,7 @@ Item {
id: iconCircle
width: hasIcon ? pillHeight : 0
height: pillHeight
radius: Math.min(Style.radiusL, width / 2)
radius: Math.min(Style.barRadiusL, width / 2)
color: "transparent" // Make icon background transparent to avoid double opacity
anchors.verticalCenter: parent.verticalCenter

Expand Down
12 changes: 6 additions & 6 deletions Modules/Bar/Extras/BarPillVertical.qml
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ Item {
id: pillBackground
width: buttonSize
height: root.contentHeight
radius: Style.radiusM
radius: Style.barRadiusM
color: root.bgColor
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
Expand Down Expand Up @@ -134,10 +134,10 @@ Item {
color: "transparent" // Make pill background transparent to avoid double opacity

// Radius logic for vertical expansion - rounded on the side that connects to icon
topLeftRadius: openUpward ? Style.radiusM : 0
bottomLeftRadius: openDownward ? Style.radiusM : 0
topRightRadius: openUpward ? Style.radiusM : 0
bottomRightRadius: openDownward ? Style.radiusM : 0
topLeftRadius: openUpward ? Style.barRadiusM : 0
bottomLeftRadius: openDownward ? Style.barRadiusM : 0
topRightRadius: openUpward ? Style.barRadiusM : 0
bottomRightRadius: openDownward ? Style.barRadiusM : 0

anchors.horizontalCenter: parent.horizontalCenter

Expand Down Expand Up @@ -188,7 +188,7 @@ Item {
id: iconCircle
width: buttonSize
height: buttonSize
radius: Math.min(Style.radiusL, width / 2)
radius: Math.min(Style.barRadiusL, width / 2)
color: "transparent" // Make icon background transparent to avoid double opacity

// Icon positioning based on direction
Expand Down
65 changes: 65 additions & 0 deletions Modules/Bar/Extras/BarWidgetLoader.qml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,24 @@ Item {

// Force reload counter - incremented when plugin widget registry changes
property int reloadCounter: 0
property var _pluginRadiusCache: []

function _getPluginRadiusCache(item) {
for (var i = 0; i < _pluginRadiusCache.length; i++) {
if (_pluginRadiusCache[i].item === item)
return _pluginRadiusCache[i];
}

var entry = {
item: item,
hasCustomRadius: item.hasOwnProperty("customRadius"),
customRadius: item.hasOwnProperty("customRadius") ? item.customRadius : undefined,
hasRadius: item.hasOwnProperty("radius"),
radius: item.hasOwnProperty("radius") ? item.radius : undefined
};
_pluginRadiusCache.push(entry);
return entry;
}

// Listen for plugin widget registry changes to force reload
Connections {
Expand All @@ -71,6 +89,16 @@ Item {
}
}

// Apply plugin radius override live when setting changes (no widget reload).
Connections {
target: Settings.data.bar
enabled: root._isPlugin

function onOverridePluginWidgetRadiusChanged() {
root._applyPluginRadiusOverride(loader.item);
}
}

readonly property bool _isPlugin: BarWidgetRegistry.isPluginWidget(widgetId)

// Build initial properties that must be available during Component.onCompleted.
Expand Down Expand Up @@ -113,6 +141,40 @@ Item {
}
}

function _applyPluginRadiusOverride(item) {
if (!root._isPlugin || !item)
return;

if (item.hasOwnProperty("disableGlobalRadiusOverride") && item.disableGlobalRadiusOverride)
return;

var cache = root._getPluginRadiusCache(item);

if (!Settings.data.bar.overridePluginWidgetRadius) {
if (cache.hasCustomRadius)
item.customRadius = cache.customRadius;
else if (cache.hasRadius)
item.radius = cache.radius;
return;
}

if (item.hasOwnProperty("customRadius")) {
item.customRadius = Qt.binding(function () {
return Style.barRadiusL;
});
return;
}

if (item.hasOwnProperty("radius")) {
item.radius = Qt.binding(function () {
var baseRadius = Style.barRadiusM;
if (item.hasOwnProperty("width") && item.width > 0)
return Math.min(baseRadius, item.width / 2);
return baseRadius;
});
}
}

Loader {
id: loader
anchors.fill: parent
Expand Down Expand Up @@ -161,6 +223,9 @@ Item {
}
}

// Keep plugin widgets aligned with bar radius setting unless plugin opts out.
root._applyPluginRadiusOverride(item);

// Unregister any previous registration before registering the new instance
root._unregister();

Expand Down
2 changes: 1 addition & 1 deletion Modules/Bar/Extras/WorkspacePill.qml
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ Item {
height: pillContainer.pillHeight
x: Style.pixelAlignCenter(parent.width, width)
y: Style.pixelAlignCenter(parent.height, height)
radius: Style.radiusM
radius: Style.barRadiusXS
z: 0

color: {
Expand Down
4 changes: 2 additions & 2 deletions Modules/Bar/Widgets/ActiveWindow.qml
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ Item {
y: isVerticalBar ? 0 : Style.pixelAlignCenter(parent.height, height)
width: isVerticalBar ? ((!hasFocusedWindow) && hideMode === "hidden" ? 0 : verticalSize) : ((!hasFocusedWindow) && (hideMode === "hidden") ? 0 : dynamicWidth)
height: isVerticalBar ? ((!hasFocusedWindow) && hideMode === "hidden" ? 0 : verticalSize) : capsuleHeight
radius: Style.radiusM
radius: Style.barRadiusM
color: Style.capsuleColor
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
Expand Down Expand Up @@ -279,7 +279,7 @@ Item {
}
forcedHover: mainMouseArea.containsMouse
fadeExtent: 0.1
fadeCornerRadius: Style.radiusM
fadeCornerRadius: Style.barRadiusM

NText {
text: windowTitle
Expand Down
2 changes: 1 addition & 1 deletion Modules/Bar/Widgets/AudioVisualizer.qml
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ Item {
width: root.contentWidth
height: root.contentHeight
anchors.centerIn: parent
radius: Style.radiusS
radius: Style.barRadiusS
color: Style.capsuleColor
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
Expand Down
2 changes: 1 addition & 1 deletion Modules/Bar/Widgets/Battery.qml
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ Item {
anchors.centerIn: nBattery
width: root.isBarVertical ? root.capsuleHeight : nBattery.width + Style.margin2S
height: root.isBarVertical ? nBattery.height + Style.margin2S : root.capsuleHeight
radius: Math.min(Style.radiusL, width / 2)
radius: Math.min(Style.barRadiusL, width / 2)
color: graphicMouseArea.containsMouse ? Color.mHover : Style.capsuleColor
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
Expand Down
2 changes: 1 addition & 1 deletion Modules/Bar/Widgets/Clock.qml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ Item {
height: root.contentHeight
anchors.centerIn: parent

radius: Style.radiusL
radius: Style.barRadiusL
color: Style.capsuleColor
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
Expand Down
2 changes: 1 addition & 1 deletion Modules/Bar/Widgets/ControlCenter.qml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ NIconButton {
tooltipDirection: BarService.getTooltipDirection(screen?.name)
baseSize: Style.getCapsuleHeightForScreen(screen?.name)
applyUiScale: false
customRadius: Style.radiusL
customRadius: Style.barRadiusL
colorBg: Style.capsuleColor
colorFg: iconColor
colorBgHover: Color.mHover
Expand Down
2 changes: 1 addition & 1 deletion Modules/Bar/Widgets/DarkMode.qml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ NIconButton {
tooltipDirection: BarService.getTooltipDirection(screen?.name)
baseSize: Style.getCapsuleHeightForScreen(screen?.name)
applyUiScale: false
customRadius: Style.radiusL
customRadius: Style.barRadiusL
colorBg: Style.capsuleColor
colorFg: Color.resolveColorKey(iconColorKey)
onClicked: Settings.data.colorSchemes.darkMode = !Settings.data.colorSchemes.darkMode
Expand Down
2 changes: 1 addition & 1 deletion Modules/Bar/Widgets/Launcher.qml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ NIconButton {
tooltipDirection: BarService.getTooltipDirection(screenName)
baseSize: Style.getCapsuleHeightForScreen(screenName)
applyUiScale: false
customRadius: Style.radiusL
customRadius: Style.barRadiusL
colorBg: Style.capsuleColor
colorFg: iconColor
colorBgHover: Color.mHover
Expand Down
2 changes: 1 addition & 1 deletion Modules/Bar/Widgets/LockKeys.qml
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ Item {
color: Style.capsuleColor
width: root.contentWidth
height: root.contentHeight
radius: Style.radiusM
radius: Style.barRadiusM
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth

Expand Down
4 changes: 2 additions & 2 deletions Modules/Bar/Widgets/MediaMini.qml
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ Item {
y: Style.pixelAlignCenter(parent.height, height)
width: Style.toOdd(isVertical ? (isHidden ? 0 : verticalSize) : (isHidden ? 0 : contentWidth))
height: Style.toOdd(isVertical ? (isHidden ? 0 : verticalSize) : capsuleHeight)
radius: Style.radiusM
radius: Style.barRadiusM
color: Style.capsuleColor
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
Expand Down Expand Up @@ -335,7 +335,7 @@ Item {
maxWidth: root.maxWidth - root.mainContentWidth
forcedHover: mainMouseArea.containsMouse
fadeExtent: 0.1
fadeCornerRadius: Style.radiusM
fadeCornerRadius: Style.barRadiusM

NText {
color: hasPlayer ? root.textColor : Color.mOnSurfaceVariant
Expand Down
2 changes: 1 addition & 1 deletion Modules/Bar/Widgets/NightLight.qml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ NIconButton {

baseSize: Style.getCapsuleHeightForScreen(screen?.name)
applyUiScale: false
customRadius: Style.radiusL
customRadius: Style.barRadiusL
colorBg: Settings.data.nightLight.enabled ? Color.mPrimary : Style.capsuleColor
colorFg: Settings.data.nightLight.enabled ? Color.mOnPrimary : Color.resolveColorKey(iconColorKey)
border.color: Style.capsuleBorderColor
Expand Down
2 changes: 1 addition & 1 deletion Modules/Bar/Widgets/NoctaliaPerformance.qml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ NIconButton {

baseSize: Style.getCapsuleHeightForScreen(screen?.name)
applyUiScale: false
customRadius: Style.radiusL
customRadius: Style.barRadiusL
colorBg: PowerProfileService.noctaliaPerformanceMode ? Color.mPrimary : Style.capsuleColor
colorFg: PowerProfileService.noctaliaPerformanceMode ? Color.mOnPrimary : Color.resolveColorKey(iconColorKey)
border.color: Style.capsuleBorderColor
Expand Down
2 changes: 1 addition & 1 deletion Modules/Bar/Widgets/NotificationHistory.qml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ NIconButton {

baseSize: Style.getCapsuleHeightForScreen(screen?.name)
applyUiScale: false
customRadius: Style.radiusL
customRadius: Style.barRadiusL
icon: NotificationService.doNotDisturb ? "bell-off" : "bell"
tooltipText: {
if (PanelService.getPanel("notificationHistoryPanel", screen)?.isPanelOpen) {
Expand Down
2 changes: 1 addition & 1 deletion Modules/Bar/Widgets/PowerProfile.qml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ NIconButton {

baseSize: Style.getCapsuleHeightForScreen(screen?.name)
applyUiScale: false
customRadius: Style.radiusL
customRadius: Style.barRadiusL
visible: PowerProfileService.available
icon: PowerProfileService.getIcon()
tooltipText: I18n.tr("tooltips.power-profile", {
Expand Down
2 changes: 1 addition & 1 deletion Modules/Bar/Widgets/SessionMenu.qml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ NIconButton {

baseSize: Style.getCapsuleHeightForScreen(screenName)
applyUiScale: false
customRadius: Style.radiusL
customRadius: Style.barRadiusL
icon: "power"
tooltipText: {
if (PanelService.getPanel("sessionMenuPanel", screen)?.isPanelOpen)
Expand Down
2 changes: 1 addition & 1 deletion Modules/Bar/Widgets/Settings.qml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ NIconButton {
tooltipDirection: BarService.getTooltipDirection(screen?.name)
baseSize: Style.getCapsuleHeightForScreen(screen?.name)
applyUiScale: false
customRadius: Style.radiusL
customRadius: Style.barRadiusL
colorBg: Style.capsuleColor
colorFg: iconColor
colorBgHover: Color.mHover
Expand Down
Loading