Use QHighDpiScaling when determining scale factor
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ø <tor.arne.vestbo@qt.io>
This commit is contained in:
parent
020f03c47e
commit
e3c9dce0b6
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user