diff options
author | Morten Johan Sørvig <morten.sorvig@digia.com> | 2014-11-20 20:30:28 +0100 |
---|---|---|
committer | Morten Johan Sørvig <morten.sorvig@digia.com> | 2015-03-26 11:01:25 +0100 |
commit | a955beb42388498a9ed5c426b9ae891ab56fa2f8 (patch) | |
tree | cbeec581695dc9b256ced617ac77c803915efc09 /src/gui/kernel/qhighdpiscaling.cpp | |
parent | 70f565b6e43b6ab93b01112286a40869155207c8 (diff) |
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
Diffstat (limited to 'src/gui/kernel/qhighdpiscaling.cpp')
-rw-r--r-- | src/gui/kernel/qhighdpiscaling.cpp | 24 |
1 files changed, 21 insertions, 3 deletions
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 |