summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qhighdpiscaling.cpp
diff options
context:
space:
mode:
authorMorten Johan Sørvig <morten.sorvig@digia.com>2014-11-20 20:30:28 +0100
committerMorten Johan Sørvig <morten.sorvig@digia.com>2015-03-26 11:01:25 +0100
commita955beb42388498a9ed5c426b9ae891ab56fa2f8 (patch)
treecbeec581695dc9b256ced617ac77c803915efc09 /src/gui/kernel/qhighdpiscaling.cpp
parent70f565b6e43b6ab93b01112286a40869155207c8 (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.cpp24
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