Improve QWidget::metric for PdmDevicePixelRatio.
Use QWindow::devicePixelRatio() which is the most accurate devicePixelRatio accessor since it can ask the platform native window directly Fall back to qApp->devicePixelRatio() if the window pointer is not valid. Task-number: QTBUG-37606 Task-number: QTBUG-38078 Change-Id: Ief1468a0c6ced07439f55329ab056883016241cc Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
This commit is contained in:
parent
2884d7c9aa
commit
687fbc1152
@ -834,13 +834,16 @@ int QWidget::metric(PaintDeviceMetric m) const
|
||||
{
|
||||
Q_D(const QWidget);
|
||||
|
||||
QWindow *topLevelWindow = 0;
|
||||
QScreen *screen = 0;
|
||||
if (QWidget *topLevel = window())
|
||||
if (QWindow *topLevelWindow = topLevel->windowHandle()) {
|
||||
QPlatformScreen *platformScreen = QPlatformScreen::platformScreenForWindow(topLevelWindow);
|
||||
if (platformScreen)
|
||||
screen = platformScreen->screen();
|
||||
}
|
||||
topLevelWindow = topLevel->windowHandle();
|
||||
|
||||
if (topLevelWindow) {
|
||||
QPlatformScreen *platformScreen = QPlatformScreen::platformScreenForWindow(topLevelWindow);
|
||||
if (platformScreen)
|
||||
screen = platformScreen->screen();
|
||||
}
|
||||
if (!screen && QGuiApplication::primaryScreen())
|
||||
screen = QGuiApplication::primaryScreen();
|
||||
|
||||
@ -877,7 +880,7 @@ int QWidget::metric(PaintDeviceMetric m) const
|
||||
} else if (m == PdmPhysicalDpiY) {
|
||||
return qRound(screen->physicalDotsPerInchY());
|
||||
} else if (m == PdmDevicePixelRatio) {
|
||||
return screen->devicePixelRatio();
|
||||
return topLevelWindow ? topLevelWindow->devicePixelRatio() : qApp->devicePixelRatio();
|
||||
} else {
|
||||
val = QPaintDevice::metric(m);// XXX
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user