diff options
Diffstat (limited to 'tests/auto/quickcontrols/qquickninepatchimage/tst_qquickninepatchimage.cpp')
-rw-r--r-- | tests/auto/quickcontrols/qquickninepatchimage/tst_qquickninepatchimage.cpp | 72 |
1 files changed, 68 insertions, 4 deletions
diff --git a/tests/auto/quickcontrols/qquickninepatchimage/tst_qquickninepatchimage.cpp b/tests/auto/quickcontrols/qquickninepatchimage/tst_qquickninepatchimage.cpp index c1fb1f7264..7e0e974f23 100644 --- a/tests/auto/quickcontrols/qquickninepatchimage/tst_qquickninepatchimage.cpp +++ b/tests/auto/quickcontrols/qquickninepatchimage/tst_qquickninepatchimage.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <qtest.h> #include <QtTest/qsignalspy.h> @@ -11,8 +11,10 @@ #include <QtQuick/qquickview.h> #include <QtQuick/qquickitemgrabresult.h> #include <QtQuick/private/qquickimage_p.h> +#include <QtQuick/private/qquickimage_p_p.h> #include <QtQuickTestUtils/private/qmlutils_p.h> #include <QtQuickTestUtils/private/visualtestutils_p.h> +#include <QtGui/private/qrhi_p.h> using namespace QQuickVisualTestUtils; @@ -32,6 +34,8 @@ private slots: void inset(); void implicitSize_data(); void implicitSize(); + void hwCompressedImages_data(); + void hwCompressedImages(); }; static QImage grabItemToImage(QQuickItem *item) @@ -91,20 +95,25 @@ void tst_qquickninepatchimage::ninePatch() // Generate an image to compare against the actual 9-patch image. QImage generatedImage(size * dpr, ninePatchImageGrab.format()); + generatedImage.setDevicePixelRatio(dpr); generatedImage.fill(Qt::red); QImage blueRect(4 * dpr, 4 * dpr, ninePatchImageGrab.format()); + blueRect.setDevicePixelRatio(dpr); blueRect.fill(Qt::blue); + const QSizeF generatedPaintedSize = generatedImage.deviceIndependentSize(); + const QSizeF blueRectPaintedSize = blueRect.deviceIndependentSize(); + QPainter painter(&generatedImage); // Top-left painter.drawImage(0, 0, blueRect); // Top-right - painter.drawImage(generatedImage.width() - blueRect.width(), 0, blueRect); + painter.drawImage(generatedPaintedSize.width() - blueRectPaintedSize.width(), 0, blueRect); // Bottom-right - painter.drawImage(generatedImage.width() - blueRect.width(), generatedImage.height() - blueRect.height(), blueRect); + painter.drawImage(generatedPaintedSize.width() - blueRectPaintedSize.width(), generatedPaintedSize.height() - blueRectPaintedSize.height(), blueRect); // Bottom-left - painter.drawImage(0, generatedImage.height() - blueRect.height(), blueRect); + painter.drawImage(0, generatedPaintedSize.height() - blueRectPaintedSize.height(), blueRect); if ((QGuiApplication::platformName() == QLatin1String("offscreen")) || (QGuiApplication::platformName() == QLatin1String("minimal"))) @@ -230,6 +239,61 @@ void tst_qquickninepatchimage::implicitSize() QCOMPARE(ninePatchImage->implicitHeight(), implicitSize.height()); } +void tst_qquickninepatchimage::hwCompressedImages_data() +{ + QTest::addColumn<int>("dpr"); + QTest::addColumn<QString>("file"); + QTest::addColumn<QSize>("size"); + QTest::addColumn<QRhiTexture::Format>("format"); + + const struct TestFile { + QString name; + QSize size; + QRhiTexture::Format format; + } testFiles [] = { + { "o1_bc1.ktx", QSize(64, 64), QRhiTexture::BC1 }, + { "logo.pkm", QSize(256, 256), QRhiTexture::ETC2_RGB8 }, + { "qt4.astc", QSize(250, 200), QRhiTexture::ASTC_8x8 } + }; + + for (const TestFile &file : testFiles) { + for (int dpr = 1; dpr <= 4; ++dpr) + QTest::newRow(qPrintable(QString::fromLatin1("%1 DPR=%2").arg(file.name).arg(dpr))) << dpr << file.name << file.size << file.format; + } +} + +void tst_qquickninepatchimage::hwCompressedImages() +{ + QFETCH(int, dpr); + QFETCH(QString, file); + QFETCH(QSize, size); + QFETCH(QRhiTexture::Format, format); + + QHighDpiScaling::setGlobalFactor(dpr); + + QQuickView view(testFileUrl("ninepatchimage.qml")); + QCOMPARE(view.status(), QQuickView::Ready); + view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + + if (!QSGRendererInterface::isApiRhiBased(view.rendererInterface()->graphicsApi())) + QSKIP("Skipping due to using software backend"); + + QRhi *rhi = static_cast<QRhi *>(view.rendererInterface()->getResource(&view, QSGRendererInterface::RhiResource)); + if (!rhi->isTextureFormatSupported(format)) + QSKIP(qPrintable(QString::fromLatin1("%1 not supported, skip").arg(format))); + + QQuickImage *ninePatchImage = qobject_cast<QQuickImage *>(view.rootObject()); + QVERIFY(ninePatchImage); + ninePatchImage->setSource(testFileUrl(file)); + ninePatchImage->setSize(size); + QSignalSpy spy(&view, SIGNAL(afterSynchronizing())); + QTRY_VERIFY(spy.size() >= 1); + + QQuickImagePrivate *ninePatchImagePrivate = static_cast<QQuickImagePrivate *>(QQuickItemPrivate::get(ninePatchImage)); + QVERIFY(ninePatchImagePrivate->paintNode); +} + QTEST_MAIN(tst_qquickninepatchimage) #include "tst_qquickninepatchimage.moc" |