summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qhighdpiscaling.cpp2
-rw-r--r--tests/auto/gui/kernel/qhighdpiscaling/tst_qhighdpiscaling.cpp18
2 files changed, 20 insertions, 0 deletions
diff --git a/src/gui/kernel/qhighdpiscaling.cpp b/src/gui/kernel/qhighdpiscaling.cpp
index 0fea416404..64f1397771 100644
--- a/src/gui/kernel/qhighdpiscaling.cpp
+++ b/src/gui/kernel/qhighdpiscaling.cpp
@@ -456,6 +456,8 @@ QHighDpiScaling::ScaleAndOrigin QHighDpiScaling::scaleAndOrigin(const QPlatformS
{
if (!m_active)
return { qreal(1), QPoint() };
+ if (!platformScreen)
+ return { m_factor, QPoint() }; // the global factor
const QPlatformScreen *actualScreen = nativePosition ?
platformScreen->screenForPosition(*nativePosition) : platformScreen;
return { m_factor * screenSubfactor(actualScreen), actualScreen->geometry().topLeft() };
diff --git a/tests/auto/gui/kernel/qhighdpiscaling/tst_qhighdpiscaling.cpp b/tests/auto/gui/kernel/qhighdpiscaling/tst_qhighdpiscaling.cpp
index 969b2351ec..ec80c2d02c 100644
--- a/tests/auto/gui/kernel/qhighdpiscaling/tst_qhighdpiscaling.cpp
+++ b/tests/auto/gui/kernel/qhighdpiscaling/tst_qhighdpiscaling.cpp
@@ -36,6 +36,7 @@ class tst_QHighDpiScaling: public QObject
Q_OBJECT
private slots:
+ void factor();
void scale();
};
@@ -50,6 +51,23 @@ public:
QImage::Format format() const override { return QImage::Format_ARGB32_Premultiplied; }
};
+void tst_QHighDpiScaling::factor()
+{
+ QHighDpiScaling::setGlobalFactor(2);
+
+ // Verfy that QHighDpiScaling::factor() does not crash on nullptr contexts.
+ QPoint fakeNativePosition = QPoint(5, 5);
+ QPlatformScreen *screenContext = nullptr;
+ QVERIFY(QHighDpiScaling::factor(screenContext) >= 0);
+ QVERIFY(QHighDpiScaling::factor(screenContext, &fakeNativePosition) >= 0);
+ QPlatformScreen *platformScreenContext = nullptr;
+ QVERIFY(QHighDpiScaling::factor(platformScreenContext) >= 0);
+ QVERIFY(QHighDpiScaling::factor(platformScreenContext, &fakeNativePosition) >= 0);
+ QWindow *windowContext = nullptr;
+ QVERIFY(QHighDpiScaling::factor(windowContext) >= 0);
+ QVERIFY(QHighDpiScaling::factor(windowContext, &fakeNativePosition) >= 0);
+}
+
// QTBUG-77255: Test some scaling overloads
void tst_QHighDpiScaling::scale()
{