diff options
author | Morten Johan Sørvig <morten.sorvig@qt.io> | 2021-02-24 00:06:26 +0100 |
---|---|---|
committer | Morten Johan Sørvig <morten.sorvig@qt.io> | 2021-03-02 13:36:38 +0000 |
commit | ee409e6f0cab4aa051f75f7c7116d4b607d137fc (patch) | |
tree | d819813aa70287a51d4a7e9695a034cdf1bd30c0 | |
parent | 9d80deb92f066dba6c2bfce98f5cc83304026c2b (diff) |
High-DPI: Set the minimum scale factor to 1
Avoid painting errors with dpr < 1, also for the PassThrough
mode.
This limits the minimum high-dpi scale factor to 1,
for the code path which determines the scale factor
based on screen DPI.
Pick-to: 6.1
Task-number: QTBUG-89948
Change-Id: I14b3f130f0ae141d5f05c87437f926a9f76d1dec
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
-rw-r--r-- | src/gui/kernel/qhighdpiscaling.cpp | 8 | ||||
-rw-r--r-- | tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp | 15 |
2 files changed, 18 insertions, 5 deletions
diff --git a/src/gui/kernel/qhighdpiscaling.cpp b/src/gui/kernel/qhighdpiscaling.cpp index a2ca58e4c2..5bc3f11b3d 100644 --- a/src/gui/kernel/qhighdpiscaling.cpp +++ b/src/gui/kernel/qhighdpiscaling.cpp @@ -436,11 +436,9 @@ qreal QHighDpiScaling::roundScaleFactor(qreal rawFactor) break; } - // Don't round down to to zero; clamp the minimum (rounded) factor to 1. - // This is not a common case but can happen if a display reports a very - // low DPI. - if (scaleFactorRoundingPolicy != Qt::HighDpiScaleFactorRoundingPolicy::PassThrough) - roundedFactor = qMax(roundedFactor, qreal(1)); + // Clamp the minimum factor to 1. Qt does not currently render + // correctly with factors less than 1. + roundedFactor = qMax(roundedFactor, qreal(1)); return roundedFactor; } diff --git a/tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp b/tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp index 09bf8439c8..512209ab73 100644 --- a/tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp +++ b/tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp @@ -49,6 +49,7 @@ private slots: void initTestCase(); void qhighdpiscaling_data(); void qhighdpiscaling(); + void minimumDpr(); void noscreens(); void screenDpiAndDpr_data(); void screenDpiAndDpr(); @@ -223,6 +224,20 @@ void tst_QHighDpi::screenDpiAndDpr() } } +void tst_QHighDpi::minimumDpr() +{ + QList<qreal> dpiValues { 40, 60, 95 }; + std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(dpiValues)); + for (QScreen *screen : app->screens()) { + // Qt does not currently support DPR values < 1. Make sure + // the minimum DPR value is 1, also when the screen reports + // a low DPI. + QCOMPARE(screen->devicePixelRatio(), 1); + QWindow window(screen); + QCOMPARE(window.devicePixelRatio(), 1); + } +} + void tst_QHighDpi::noscreens() { // Create application object with a no-screens configuration (should not crash) |