From 344e4cb9beb4e11272ea20b06944bd6702e42b9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lund=20Martsum?= Date: Tue, 17 May 2022 09:41:59 +0200 Subject: Fix QWidget::metric to use widget screen dpr instead of app-dpr Use the widget screen dpr in calculations rather than qApp->devicePixelRatio(). The screen may have been directly set (without the window handle being initialized) Task-number: QTBUG-103309 Task-number: QTBUG-49663 Task-number: QTBUG-101947 Task-number: QTBUG-102982 Change-Id: I2af2073640b171baf68575e3bc93b29b6a9a471d Reviewed-by: Volker Hilsheimer --- src/widgets/kernel/qwidget.cpp | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) (limited to 'src/widgets/kernel') diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 3a1f08907c..e96b0df94f 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -12690,15 +12690,7 @@ void QWidget::activateWindow() */ int QWidget::metric(PaintDeviceMetric m) const { - QWindow *topLevelWindow = nullptr; - QScreen *screen = nullptr; - if (QWidget *topLevel = window()) { - topLevelWindow = topLevel->windowHandle(); - if (topLevelWindow) - screen = topLevelWindow->screen(); - } - if (!screen && QGuiApplication::primaryScreen()) - screen = QGuiApplication::primaryScreen(); + QScreen *screen = this->screen(); if (!screen) { if (m == PdmDpiX || m == PdmDpiY) @@ -12733,12 +12725,11 @@ int QWidget::metric(PaintDeviceMetric m) const } else if (m == PdmPhysicalDpiY) { return qRound(screen->physicalDotsPerInchY()); } else if (m == PdmDevicePixelRatio) { - return topLevelWindow ? topLevelWindow->devicePixelRatio() : qApp->devicePixelRatio(); + return screen->devicePixelRatio(); } else if (m == PdmDevicePixelRatioScaled) { - return (QPaintDevice::devicePixelRatioFScale() * - (topLevelWindow ? topLevelWindow->devicePixelRatio() : qApp->devicePixelRatio())); + return QPaintDevice::devicePixelRatioFScale() * screen->devicePixelRatio(); } else { - val = QPaintDevice::metric(m);// XXX + val = QPaintDevice::metric(m); } return val; } -- cgit v1.2.3