From e3c9dce0b6e5aa1844f51cf2f3bdc550a5b884ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20S=C3=B8rvig?= Date: Mon, 17 Apr 2023 11:39:15 +0200 Subject: Use QHighDpiScaling when determining scale factor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The makes sure that the scale factor used by the style is identical to the scale factor used by Qt Gui, by for instance taking scale factor rounding into account. Task-id: QTBUG-109715 Change-Id: Ia0354a7ce0f51eb9fd5f2591ee6c4057291943f3 Reviewed-by: Tor Arne Vestbø --- src/widgets/styles/qwindowsstyle.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/styles/qwindowsstyle.cpp b/src/widgets/styles/qwindowsstyle.cpp index e48e17ed3b..f79136757a 100644 --- a/src/widgets/styles/qwindowsstyle.cpp +++ b/src/widgets/styles/qwindowsstyle.cpp @@ -358,18 +358,15 @@ static QScreen *screenOf(const QWidget *w) // and account for secondary screens with differing logical DPI. qreal QWindowsStylePrivate::nativeMetricScaleFactor(const QWidget *widget) { - const QPlatformScreen *screen = screenOf(widget)->handle(); - const qreal scale = screen ? (screen->logicalDpi().first / screen->logicalBaseDpi().first) - : QWindowsStylePrivate::appDevicePixelRatio(); + qreal scale = QHighDpiScaling::factor(screenOf(widget)); qreal result = qreal(1) / scale; if (QGuiApplicationPrivate::screen_list.size() > 1) { const QScreen *primaryScreen = QGuiApplication::primaryScreen(); const QScreen *screen = screenOf(widget); if (screen != primaryScreen) { - const qreal primaryLogicalDpi = primaryScreen->handle()->logicalDpi().first; - const qreal logicalDpi = screen->handle()->logicalDpi().first; - if (!qFuzzyCompare(primaryLogicalDpi, logicalDpi)) - result *= logicalDpi / primaryLogicalDpi; + qreal primaryScale = QHighDpiScaling::factor(primaryScreen); + if (!qFuzzyCompare(scale, primaryScale)) + result *= scale / primaryScale; } } return result; -- cgit v1.2.3