diff options
author | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2019-06-14 13:08:56 +0200 |
---|---|---|
committer | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2019-06-14 13:08:56 +0200 |
commit | 3797704c4ff0d91f544efa791973eced07c3ef02 (patch) | |
tree | 91c0c44916a5f651d4f826e7b43265b7cedaf02d | |
parent | 2c9ba8474681abbd4c9eb87e8030e386b631e921 (diff) |
Generalize image file name @2x suffix handling to higher scale factors
@3x is in use on iOS already, so extend the handling in QImageReader
to all single-digit factors, like QIcon does.
Fixes: QTBUG-76273
Change-Id: Ic9442731c0549dbe8f797e1ddb1a09d8447e8441
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
-rw-r--r-- | src/gui/image/qimagereader.cpp | 10 | ||||
-rw-r--r-- | tests/auto/gui/image/qimagereader/images/qticon16.png | bin | 0 -> 1884 bytes | |||
-rw-r--r-- | tests/auto/gui/image/qimagereader/images/qticon16@2x.png | bin | 0 -> 3187 bytes | |||
-rw-r--r-- | tests/auto/gui/image/qimagereader/images/qticon16@3x.png | bin | 0 -> 5307 bytes | |||
-rw-r--r-- | tests/auto/gui/image/qimagereader/tst_qimagereader.cpp | 25 |
5 files changed, 31 insertions, 4 deletions
diff --git a/src/gui/image/qimagereader.cpp b/src/gui/image/qimagereader.cpp index 0fb1d808e5..0c75196612 100644 --- a/src/gui/image/qimagereader.cpp +++ b/src/gui/image/qimagereader.cpp @@ -1319,10 +1319,12 @@ bool QImageReader::read(QImage *image) } } - // successful read; check for "@2x" file name suffix and set device pixel ratio. - static bool disable2xImageLoading = !qEnvironmentVariableIsEmpty("QT_HIGHDPI_DISABLE_2X_IMAGE_LOADING"); - if (!disable2xImageLoading && QFileInfo(fileName()).baseName().endsWith(QLatin1String("@2x"))) { - image->setDevicePixelRatio(2.0); + // successful read; check for "@Nx" file name suffix and set device pixel ratio. + static bool disableNxImageLoading = !qEnvironmentVariableIsEmpty("QT_HIGHDPI_DISABLE_2X_IMAGE_LOADING"); + if (!disableNxImageLoading) { + const QByteArray suffix = QFileInfo(fileName()).baseName().right(3).toLatin1(); + if (suffix.length() == 3 && suffix[0] == '@' && suffix[1] >= '2' && suffix[1] <= '9' && suffix[2] == 'x') + image->setDevicePixelRatio(suffix[1] - '0'); } if (autoTransform()) qt_imageTransform(*image, transformation()); diff --git a/tests/auto/gui/image/qimagereader/images/qticon16.png b/tests/auto/gui/image/qimagereader/images/qticon16.png Binary files differnew file mode 100644 index 0000000000..b6b01a4d64 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qticon16.png diff --git a/tests/auto/gui/image/qimagereader/images/qticon16@2x.png b/tests/auto/gui/image/qimagereader/images/qticon16@2x.png Binary files differnew file mode 100644 index 0000000000..205461daf0 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qticon16@2x.png diff --git a/tests/auto/gui/image/qimagereader/images/qticon16@3x.png b/tests/auto/gui/image/qimagereader/images/qticon16@3x.png Binary files differnew file mode 100644 index 0000000000..de92658241 --- /dev/null +++ b/tests/auto/gui/image/qimagereader/images/qticon16@3x.png diff --git a/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp b/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp index c2ec5b8925..1eee2f273e 100644 --- a/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp +++ b/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp @@ -164,6 +164,9 @@ private slots: void preserveTexts_data(); void preserveTexts(); + void devicePixelRatio_data(); + void devicePixelRatio(); + private: QString prefix; QTemporaryDir m_temporaryDir; @@ -1976,6 +1979,28 @@ void tst_QImageReader::preserveTexts() QCOMPARE(r.text(key3), text3.simplified()); } +void tst_QImageReader::devicePixelRatio_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QSize>("size"); + QTest::addColumn<qreal>("dpr"); + + QTest::newRow("1x") << "qticon16.png" << QSize(16, 16) << 1.0; + QTest::newRow("2x") << "qticon16@2x.png" << QSize(32, 32) << 2.0; + QTest::newRow("3x") << "qticon16@3x.png" << QSize(48, 48) << 3.0; +} + +void tst_QImageReader::devicePixelRatio() +{ + QFETCH(QString, fileName); + QFETCH(QSize, size); + QFETCH(qreal, dpr); + + QImageReader r(":/images/" + fileName); + QImage img = r.read(); + QCOMPARE(img.size(), size); + QCOMPARE(img.devicePixelRatio(), dpr); +} QTEST_MAIN(tst_QImageReader) #include "tst_qimagereader.moc" |