From 9a07da46d7207ba18cede5681232d12da332a7d5 Mon Sep 17 00:00:00 2001 From: Jaehak Lee Date: Tue, 25 Apr 2023 18:17:58 +0900 Subject: [PATCH] NinePatchImage: support the compressed texture image The compressed texture image is supported by qquickimage and the qquickninepatchimage is inherited by qquickimage. But the compressed texture is not shown when the source of qquickninepatchimage is set as compressed texture because the updatePaintNode of qquickninepatchimage only consider non-compressed texture. This patch is not intended to use the HW compressed image as an actual 9-patch image, but to display them using the super class qquickimage in the case of an HW compressed image other than a normal pixmap image. If the source is HW compressed textures such as ASTC, KTX, and PKM, we have to call updatePaintNode of QQuickImage before checking the validity of the pixmap image. (because nullptr is returned if pixmap image is not valid) The containers themselves (pkm, ktx) are universally supported but the compressed texture formats is up to the underlying 3D API implementation and may vary. So, if the format is not supported by RHI, we skip the test. Refer to QTBUG-113565 for a detailed discussion on texture formats. And when using the software backend, we also skip test cases. Fixes: QTBUG-113446 Change-Id: I2704f86e94b50b3c187eca359fdc1a69eb217811 Reviewed-by: Shawn Rutledge (cherry picked from commit ed69a9d4f3e889b05548e7cebe957afc3a3e577f) Reviewed-by: Qt Cherry-pick Bot --- .../qquickninepatchimage.cpp | 6 +- .../qquickninepatchimage/CMakeLists.txt | 6 +- .../qquickninepatchimage/data/logo.pkm | Bin 0 -> 32784 bytes .../qquickninepatchimage/data/o1_bc1.ktx | Bin 0 -> 2116 bytes .../qquickninepatchimage/data/qt4.astc | Bin 0 -> 12816 bytes .../tst_qquickninepatchimage.cpp | 59 ++++++++++++++++++ 6 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 tests/auto/quickcontrols/qquickninepatchimage/data/logo.pkm create mode 100644 tests/auto/quickcontrols/qquickninepatchimage/data/o1_bc1.ktx create mode 100644 tests/auto/quickcontrols/qquickninepatchimage/data/qt4.astc diff --git a/src/quickcontrolsimpl/qquickninepatchimage.cpp b/src/quickcontrolsimpl/qquickninepatchimage.cpp index 3f8a9e03e9..cc3869ded9 100644 --- a/src/quickcontrolsimpl/qquickninepatchimage.cpp +++ b/src/quickcontrolsimpl/qquickninepatchimage.cpp @@ -443,6 +443,9 @@ QSGNode *QQuickNinePatchImage::updatePaintNode(QSGNode *oldNode, UpdatePaintNode d->resetNode = false; } + if (d->ninePatch.isNull()) + return QQuickImage::updatePaintNode(oldNode, data); + QSizeF sz = size(); QImage image = d->pix.image(); if (!sz.isValid() || image.isNull()) { @@ -452,9 +455,6 @@ QSGNode *QQuickNinePatchImage::updatePaintNode(QSGNode *oldNode, UpdatePaintNode return nullptr; } - if (d->ninePatch.isNull()) - return QQuickImage::updatePaintNode(oldNode, data); - QQuickNinePatchNode *patchNode = static_cast(oldNode); if (!patchNode) patchNode = new QQuickNinePatchNode; diff --git a/tests/auto/quickcontrols/qquickninepatchimage/CMakeLists.txt b/tests/auto/quickcontrols/qquickninepatchimage/CMakeLists.txt index 0523912506..e8a4e733b8 100644 --- a/tests/auto/quickcontrols/qquickninepatchimage/CMakeLists.txt +++ b/tests/auto/quickcontrols/qquickninepatchimage/CMakeLists.txt @@ -16,11 +16,7 @@ endif() # Collect test data file(GLOB_RECURSE test_data_glob RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/data/*.qml) -list(APPEND test_data ${test_data_glob}) -file(GLOB_RECURSE test_data_glob - RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/data/*.png) + ${CMAKE_CURRENT_SOURCE_DIR}/data/*) list(APPEND test_data ${test_data_glob}) qt_internal_add_test(tst_qquickninepatchimage diff --git a/tests/auto/quickcontrols/qquickninepatchimage/data/logo.pkm b/tests/auto/quickcontrols/qquickninepatchimage/data/logo.pkm new file mode 100644 index 0000000000000000000000000000000000000000..c0987c5c36f7778d9cd13bb58ea06419dc157165 GIT binary patch literal 32784 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 literal 0 HcmV?d00001 diff --git a/tests/auto/quickcontrols/qquickninepatchimage/data/o1_bc1.ktx b/tests/auto/quickcontrols/qquickninepatchimage/data/o1_bc1.ktx new file mode 100644 index 0000000000000000000000000000000000000000..d61194a745b0c41921f36858163bccaa435c3c19 GIT binary patch literal 2116 zcmaJ?ZD>&>%< zqU4KbjkN{>TWkEFBP2f4*XVi163^?WHO5%vwAP?8+|ZyMR0(&eb!wdTh9}G0%ZkES zSNU>@_Fpb_mS}%x>0%KfaBv}K#O!zt@Yzx_YU<=nS6QVd#*&jSiU2Y?+6iS7$Tn?z*&BaHm{Au zk8;uX0{WdV7W6F*gYj^%6InvI5!XEtbu(VB4Zrs{-dT{OK=(29J;qpX#rGomUW>lx z*-Q}`C*ooM=hZyOFJfRatM4|RHH?B2^Lb%iP8#tvb+%X5d*SLnTq9mT2_Q+Yz@qHu zB&lx#zpKXa?_=U1+#TpDlgQhl%O%2>PHk&}>*MK*R{?^L>A(4`cctX%W%6ZFzITY`(F>=BoesClT7++R2LPNk4)^WQ zzEv( z_Fa5%=F@!+Cjjx|I7Wz{`gCs_})`3*P@$x#984*%wzMgIC4 zTD8@K^iG=}PzUkaNc@!dy$=A8K6nLj1bupN=Kd(QF>!x%;Rqg_esCmzb_*_0N>R8U;UXvc{&ur8T-l$ z!C)Zp$y)#(&&c)rqvm;UuA zIKyXJ2{|t2&~;7w+7ZQbEQ*5VKLB6FOhL%e{bbxg{{!J(JMV>Y{Dgxgj|*wK*Mziu z80(ArxX6Jfm&=iO>Z=1QCVr~CGJlWwX};yDf#wNJ$Y1i|IS)Sc z0l#``ba2c2#aMSh=$Ct_@5E1YoNZ4v)BjMkIon9So@=!0e>%UA%S_RHXQqTp3=?Fr z>#;$A<>?O8(F<+;)J5sL#Jd(Qm3N}Pwr7Cv|FzGF$|}Ams=gbDFwho<~TS=Tl>7Uotvo9;JR}kERZgKdA%RJyd6AC*M!=O?A^g exkueeQFrB+nWK19t)7BLIK^fQJvg9{eyc{$s>| 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 H^y2>yn #include #include +#include #include #include +#include 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) @@ -230,6 +234,61 @@ void tst_qquickninepatchimage::implicitSize() QCOMPARE(ninePatchImage->implicitHeight(), implicitSize.height()); } +void tst_qquickninepatchimage::hwCompressedImages_data() +{ + QTest::addColumn("dpr"); + QTest::addColumn("file"); + QTest::addColumn("size"); + QTest::addColumn("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(view.rendererInterface()->getResource(&view, QSGRendererInterface::RhiResource)); + if (!rhi->isTextureFormatSupported(format)) + QSKIP(qPrintable(QString::fromLatin1("%1 not supported, skip").arg(format))); + + QQuickImage *ninePatchImage = qobject_cast(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(QQuickItemPrivate::get(ninePatchImage)); + QVERIFY(ninePatchImagePrivate->paintNode); +} + QTEST_MAIN(tst_qquickninepatchimage) #include "tst_qquickninepatchimage.moc"