aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quickcontrols/qquickninepatchimage/tst_qquickninepatchimage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/quickcontrols/qquickninepatchimage/tst_qquickninepatchimage.cpp')
-rw-r--r--tests/auto/quickcontrols/qquickninepatchimage/tst_qquickninepatchimage.cpp72
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"