From a955beb42388498a9ed5c426b9ae891ab56fa2f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Thu, 20 Nov 2014 20:30:28 +0100 Subject: WIP: Introduce per-window scale factors The qHighDpi functions now take an optional Window * The scale factor can be set with QHighDpiScaling:: setWindowFactor(QWindow *, factor) Change-Id: I34c80d2e031c257504d789ac5135de731d29929a --- src/gui/kernel/qhighdpiscaling.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'src/gui/kernel/qhighdpiscaling.cpp') diff --git a/src/gui/kernel/qhighdpiscaling.cpp b/src/gui/kernel/qhighdpiscaling.cpp index 6cdfd93860..9d563a9c74 100644 --- a/src/gui/kernel/qhighdpiscaling.cpp +++ b/src/gui/kernel/qhighdpiscaling.cpp @@ -74,6 +74,7 @@ static inline qreal initialScaleFactor() qreal QHighDpiScaling::m_factor = initialScaleFactor(); bool QHighDpiScaling::m_active = !qFuzzyCompare(QHighDpiScaling::m_factor, qreal(1)); +bool QHighDpiScaling::m_perWindowActive = false; void QHighDpiScaling::setFactor(qreal factor) { @@ -89,14 +90,31 @@ void QHighDpiScaling::setFactor(qreal factor) screen->d_func()->updateHighDpi(); } -Q_GUI_EXPORT QSize qHighDpiToDevicePixelsConstrained(const QSize &size) +static const char *scaleFactorProperty = "_q_scaleFactor"; + +void QHighDpiScaling::setWindowFactor(QWindow *window, qreal factor) +{ + m_perWindowActive = true; + window->setProperty(scaleFactorProperty, QVariant(factor)); +} + +qreal QHighDpiScaling::factor(const QWindow *window) +{ + if (m_perWindowActive || window == 0) + return m_factor; + + QVariant windowFactor = window->property(scaleFactorProperty); + return m_factor * (windowFactor.isValid() ? windowFactor.toReal() : 1); +} + +Q_GUI_EXPORT QSize qHighDpiToDevicePixelsConstrained(const QSize &size, const QWindow *window) { const int width = size.width(); const int height = size.height(); return QSize(width > 0 && width < QWINDOWSIZE_MAX ? - qHighDpiToDevicePixels(width) : width, + qHighDpiToDevicePixels(width, window) : width, height > 0 && height < QWINDOWSIZE_MAX ? - qHighDpiToDevicePixels(height) : height); + qHighDpiToDevicePixels(height, window) : height); } QT_END_NAMESPACE -- cgit v1.2.3