From b4a344b0b541598fc63a4c99939d500537b6204f Mon Sep 17 00:00:00 2001 From: lysec Date: Sun, 12 Oct 2025 10:25:52 +0200 Subject: [PATCH] ControlCenter: fix scaling (pass scaling to everything) --- Modules/ControlCenter/Cards/MediaCard.qml | 2 ++ Modules/ControlCenter/Cards/PowerProfilesCard.qml | 1 + Modules/ControlCenter/Cards/ProfileCard.qml | 1 + Modules/ControlCenter/Cards/UtilitiesCard.qml | 1 + Modules/ControlCenter/Cards/WeatherCard.qml | 1 + Modules/ControlCenter/ControlCenterPanel.qml | 5 +++++ Widgets/NCircleStat.qml | 9 ++++++++- Widgets/NPanel.qml | 12 ++++++++++++ 8 files changed, 31 insertions(+), 1 deletion(-) diff --git a/Modules/ControlCenter/Cards/MediaCard.qml b/Modules/ControlCenter/Cards/MediaCard.qml index b4d7b7a6..8af05e1e 100644 --- a/Modules/ControlCenter/Cards/MediaCard.qml +++ b/Modules/ControlCenter/Cards/MediaCard.qml @@ -11,6 +11,8 @@ import qs.Widgets NBox { id: root + property real scaling: 1.0 + // Background artwork that covers everything Item { anchors.fill: parent diff --git a/Modules/ControlCenter/Cards/PowerProfilesCard.qml b/Modules/ControlCenter/Cards/PowerProfilesCard.qml index d93b26ba..4e6d6ccf 100644 --- a/Modules/ControlCenter/Cards/PowerProfilesCard.qml +++ b/Modules/ControlCenter/Cards/PowerProfilesCard.qml @@ -10,6 +10,7 @@ import qs.Widgets // Power Profiles: performance, balanced, eco NBox { + property real scaling: 1.0 property real spacing: 0 // Centralized service diff --git a/Modules/ControlCenter/Cards/ProfileCard.qml b/Modules/ControlCenter/Cards/ProfileCard.qml index ec9b4527..c36d57dc 100644 --- a/Modules/ControlCenter/Cards/ProfileCard.qml +++ b/Modules/ControlCenter/Cards/ProfileCard.qml @@ -14,6 +14,7 @@ import qs.Widgets NBox { id: root + property real scaling: 1.0 property string uptimeText: "--" RowLayout { diff --git a/Modules/ControlCenter/Cards/UtilitiesCard.qml b/Modules/ControlCenter/Cards/UtilitiesCard.qml index decd9659..62827b73 100644 --- a/Modules/ControlCenter/Cards/UtilitiesCard.qml +++ b/Modules/ControlCenter/Cards/UtilitiesCard.qml @@ -10,6 +10,7 @@ import qs.Widgets // Utilities: record & wallpaper NBox { + property real scaling: 1.0 property real spacing: 0 RowLayout { diff --git a/Modules/ControlCenter/Cards/WeatherCard.qml b/Modules/ControlCenter/Cards/WeatherCard.qml index 9b7d6aec..702cf76b 100644 --- a/Modules/ControlCenter/Cards/WeatherCard.qml +++ b/Modules/ControlCenter/Cards/WeatherCard.qml @@ -9,6 +9,7 @@ import qs.Widgets NBox { id: root + property real scaling: 1.0 readonly property bool weatherReady: (LocationService.data.weather !== null) ColumnLayout { diff --git a/Modules/ControlCenter/ControlCenterPanel.qml b/Modules/ControlCenter/ControlCenterPanel.qml index 28e9b49b..5c7989a3 100644 --- a/Modules/ControlCenter/ControlCenterPanel.qml +++ b/Modules/ControlCenter/ControlCenterPanel.qml @@ -40,11 +40,13 @@ NPanel { ProfileCard { Layout.fillWidth: true Layout.preferredHeight: Math.max(64 * scaling) + scaling: root.scaling } WeatherCard { Layout.fillWidth: true Layout.preferredHeight: Math.max(190 * scaling) + scaling: root.scaling } // Middle section: media + stats column @@ -57,6 +59,7 @@ NPanel { MediaCard { Layout.fillWidth: true Layout.fillHeight: true + scaling: root.scaling } // System monitors combined in one card @@ -85,6 +88,7 @@ NPanel { Layout.fillWidth: true Layout.fillHeight: true spacing: content.cardSpacing + scaling: root.scaling } // Utilities buttons @@ -92,6 +96,7 @@ NPanel { Layout.fillWidth: true Layout.fillHeight: true spacing: content.cardSpacing + scaling: root.scaling } } } diff --git a/Widgets/NCircleStat.qml b/Widgets/NCircleStat.qml index b5cb53a0..1305cec2 100644 --- a/Widgets/NCircleStat.qml +++ b/Widgets/NCircleStat.qml @@ -27,6 +27,13 @@ Rectangle { // Repaint gauge when the bound value changes onValueChanged: gauge.requestPaint() + + // Force repaint when scaling changes + onScalingChanged: { + Qt.callLater(() => { + gauge.requestPaint() + }) + } ColumnLayout { id: mainLayout @@ -46,7 +53,7 @@ Rectangle { Canvas { id: gauge anchors.fill: parent - renderStrategy: Canvas.Cooperative + renderStrategy: Canvas.Immediate onPaint: { const ctx = getContext("2d") diff --git a/Widgets/NPanel.qml b/Widgets/NPanel.qml index e5fae6cd..e7c4c8a3 100644 --- a/Widgets/NPanel.qml +++ b/Widgets/NPanel.qml @@ -146,6 +146,12 @@ Loader { Logger.log("NPanel", "Opened", root.objectName, "on", screen.name) dimmingOpacity = Style.opacityHeavy root.scaling = scaling = ScalingService.getScreenScale(screen) + + // Force refresh panel content when scaling is applied + Qt.callLater(() => { + panelContentLoader.active = false + panelContentLoader.active = true + }) } Connections { @@ -153,6 +159,12 @@ Loader { function onScaleChanged(screenName, scale) { if ((screen !== null) && (screenName === screen.name)) { root.scaling = scaling = scale + + // Force refresh panel content when scaling changes + Qt.callLater(() => { + panelContentLoader.active = false + panelContentLoader.active = true + }) } } }