From 00f2d1a09bf9bb2d6fb9be4bdd12fa8229a11def Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Wed, 29 Jul 2020 23:35:47 +0200 Subject: [PATCH] Establish baseline for QIcon test on dpr > 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After enabling Qt::AA_UseHighDpiPixmaps, QIcon::pixmap() now returns pixmaps larger than the requested size on devicePixelRatio > 1 screens. Adapt tests to account for this changed behavior. Skip tests where it’s unclear what the the expected behavior is, or where the test logic does not apply to dpr > 1. This gives a clearer indication of where we are (39 passed, 0 failed, 9 skipped), and enables using the qicon test to catch regressions also when running at dpr > 1. Remove the "lowdpi" testcase flags from the qmake and cmake project files. Change-Id: Ia7ce722ae356fc496a91b54e9f5d590d13b9df62 Reviewed-by: Tor Arne Vestbø --- tests/auto/gui/image/qicon/CMakeLists.txt | 3 +- tests/auto/gui/image/qicon/qicon.pro | 2 +- .../images/standardbutton-open-64.png | Bin 0 -> 5182 bytes .../images/standardbutton-save-64.png | Bin 0 -> 4286 bytes tests/auto/gui/image/qicon/tst_qicon.cpp | 90 +++++++++++++----- tests/auto/gui/image/qicon/tst_qicon.qrc | 2 + 6 files changed, 71 insertions(+), 26 deletions(-) create mode 100644 tests/auto/gui/image/qicon/styles/commonstyle/images/standardbutton-open-64.png create mode 100644 tests/auto/gui/image/qicon/styles/commonstyle/images/standardbutton-save-64.png diff --git a/tests/auto/gui/image/qicon/CMakeLists.txt b/tests/auto/gui/image/qicon/CMakeLists.txt index a419f9ba57..48ec1c348c 100644 --- a/tests/auto/gui/image/qicon/CMakeLists.txt +++ b/tests/auto/gui/image/qicon/CMakeLists.txt @@ -31,7 +31,6 @@ file(GLOB_RECURSE test_data_glob list(APPEND test_data ${test_data_glob}) qt_add_test(tst_qicon - LOWDPI # special case SOURCES tst_qicon.cpp PUBLIC_LIBRARIES @@ -60,9 +59,11 @@ set(tst_qicon_resource_files "./styles/commonstyle/images/standardbutton-open-128.png" "./styles/commonstyle/images/standardbutton-open-16.png" "./styles/commonstyle/images/standardbutton-open-32.png" + "./styles/commonstyle/images/standardbutton-open-64.png" "./styles/commonstyle/images/standardbutton-save-128.png" "./styles/commonstyle/images/standardbutton-save-16.png" "./styles/commonstyle/images/standardbutton-save-32.png" + "./styles/commonstyle/images/standardbutton-save-64.png" "image.png" "rect.png" "tst_qicon.cpp" diff --git a/tests/auto/gui/image/qicon/qicon.pro b/tests/auto/gui/image/qicon/qicon.pro index 3123f236d5..c96f0555ad 100644 --- a/tests/auto/gui/image/qicon/qicon.pro +++ b/tests/auto/gui/image/qicon/qicon.pro @@ -1,4 +1,4 @@ -CONFIG += testcase testcase_lowdpi +CONFIG += testcase TARGET = tst_qicon QT += testlib diff --git a/tests/auto/gui/image/qicon/styles/commonstyle/images/standardbutton-open-64.png b/tests/auto/gui/image/qicon/styles/commonstyle/images/standardbutton-open-64.png new file mode 100644 index 0000000000000000000000000000000000000000..25c41d737d11bfb3cb01521b026a049249be8ea1 GIT binary patch literal 5182 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 literal 0 HcmV?d00001 diff --git a/tests/auto/gui/image/qicon/styles/commonstyle/images/standardbutton-save-64.png b/tests/auto/gui/image/qicon/styles/commonstyle/images/standardbutton-save-64.png new file mode 100644 index 0000000000000000000000000000000000000000..467dd23e3ce0ca91251877f6490b5f169a320c8d GIT binary patch literal 4286 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 PJ{7cX>8Y2iVuJnyXyeR! literal 0 HcmV?d00001 diff --git a/tests/auto/gui/image/qicon/tst_qicon.cpp b/tests/auto/gui/image/qicon/tst_qicon.cpp index b1a4e4312f..c03ca32ac3 100644 --- a/tests/auto/gui/image/qicon/tst_qicon.cpp +++ b/tests/auto/gui/image/qicon/tst_qicon.cpp @@ -134,17 +134,32 @@ void tst_QIcon::actualSize() QFETCH(QSize, argument); QFETCH(QSize, result); + // Skip two corner cases + if (qApp->devicePixelRatio() > 1 && (qstrcmp(QTest::currentDataTag(), "resource9") == 0 + || qstrcmp(QTest::currentDataTag(), "external9") == 0)) + QSKIP("Behavior is unspecified for devicePixelRatio > 1", QTest::QSkipAll); + + auto expectedDeviceSize = [](QSize deviceIndependentExpectedSize, QSize maxSourceImageSize) -> QSize { + qreal dpr = qApp->devicePixelRatio(); + return QSize(qMin(int(deviceIndependentExpectedSize.width() * dpr), maxSourceImageSize.width()), + qMin(int(deviceIndependentExpectedSize.height() * dpr), maxSourceImageSize.height())); + }; + + QSize sourceSize = QImage(source).size(); + QSize deviceIndependentSize = result; + QSize deviceSize = expectedDeviceSize(result, sourceSize); + { QPixmap pixmap(source); QIcon icon(pixmap); - QCOMPARE(icon.actualSize(argument), result); - QCOMPARE(icon.pixmap(argument).size(), result); + QCOMPARE(icon.actualSize(argument), deviceIndependentSize); + QCOMPARE(icon.pixmap(argument).size(), deviceSize); } { QIcon icon(source); - QCOMPARE(icon.actualSize(argument), result); - QCOMPARE(icon.pixmap(argument).size(), result); + QCOMPARE(icon.actualSize(argument), deviceIndependentSize); + QCOMPARE(icon.pixmap(argument).size(), deviceSize); } } @@ -167,6 +182,9 @@ void tst_QIcon::actualSize2_data() void tst_QIcon::actualSize2() { + if (qApp->devicePixelRatio() > 1) + QSKIP("Behavior is unspecified for devicePixelRatio > 1", QTest::SkipAll); + QIcon icon; icon.addPixmap(m_pngImageFileName); icon.addPixmap(m_pngRectFileName); @@ -380,7 +398,11 @@ void tst_QIcon::detach() img1 = icon1.pixmap(32, 32).toImage(); img2 = icon2.pixmap(32, 32).toImage(); - QCOMPARE(img1, img2); + + if (qApp->devicePixelRatio() > 1) + QVERIFY(img1 != img2); // we get an e.g. 64x64 image in dpr=2 displays + else + QCOMPARE(img1, img2); } void tst_QIcon::addFile() @@ -388,23 +410,41 @@ void tst_QIcon::addFile() QIcon icon; icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-open-16.png")); icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-open-32.png")); + icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-open-64.png")); icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-open-128.png")); icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-save-16.png"), QSize(), QIcon::Selected); icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-save-32.png"), QSize(), QIcon::Selected); + icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-save-64.png"), QSize(), QIcon::Selected); icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-save-128.png"), QSize(), QIcon::Selected); - QVERIFY(icon.pixmap(16, QIcon::Normal).toImage() == - QPixmap(QLatin1String(":/styles/commonstyle/images/standardbutton-open-16.png")).toImage()); - QVERIFY(icon.pixmap(32, QIcon::Normal).toImage() == - QPixmap(QLatin1String(":/styles/commonstyle/images/standardbutton-open-32.png")).toImage()); - QVERIFY(icon.pixmap(128, QIcon::Normal).toImage() == - QPixmap(QLatin1String(":/styles/commonstyle/images/standardbutton-open-128.png")).toImage()); - QVERIFY(icon.pixmap(16, QIcon::Selected).toImage() == - QPixmap(QLatin1String(":/styles/commonstyle/images/standardbutton-save-16.png")).toImage()); - QVERIFY(icon.pixmap(32, QIcon::Selected).toImage() == - QPixmap(QLatin1String(":/styles/commonstyle/images/standardbutton-save-32.png")).toImage()); - QVERIFY(icon.pixmap(128, QIcon::Selected).toImage() == - QPixmap(QLatin1String(":/styles/commonstyle/images/standardbutton-save-128.png")).toImage()); + const int maxImageSize = 128; + + auto expectedHighDpiImage = [=](int deviceIndependentSize, const QString &imagePathTemplate) -> QImage { + const int expectedImageSize = qMin(maxImageSize, deviceIndependentSize * qCeil(qApp->devicePixelRatio())); + const int expectedImageDpr = expectedImageSize / deviceIndependentSize; + const QString path = imagePathTemplate.arg(expectedImageSize); + QPixmap image(path); + image.setDevicePixelRatio(expectedImageDpr); + return image.toImage(); + }; + + QCOMPARE(icon.pixmap(16, QIcon::Normal).toImage(), + expectedHighDpiImage(16, ":/styles/commonstyle/images/standardbutton-open-%1.png")); + QCOMPARE(icon.pixmap(32, QIcon::Normal).toImage(), + expectedHighDpiImage(32, ":/styles/commonstyle/images/standardbutton-open-%1.png")); + QCOMPARE(icon.pixmap(64, QIcon::Normal).toImage(), + expectedHighDpiImage(64, ":/styles/commonstyle/images/standardbutton-open-%1.png")); + QCOMPARE(icon.pixmap(128, QIcon::Normal).toImage(), + expectedHighDpiImage(128, ":/styles/commonstyle/images/standardbutton-open-%1.png")); + + QCOMPARE(icon.pixmap(16, QIcon::Selected).toImage(), + expectedHighDpiImage(16, ":/styles/commonstyle/images/standardbutton-save-%1.png")); + QCOMPARE(icon.pixmap(32, QIcon::Selected).toImage(), + expectedHighDpiImage(32, ":/styles/commonstyle/images/standardbutton-save-%1.png")); + QCOMPARE(icon.pixmap(64, QIcon::Selected).toImage(), + expectedHighDpiImage(64, ":/styles/commonstyle/images/standardbutton-save-%1.png")); + QCOMPARE(icon.pixmap(128, QIcon::Selected).toImage(), + expectedHighDpiImage(128, ":/styles/commonstyle/images/standardbutton-save-%1.png")); } static bool sizeLess(const QSize &a, const QSize &b) @@ -605,13 +645,15 @@ void tst_QIcon::fromTheme() noIcon = QIcon::fromTheme("svg-icon", abIcon); QVERIFY(!noIcon.availableSizes().isEmpty()); - // Pixmaps should be no larger than the requested size (QTBUG-17953) - QCOMPARE(appointmentIcon.pixmap(22).size(), QSize(22, 22)); // exact - QCOMPARE(appointmentIcon.pixmap(32).size(), QSize(32, 32)); // exact - QCOMPARE(appointmentIcon.pixmap(48).size(), QSize(32, 32)); // smaller - QCOMPARE(appointmentIcon.pixmap(16).size(), QSize(16, 16)); // scaled down - QCOMPARE(appointmentIcon.pixmap(8).size(), QSize(8, 8)); // scaled down - QCOMPARE(appointmentIcon.pixmap(16).size(), QSize(16, 16)); // scaled down + // Pixmaps should be no larger than the requested size (for devicePixelRatio 1) (QTBUG-17953) + if (qApp->devicePixelRatio() == 1) { + QCOMPARE(appointmentIcon.pixmap(22).size(), QSize(22, 22)); // exact + QCOMPARE(appointmentIcon.pixmap(32).size(), QSize(32, 32)); // exact + QCOMPARE(appointmentIcon.pixmap(48).size(), QSize(32, 32)); // smaller + QCOMPARE(appointmentIcon.pixmap(16).size(), QSize(16, 16)); // scaled down + QCOMPARE(appointmentIcon.pixmap(8).size(), QSize(8, 8)); // scaled down + QCOMPARE(appointmentIcon.pixmap(16).size(), QSize(16, 16)); // scaled down + } QByteArray ba; // write to QByteArray diff --git a/tests/auto/gui/image/qicon/tst_qicon.qrc b/tests/auto/gui/image/qicon/tst_qicon.qrc index 4b347ec88c..23a6801e38 100644 --- a/tests/auto/gui/image/qicon/tst_qicon.qrc +++ b/tests/auto/gui/image/qicon/tst_qicon.qrc @@ -21,9 +21,11 @@ ./icons/themeparent/scalable/actions/appointment-new.svg ./styles/commonstyle/images/standardbutton-open-16.png ./styles/commonstyle/images/standardbutton-open-32.png +./styles/commonstyle/images/standardbutton-open-64.png ./styles/commonstyle/images/standardbutton-open-128.png ./styles/commonstyle/images/standardbutton-save-16.png ./styles/commonstyle/images/standardbutton-save-32.png +./styles/commonstyle/images/standardbutton-save-64.png ./styles/commonstyle/images/standardbutton-save-128.png