diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/kernel/qhighdpiscaling.cpp | 11 | ||||
-rw-r--r-- | src/gui/kernel/qhighdpiscaling_p.h | 3 | ||||
-rw-r--r-- | src/gui/kernel/qscreen.cpp | 6 |
3 files changed, 19 insertions, 1 deletions
diff --git a/src/gui/kernel/qhighdpiscaling.cpp b/src/gui/kernel/qhighdpiscaling.cpp index 2fee06c77d..8dd6c6687d 100644 --- a/src/gui/kernel/qhighdpiscaling.cpp +++ b/src/gui/kernel/qhighdpiscaling.cpp @@ -128,6 +128,7 @@ bool QHighDpiScaling::m_usePixelDensity; // use scale factor from platform plugi bool QHighDpiScaling::m_pixelDensityScalingActive; // pixel density scale factor > 1 bool QHighDpiScaling::m_globalScalingActive; // global scale factor is active bool QHighDpiScaling::m_screenFactorSet; // QHighDpiScaling::setScreenFactor has been used +QDpi QHighDpiScaling::m_logicalDpi; // The scaled logical DPI of the primary screen /* Initializes the QHighDpiScaling global variables. Called before the @@ -159,6 +160,11 @@ void QHighDpiScaling::updateHighDpiScaling() } } m_active = m_globalScalingActive || m_screenFactorSet || m_pixelDensityScalingActive; + + QPlatformScreen *primaryScreen = QGuiApplication::primaryScreen()->handle(); + qreal sf = screenSubfactor(primaryScreen); + QDpi primaryDpi = primaryScreen->logicalDpi(); + m_logicalDpi = QDpi(primaryDpi.first / sf, primaryDpi.second / sf); } /* @@ -246,6 +252,11 @@ qreal QHighDpiScaling::screenSubfactor(const QPlatformScreen *screen) return factor; } +QDpi QHighDpiScaling::logicalDpi() +{ + return m_logicalDpi; +} + qreal QHighDpiScaling::factor(const QScreen *screen) { // Fast path for when scaling in Qt is not used at all. diff --git a/src/gui/kernel/qhighdpiscaling_p.h b/src/gui/kernel/qhighdpiscaling_p.h index d60be86518..5dd9db68c4 100644 --- a/src/gui/kernel/qhighdpiscaling_p.h +++ b/src/gui/kernel/qhighdpiscaling_p.h @@ -57,6 +57,7 @@ Q_DECLARE_LOGGING_CATEGORY(lcScaling); class QScreen; class QPlatformScreen; +typedef QPair<qreal, qreal> QDpi; class Q_GUI_EXPORT QHighDpiScaling { public: @@ -73,6 +74,7 @@ public: static QPoint origin(const QPlatformScreen *platformScreen); static QPoint mapPositionFromNative(const QPoint &pos, const QPlatformScreen *platformScreen); static QPoint mapPositionToNative(const QPoint &pos, const QPlatformScreen *platformScreen); + static QDpi logicalDpi(); private: static qreal screenSubfactor(const QPlatformScreen *screen); @@ -82,6 +84,7 @@ private: static bool m_globalScalingActive; static bool m_pixelDensityScalingActive; static bool m_screenFactorSet; + static QDpi m_logicalDpi; }; // Coordinate system conversion functions: diff --git a/src/gui/kernel/qscreen.cpp b/src/gui/kernel/qscreen.cpp index af88a44957..485bb983c0 100644 --- a/src/gui/kernel/qscreen.cpp +++ b/src/gui/kernel/qscreen.cpp @@ -235,6 +235,8 @@ qreal QScreen::physicalDotsPerInch() const qreal QScreen::logicalDotsPerInchX() const { Q_D(const QScreen); + if (QHighDpiScaling::isActive()) + return QHighDpiScaling::logicalDpi().first; return d->logicalDpi.first; } @@ -249,6 +251,8 @@ qreal QScreen::logicalDotsPerInchX() const qreal QScreen::logicalDotsPerInchY() const { Q_D(const QScreen); + if (QHighDpiScaling::isActive()) + return QHighDpiScaling::logicalDpi().first; return d->logicalDpi.second; } @@ -267,7 +271,7 @@ qreal QScreen::logicalDotsPerInchY() const qreal QScreen::logicalDotsPerInch() const { Q_D(const QScreen); - QDpi dpi = d->logicalDpi; + QDpi dpi = QHighDpiScaling::isActive() ? QHighDpiScaling::logicalDpi() : d->logicalDpi; return (dpi.first + dpi.second) * qreal(0.5); } |