qhighdpiscaling.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/gui/kernel/qhighdpiscaling.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5const QLoggingCategory &lcScaling() { static const QLoggingCategory category("qt.scaling"); return
never executed: return category;
category;
never executed: return category;
};
0
6-
7-
8static const char legacyDevicePixelEnvVar[] = "QT_DEVICE_PIXEL_RATIO";-
9static const char scaleFactorEnvVar[] = "QT_SCALE_FACTOR";-
10static const char autoScreenEnvVar[] = "QT_AUTO_SCREEN_SCALE_FACTOR";-
11static const char screenFactorsEnvVar[] = "QT_SCREEN_SCALE_FACTORS";-
12-
13static inline qreal initialGlobalScaleFactor()-
14{-
15-
16 qreal result = 1;-
17 if (qEnvironmentVariableIsSet(scaleFactorEnvVar)
qEnvironmentVa...eFactorEnvVar)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
18 bool ok;-
19 const qreal f = qgetenv(scaleFactorEnvVar).toDouble(&ok);-
20 if (ok
okDescription
TRUEnever evaluated
FALSEnever evaluated
&& f > 0
f > 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
21 for (bool qt_category_enabled = lcScaling().isDebugEnabled(); qt_category_enabled
qt_category_enabledDescription
TRUEnever evaluated
FALSEnever evaluated
; qt_category_enabled = false) QMessageLogger(__FILE__, 60, __PRETTY_FUNCTION__, lcScaling().categoryName()).debug() << "Apply " << scaleFactorEnvVar << f;
never executed: QMessageLogger(__FILE__, 60, __PRETTY_FUNCTION__, lcScaling().categoryName()).debug() << "Apply " << scaleFactorEnvVar << f;
0
22 result = f;-
23 }
never executed: end of block
0
24 }
never executed: end of block
else {
0
25 if (qEnvironmentVariableIsSet(legacyDevicePixelEnvVar)
qEnvironmentVa...cePixelEnvVar)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
26 QMessageLogger(__FILE__, 65, __PRETTY_FUNCTION__).warning() << "Warning:" << legacyDevicePixelEnvVar << "is deprecated. Instead use:" << endl-
27 << " " << autoScreenEnvVar << "to enable platform plugin controlled per-screen factors." << endl-
28 << " " << screenFactorsEnvVar << "to set per-screen factors." << endl-
29 << " " << scaleFactorEnvVar << "to set the application global scale factor.";-
30-
31 int dpr = qEnvironmentVariableIntValue(legacyDevicePixelEnvVar);-
32 if (dpr > 0
dpr > 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
33 result = dpr;
never executed: result = dpr;
0
34 }
never executed: end of block
0
35 }
never executed: end of block
0
36 return
never executed: return result;
result;
never executed: return result;
0
37}-
38qreal QHighDpiScaling::m_factor = 1.0;-
39bool QHighDpiScaling::m_active = false;-
40bool QHighDpiScaling::m_usePixelDensity = false;-
41bool QHighDpiScaling::m_pixelDensityScalingActive = false;-
42bool QHighDpiScaling::m_globalScalingActive = false;-
43bool QHighDpiScaling::m_screenFactorSet = false;-
44QDpi QHighDpiScaling::m_logicalDpi = QDpi(-1,-1);-
45-
46-
47-
48-
49-
50-
51static inline bool usePixelDensity()-
52{-
53-
54-
55-
56 if (QCoreApplication::testAttribute(Qt::AA_DisableHighDpiScaling)
QCoreApplicati...ighDpiScaling)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
57 return
never executed: return false;
false;
never executed: return false;
0
58 bool screenEnvValueOk;-
59 const int screenEnvValue = qEnvironmentVariableIntValue(autoScreenEnvVar, &screenEnvValueOk);-
60 if (screenEnvValueOk
screenEnvValueOkDescription
TRUEnever evaluated
FALSEnever evaluated
&& screenEnvValue < 1
screenEnvValue < 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
61 return
never executed: return false;
false;
never executed: return false;
0
62 return
never executed: return QCoreApplication::testAttribute(Qt::AA_EnableHighDpiScaling) || (screenEnvValueOk && screenEnvValue > 0) || (qEnvironmentVariableIsSet(legacyDevicePixelEnvVar) && qgetenv(legacyDevicePixelEnvVar).toLower() == "auto");
QCoreApplication::testAttribute(Qt::AA_EnableHighDpiScaling)
QCoreApplicati...ighDpiScaling)Description
TRUEnever evaluated
FALSEnever evaluated
never executed: return QCoreApplication::testAttribute(Qt::AA_EnableHighDpiScaling) || (screenEnvValueOk && screenEnvValue > 0) || (qEnvironmentVariableIsSet(legacyDevicePixelEnvVar) && qgetenv(legacyDevicePixelEnvVar).toLower() == "auto");
0
63 || (screenEnvValueOk
screenEnvValueOkDescription
TRUEnever evaluated
FALSEnever evaluated
&& screenEnvValue > 0
screenEnvValue > 0Description
TRUEnever evaluated
FALSEnever evaluated
)
never executed: return QCoreApplication::testAttribute(Qt::AA_EnableHighDpiScaling) || (screenEnvValueOk && screenEnvValue > 0) || (qEnvironmentVariableIsSet(legacyDevicePixelEnvVar) && qgetenv(legacyDevicePixelEnvVar).toLower() == "auto");
0
64 || (qEnvironmentVariableIsSet(legacyDevicePixelEnvVar)
qEnvironmentVa...cePixelEnvVar)Description
TRUEnever evaluated
FALSEnever evaluated
&& qgetenv(legacyDevicePixelEnvVar).toLower() == "auto"
qgetenv(legacy...er() == "auto"Description
TRUEnever evaluated
FALSEnever evaluated
);
never executed: return QCoreApplication::testAttribute(Qt::AA_EnableHighDpiScaling) || (screenEnvValueOk && screenEnvValue > 0) || (qEnvironmentVariableIsSet(legacyDevicePixelEnvVar) && qgetenv(legacyDevicePixelEnvVar).toLower() == "auto");
0
65}-
66-
67void QHighDpiScaling::initHighDpiScaling()-
68{-
69-
70 m_factor = initialGlobalScaleFactor();-
71 m_globalScalingActive = !qFuzzyCompare(m_factor, qreal(1));-
72-
73 m_usePixelDensity = usePixelDensity();-
74-
75 m_pixelDensityScalingActive = false;-
76-
77-
78-
79 m_active = m_globalScalingActive
m_globalScalingActiveDescription
TRUEnever evaluated
FALSEnever evaluated
|| m_usePixelDensity
m_usePixelDensityDescription
TRUEnever evaluated
FALSEnever evaluated
;
0
80}
never executed: end of block
0
81-
82void QHighDpiScaling::updateHighDpiScaling()-
83{-
84 if (QCoreApplication::testAttribute(Qt::AA_DisableHighDpiScaling)
QCoreApplicati...ighDpiScaling)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
85 return;
never executed: return;
0
86-
87 if (m_usePixelDensity
m_usePixelDensityDescription
TRUEnever evaluated
FALSEnever evaluated
&& !m_pixelDensityScalingActive
!m_pixelDensityScalingActiveDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
88 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(QGuiApplication::screens())>::type> _container_((QGuiApplication::screens())); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QScreen *screen = *_container_.i; _container_.control; _container_.control = 0) {-
89 if (!qFuzzyCompare(screenSubfactor(screen->handle()), qreal(1))
!qFuzzyCompare...()), qreal(1))Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
90 m_pixelDensityScalingActive = true;-
91 break;
never executed: break;
0
92 }-
93 }
never executed: end of block
0
94 }
never executed: end of block
0
95 if (qEnvironmentVariableIsSet(screenFactorsEnvVar)
qEnvironmentVa...FactorsEnvVar)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
96 int i = 0;-
97 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(qgetenv(screenFactorsEnvVar).split(';'))>::type> _container_((qgetenv(screenFactorsEnvVar).split(';'))); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (const QByteArray &spec = *_container_.i; _container_.control; _container_.control = 0) {-
98 QScreen *screen = 0;-
99 int equalsPos = spec.lastIndexOf('=');-
100 double factor = 0;-
101 if (equalsPos > 0
equalsPos > 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
102-
103 QByteArray name = spec.mid(0, equalsPos);-
104 QByteArray f = spec.mid(equalsPos + 1);-
105 bool ok;-
106 factor = f.toDouble(&ok);-
107 if (ok
okDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
108 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(QGuiApplication::screens())>::type> _container_((QGuiApplication::screens())); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QScreen *s = *_container_.i; _container_.control; _container_.control = 0) {-
109 if (s->name() == QString::fromLocal8Bit(name)
s->name() == Q...ocal8Bit(name)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
110 screen = s;-
111 break;
never executed: break;
0
112 }-
113 }
never executed: end of block
0
114 }
never executed: end of block
0
115 }
never executed: end of block
else {
0
116-
117 bool ok;-
118 factor = spec.toDouble(&ok);-
119 if (ok
okDescription
TRUEnever evaluated
FALSEnever evaluated
&& i < QGuiApplication::screens().count()
i < QGuiApplic...eens().count()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
120 screen = QGuiApplication::screens().at(i);
never executed: screen = QGuiApplication::screens().at(i);
0
121 }
never executed: end of block
0
122 if (screen
screenDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
123 setScreenFactor(screen, factor);
never executed: setScreenFactor(screen, factor);
0
124 ++i;-
125 }
never executed: end of block
0
126 }
never executed: end of block
0
127 m_active = m_globalScalingActive
m_globalScalingActiveDescription
TRUEnever evaluated
FALSEnever evaluated
|| m_screenFactorSet
m_screenFactorSetDescription
TRUEnever evaluated
FALSEnever evaluated
|| m_pixelDensityScalingActive
m_pixelDensityScalingActiveDescription
TRUEnever evaluated
FALSEnever evaluated
;
0
128-
129 QPlatformScreen *primaryScreen = QGuiApplication::primaryScreen()->handle();-
130 qreal sf = screenSubfactor(primaryScreen);-
131 QDpi primaryDpi = primaryScreen->logicalDpi();-
132 m_logicalDpi = QDpi(primaryDpi.first / sf, primaryDpi.second / sf);-
133}
never executed: end of block
0
134-
135-
136-
137-
138void QHighDpiScaling::setGlobalFactor(qreal factor)-
139{-
140 if (qFuzzyCompare(factor, m_factor)
qFuzzyCompare(...tor, m_factor)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
141 return;
never executed: return;
0
142 if (!QGuiApplication::allWindows().isEmpty()
!QGuiApplicati...ws().isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
143 QMessageLogger(__FILE__, 319, __PRETTY_FUNCTION__).warning("QHighDpiScaling::setFactor: Should only be called when no windows exist.");
never executed: QMessageLogger(__FILE__, 319, __PRETTY_FUNCTION__).warning("QHighDpiScaling::setFactor: Should only be called when no windows exist.");
0
144-
145 m_globalScalingActive = !qFuzzyCompare(factor, qreal(1));-
146 m_factor = m_globalScalingActive
m_globalScalingActiveDescription
TRUEnever evaluated
FALSEnever evaluated
? factor : qreal(1);
0
147 m_active = m_globalScalingActive
m_globalScalingActiveDescription
TRUEnever evaluated
FALSEnever evaluated
|| m_screenFactorSet
m_screenFactorSetDescription
TRUEnever evaluated
FALSEnever evaluated
|| m_pixelDensityScalingActive
m_pixelDensityScalingActiveDescription
TRUEnever evaluated
FALSEnever evaluated
;
0
148 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(QGuiApplication::screens())>::type> _container_((QGuiApplication::screens())); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QScreen *screen = *_container_.i; _container_.control; _container_.control = 0)-
149 screen->d_func()->updateHighDpi();
never executed: screen->d_func()->updateHighDpi();
0
150}
never executed: end of block
0
151-
152static const char scaleFactorProperty[] = "_q_scaleFactor";-
153-
154-
155-
156-
157void QHighDpiScaling::setScreenFactor(QScreen *screen, qreal factor)-
158{-
159 if (!qFuzzyCompare(factor, qreal(1))
!qFuzzyCompare...tor, qreal(1))Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
160 m_screenFactorSet = true;-
161 m_active = true;-
162 }
never executed: end of block
0
163 screen->setProperty(scaleFactorProperty, QVariant(factor));-
164-
165-
166 if (screen->handle()
screen->handle()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
167 screen->d_func()->setPlatformScreen(screen->handle());
never executed: screen->d_func()->setPlatformScreen(screen->handle());
0
168}
never executed: end of block
0
169-
170QPoint QHighDpiScaling::mapPositionToNative(const QPoint &pos, const QPlatformScreen *platformScreen)-
171{-
172 if (!platformScreen
!platformScreenDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
173 return
never executed: return pos;
pos;
never executed: return pos;
0
174 const qreal scaleFactor = factor(platformScreen);-
175 const QPoint topLeft = platformScreen->geometry().topLeft();-
176 return
never executed: return (pos - topLeft) * scaleFactor + topLeft;
(pos - topLeft) * scaleFactor + topLeft;
never executed: return (pos - topLeft) * scaleFactor + topLeft;
0
177}-
178-
179QPoint QHighDpiScaling::mapPositionFromNative(const QPoint &pos, const QPlatformScreen *platformScreen)-
180{-
181 if (!platformScreen
!platformScreenDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
182 return
never executed: return pos;
pos;
never executed: return pos;
0
183 const qreal scaleFactor = factor(platformScreen);-
184 const QPoint topLeft = platformScreen->geometry().topLeft();-
185 return
never executed: return (pos - topLeft) / scaleFactor + topLeft;
(pos - topLeft) / scaleFactor + topLeft;
never executed: return (pos - topLeft) / scaleFactor + topLeft;
0
186}-
187-
188qreal QHighDpiScaling::screenSubfactor(const QPlatformScreen *screen)-
189{-
190 qreal factor = qreal(1.0);-
191 if (screen
screenDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
192 if (m_usePixelDensity
m_usePixelDensityDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
193 factor *= screen->pixelDensity();
never executed: factor *= screen->pixelDensity();
0
194 if (m_screenFactorSet
m_screenFactorSetDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
195 QVariant screenFactor = screen->screen()->property(scaleFactorProperty);-
196 if (screenFactor.isValid()
screenFactor.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
197 factor *= screenFactor.toReal();
never executed: factor *= screenFactor.toReal();
0
198 }
never executed: end of block
0
199 }
never executed: end of block
0
200 return
never executed: return factor;
factor;
never executed: return factor;
0
201}-
202-
203QDpi QHighDpiScaling::logicalDpi()-
204{-
205 return
never executed: return m_logicalDpi;
m_logicalDpi;
never executed: return m_logicalDpi;
0
206}-
207-
208qreal QHighDpiScaling::factor(const QScreen *screen)-
209{-
210-
211 if (!m_active
!m_activeDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
212 return
never executed: return qreal(1.0);
qreal(1.0);
never executed: return qreal(1.0);
0
213-
214-
215-
216 qreal factor = m_factor;-
217 if (screen
screenDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
218 factor *= screenSubfactor(screen->handle());
never executed: factor *= screenSubfactor(screen->handle());
0
219 return
never executed: return factor;
factor;
never executed: return factor;
0
220}-
221-
222qreal QHighDpiScaling::factor(const QPlatformScreen *platformScreen)-
223{-
224 if (!m_active
!m_activeDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
225 return
never executed: return qreal(1.0);
qreal(1.0);
never executed: return qreal(1.0);
0
226-
227 return
never executed: return m_factor * screenSubfactor(platformScreen);
m_factor * screenSubfactor(platformScreen);
never executed: return m_factor * screenSubfactor(platformScreen);
0
228}-
229-
230qreal QHighDpiScaling::factor(const QWindow *window)-
231{-
232 if (!m_active
!m_activeDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
233 return
never executed: return qreal(1.0);
qreal(1.0);
never executed: return qreal(1.0);
0
234-
235 return
never executed: return factor(window ? window->screen() : QGuiApplication::primaryScreen());
factor(window ? window->screen() : QGuiApplication::primaryScreen());
never executed: return factor(window ? window->screen() : QGuiApplication::primaryScreen());
0
236}-
237-
238QPoint QHighDpiScaling::origin(const QScreen *screen)-
239{-
240 return
never executed: return screen->geometry().topLeft();
screen->geometry().topLeft();
never executed: return screen->geometry().topLeft();
0
241}-
242-
243QPoint QHighDpiScaling::origin(const QPlatformScreen *platformScreen)-
244{-
245 return
never executed: return platformScreen->geometry().topLeft();
platformScreen->geometry().topLeft();
never executed: return platformScreen->geometry().topLeft();
0
246}-
247-
248-
249-
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9