From d6813d00410a79e133ee58d1197feb5dee877974 Mon Sep 17 00:00:00 2001
From: Paul Olav Tvete <paul.tvete@theqtcompany.com>
Date: Thu, 25 Jun 2015 14:14:36 +0200
Subject: [PATCH] Add application attribute to disable highDPI scaling
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Main use case is for KDE Plasma, which needs to know about real
window system coordinates. Can also be used by applications that
do all the scaling manually, and that do not want to have Qt
scale the coordinate systems and painters.

Change-Id: Ic595131c5e2fb4c0af95e9b5bd3e40beee86760b
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
---
 src/corelib/global/qnamespace.h    | 1 +
 src/corelib/global/qnamespace.qdoc | 5 +++++
 src/gui/kernel/qhighdpiscaling.cpp | 8 ++++++++
 3 files changed, 14 insertions(+)

diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h
index fc5207fa257..9381f01639f 100644
--- a/src/corelib/global/qnamespace.h
+++ b/src/corelib/global/qnamespace.h
@@ -496,6 +496,7 @@ public:
         AA_UseSoftwareOpenGL = 17,
         AA_ShareOpenGLContexts = 18,
         AA_SetPalette = 19,
+        AA_NoHighDpiScaling = 20,
 
         // Add new attributes before this line
         AA_AttributeCount
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index 970e1b1f426..4aed887b195 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -197,6 +197,11 @@
     \value AA_SetPalette Indicates whether a palette was explicitly set on the
            QApplication/QGuiApplication. This value has been added in Qt 5.5.
 
+    \value AA_NoHighDpiScaling Disables all high-DPI scaling in Qt, exposing window
+           system coordinates. Note that the window system may do its own scaling,
+           so this does not guarantee that QPaintDevice::devicePixelRatio() will
+           be equal to 1. This value has been added in Qt 5.6.
+
     The following values are obsolete:
 
     \value AA_ImmediateWidgetCreation This attribute is no longer fully
diff --git a/src/gui/kernel/qhighdpiscaling.cpp b/src/gui/kernel/qhighdpiscaling.cpp
index e574a793701..46c9f671df7 100644
--- a/src/gui/kernel/qhighdpiscaling.cpp
+++ b/src/gui/kernel/qhighdpiscaling.cpp
@@ -142,6 +142,11 @@ QDpi QHighDpiScaling::m_logicalDpi; // The scaled logical DPI of the primary scr
 */
 void QHighDpiScaling::initHighDpiScaling()
 {
+    if (QCoreApplication::testAttribute(Qt::AA_NoHighDpiScaling)) {
+        m_factor = 1;
+        m_active = false;
+        return;
+    }
     m_factor = initialScaleFactor();
     bool usePlatformPluginPixelDensity = qEnvironmentVariableIsSet(autoScreenEnvVar)
                                          || qgetenv(legacyDevicePixelEnvVar).toLower() == "auto";
@@ -157,6 +162,9 @@ void QHighDpiScaling::initHighDpiScaling()
 
 void QHighDpiScaling::updateHighDpiScaling()
 {
+    if (QCoreApplication::testAttribute(Qt::AA_NoHighDpiScaling))
+        return;
+
     if (m_usePixelDensity && !m_pixelDensityScalingActive) {
         Q_FOREACH (QScreen *screen, QGuiApplication::screens()) {
             if (!qFuzzyCompare(screenSubfactor(screen->handle()), qreal(1))) {
-- 
GitLab