diff options
author | Morten Johan Sørvig <morten.sorvig@theqtcompany.com> | 2015-10-16 12:24:38 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2015-11-04 12:08:59 +0000 |
commit | add58edcdbd986e68cdd65a2a935b76d85d5b639 (patch) | |
tree | 2b58578368ed05d6c930910add4633bbb1960554 /src/gui/kernel | |
parent | 1bf639d5605863970b8dc5a91d5fc785cdf0ecf1 (diff) |
Update high-DPI scaling enablers.
Make it possible to enable and disable both at the
environment variable level and at the source code
level. This applies to scaling done by Qt using display
density information provided by the operating system.
Disabling is done with a 'veto' system: both the environment
and source code my prevent the other for enabling
scaling. This covers use cases of 'my system does not
provide correct display metrics' and 'my application
needs access to display pixels', respectively.
On the environment, scaling is now enabled with
QT_AUTO_SCREEN_SCALE_FACTOR=1 and disabled with
QT_AUTO_SCREEN_SCALE_FACTOR=0. In source code the
corresponding application attributes are AA_EnableHighDpiScaling
and AA_DisapleHighDpiScaling. Not setting any of these
indicates 'no preference'.
The global scale factor set by QT_SCALE_FACTOR is
not affected by any if the disablers.
Task-number: QTBUG-46615
Change-Id: If18607d4b56ace1914a710e5aa60b2f0968e0010
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Reviewed-by: Paul Olav Tvete <paul.tvete@theqtcompany.com>
Diffstat (limited to 'src/gui/kernel')
-rw-r--r-- | src/gui/kernel/qhighdpiscaling.cpp | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/src/gui/kernel/qhighdpiscaling.cpp b/src/gui/kernel/qhighdpiscaling.cpp index daba9f94a1..a002b8c48d 100644 --- a/src/gui/kernel/qhighdpiscaling.cpp +++ b/src/gui/kernel/qhighdpiscaling.cpp @@ -49,7 +49,7 @@ static const char scaleFactorEnvVar[] = "QT_SCALE_FACTOR"; static const char autoScreenEnvVar[] = "QT_AUTO_SCREEN_SCALE_FACTOR"; static const char screenFactorsEnvVar[] = "QT_SCREEN_SCALE_FACTORS"; -static inline qreal initialScaleFactor() +static inline qreal initialGlobalScaleFactor() { qreal result = 1; @@ -134,19 +134,31 @@ QDpi QHighDpiScaling::m_logicalDpi = QDpi(-1,-1); // The scaled logical DPI of t Initializes the QHighDpiScaling global variables. Called before the platform plugin is created. */ -void QHighDpiScaling::initHighDpiScaling() + +static inline bool usePixelDensity() { - if (QCoreApplication::testAttribute(Qt::AA_NoHighDpiScaling)) { - m_factor = 1; - m_active = false; - return; - } - m_factor = initialScaleFactor(); - bool usePlatformPluginPixelDensity = qEnvironmentVariableIsSet(autoScreenEnvVar) - || qgetenv(legacyDevicePixelEnvVar).toLower() == "auto"; + // Determine if we should set a scale factor based on the pixel density + // reported by the platform plugin. There are several enablers and several + // disablers. A single disable may veto all other enablers. + if (QCoreApplication::testAttribute(Qt::AA_DisableHighDpiScaling)) + return false; + bool screenEnvValueOk; + const int screenEnvValue = qEnvironmentVariableIntValue(autoScreenEnvVar, &screenEnvValueOk); + if (screenEnvValueOk && screenEnvValue < 1) + return false; + return QCoreApplication::testAttribute(Qt::AA_EnableHighDpiScaling) + || (screenEnvValueOk && screenEnvValue > 0) + || (qEnvironmentVariableIsSet(legacyDevicePixelEnvVar) && qgetenv(legacyDevicePixelEnvVar).toLower() == "auto"); +} +void QHighDpiScaling::initHighDpiScaling() +{ + // Determine if there is a global scale factor set. + m_factor = initialGlobalScaleFactor(); m_globalScalingActive = !qFuzzyCompare(m_factor, qreal(1)); - m_usePixelDensity = usePlatformPluginPixelDensity; + + m_usePixelDensity = usePixelDensity(); + m_pixelDensityScalingActive = false; //set in updateHighDpiScaling below // we update m_active in updateHighDpiScaling, but while we create the @@ -156,7 +168,7 @@ void QHighDpiScaling::initHighDpiScaling() void QHighDpiScaling::updateHighDpiScaling() { - if (QCoreApplication::testAttribute(Qt::AA_NoHighDpiScaling)) + if (QCoreApplication::testAttribute(Qt::AA_DisableHighDpiScaling)) return; if (m_usePixelDensity && !m_pixelDensityScalingActive) { |