From 08992261af8c5581ef44ce7b97084d98c38bb25e Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 28 Feb 2023 14:22:39 +0200 Subject: [PATCH] QmlDesigner: Add a separate placeholder icon for ktx textures Fixes: QDS-9140 Change-Id: Ife2d3067860be2ae19e3c8431f1b756544b16975 Reviewed-by: Mahmoud Badri --- .../assetslibrary/assetslibrary.qrc | 3 +++ .../assetslibraryiconprovider.cpp | 4 ++-- .../assetslibrary/images/asset_ktx.png | Bin 0 -> 1505 bytes .../assetslibrary/images/asset_ktx@2x.png | Bin 0 -> 2594 bytes .../assetslibrary/images/asset_ktx_128.png | Bin 0 -> 3257 bytes .../materialbrowser/materialbrowserwidget.cpp | 2 ++ .../propertyeditor/assetimageprovider.cpp | 20 ++++++++++++++++++ .../textureeditor/images/texture_ktx.png | Bin 0 -> 3706 bytes .../textureeditor/images/texture_ktx@2x.png | Bin 0 -> 6625 bytes .../textureeditor/textureeditor.qrc | 2 ++ 10 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 src/plugins/qmldesigner/components/assetslibrary/images/asset_ktx.png create mode 100644 src/plugins/qmldesigner/components/assetslibrary/images/asset_ktx@2x.png create mode 100644 src/plugins/qmldesigner/components/assetslibrary/images/asset_ktx_128.png create mode 100644 src/plugins/qmldesigner/components/textureeditor/images/texture_ktx.png create mode 100644 src/plugins/qmldesigner/components/textureeditor/images/texture_ktx@2x.png diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrary.qrc b/src/plugins/qmldesigner/components/assetslibrary/assetslibrary.qrc index 26b4250d0ab..fb4255cdf6f 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrary.qrc +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrary.qrc @@ -19,5 +19,8 @@ images/assets_default_128.png images/asset_effectClass_128.png images/asset_effectExported_128.png + images/asset_ktx.png + images/asset_ktx@2x.png + images/asset_ktx_128.png diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibraryiconprovider.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibraryiconprovider.cpp index d3a0d0a72b9..ef331f0e0f8 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibraryiconprovider.cpp +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibraryiconprovider.cpp @@ -92,8 +92,8 @@ QPair AssetsLibraryIconProvider::fetchPixmap(const QString &id, return {pixmap, size}; } else if (asset.isKtxFile()) { qint64 size = QFileInfo(id).size(); - // TODO: Return ktx specific default image once available (QDS-9140) - return {{}, size}; + QString filePath = Utils::StyleHelper::dpiSpecificImageFile(":/AssetsLibrary/images/asset_ktx.png"); + return {QPixmap{filePath}, size}; } else { QString type; if (asset.isShader()) diff --git a/src/plugins/qmldesigner/components/assetslibrary/images/asset_ktx.png b/src/plugins/qmldesigner/components/assetslibrary/images/asset_ktx.png new file mode 100644 index 0000000000000000000000000000000000000000..077b2f3d8d229e35f03c1784078663315004d041 GIT binary patch literal 1505 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxObv;%xXTp1V`mW_hZ5FjE1 zqGaV77#J9Klmz(&GcYnSv#_$Ub8vET^YHTV3kV7ci-?MeOG?YgDkv$dsH&-JXliNe z=;<4pnp;@g*gCtoy19FL`S|(=1O^3%gocGjL`KEL#wR2ur=+E4WM<{&6%-Z~mzGsl zRoB$kH8wT3wsmxM_w-GfI%Cef`3n{;Ub1xA@)avruUWf(!=^3Uw(r=vYxkbL`}Q9= zc;xtrlc&#|J$L@X#Y>m3T)T1W&fR+t9zJ^f^x5;*Z{EIp|Ka1O&tJZN`|>u8n-tjz^;5BUq>)I5}%*mc1QKErC(*jQh1$laU zilll@Q&I`pruO^m-_O4kji=4DPJdS7xBUC^=QZ#D&MBV%eBbkZ;w6O-=QCLB{U=m$ zWQiPSv0TN>Gb%T$Z+Hsa@GW-rixaLquKD2JIVoNS7hdDrk`vBN@3NnH&qg?7uj2&P zSnnwBistY&PZ=#2B(pWx?W4bUuGdk+Uqq*&yRU`Mwsr)xs@oUNZ#h+zX`!yAG&#}(h zn_+Uh#&q4p`Fl%)b#6(--w{y^n>6|2YPs;+JHw*RNBl?`C-DGj;$$qr7Gh6 zhXobbd9)Y4XPC)-e1Yp`tGi}rHRn19?97wve4?)JejrUw?NjFih8s`1s*H|{GVFKs z`nZna&5VaBE3_HhcK2FaiR9nPz9SfLrTFQB0=5JB6N2VwGgzlv3MPsFNw-(u&!{Sp W%^El*o0EZofx*+&&t;ucLK6VG;tSjW literal 0 HcmV?d00001 diff --git a/src/plugins/qmldesigner/components/assetslibrary/images/asset_ktx@2x.png b/src/plugins/qmldesigner/components/assetslibrary/images/asset_ktx@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3dca205a4f16701309265b84e39e4cefefeaeb6c GIT binary patch literal 2594 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4rT@hhO2JvTnr3My90beTp1V`mW_hZ5Ez0X z;Cr-8h=GCOMM;ofFaskKGYcylI|nBhHxDl#zkr~Su!yLbxP+vXw2Z90f})bLimIBr zhNhObuAaVup|OdnnYo3fm9>qnoxOvjvx}>nyN9Qjw~w!%e_&8>NO(kKRCG*iTzo=e zQgTXaT6$(yc5YsNK~Zr@X<2ziWmR=eZC!msV^ecWYkNm$cW+<+go%?TPnkA-#>`o> z=ggfqf5E~Yz*tBKqw(UE1?%KU)@4o#94jwvuECr+L|d+z*& ziDn}v7)W-FPZa=zl>r-^RHg6 z&A%Ic)%MWiMZpb|*%bIsX&(45eIfD9oTsbp=KW9b_h-1)v321GrQ3!tzofC3L`!e) z`yO-sOvA)>MvkfZw$rr};|Cm3_yIRxW$oSy;KEc3yNe$_< zcqe>j-(YiYJwNlpgJ)SQI3wQnU-xC)w#<}&L9A@Z7Eh6NEP0+rjZ>`>v3pa5%treD*PcA&gP;Xl^!^Ki6Lm=<=&8bEUtPAReQqvQ>k{(-6 zn5>mhu*rJr6gCkxvwM8acNp4Cm1;FNzO|`P33aef@DWPYPDtAlb-{bmmj2e2OhuDt zI$aV-h*@H$=a88wpJ{kIIBr?$2XCQN#R>B3c-FHo*ivA(@J$F~KGR=m4*%cWr{28& z@-lMg7zIU}M`+4(TkdL_TU|~ATf3tmZZ~UnpzrOBGyEC!>ea>{RO~0io3>>d- z=6m%?#Z$JvZEpH(mn+qseaUmpKN;(|HL!P$?E11&$asJvXXH$doQEAxY=C#9Ph z*sHAX6{ImA%-px))vCV-%5_y4L68f<=V zdfWfOSKXaqsjXaxeZ79Z>dK?P1F8=j3+ymjG)LfMOl KN>E4yWP;yZrut{yJ&O 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.defaultImage()); + + QMetaObject::invokeMethod( + response.get(), + [response = QPointer(response.get()), requestedSize] { + QImage ktxImage; + ktxImage.load(Utils::StyleHelper::dpiSpecificImageFile(":/textureeditor/images/texture_ktx.png")); + if (ktxImage.isNull()) + ktxImage = response->image(); + if (requestedSize.isValid()) + response->setImage(ktxImage.scaled(requestedSize, Qt::KeepAspectRatio)); + else + response->setImage(ktxImage); + }, + Qt::QueuedConnection); + + return response.release(); + } + return m_imageCacheProvider.requestImageResponse(id, requestedSize); } diff --git a/src/plugins/qmldesigner/components/textureeditor/images/texture_ktx.png b/src/plugins/qmldesigner/components/textureeditor/images/texture_ktx.png new file mode 100644 index 0000000000000000000000000000000000000000..cad32f6114f79647173e28037c0e039a47f382f7 GIT binary patch literal 3706 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 CK$jf= literal 0 HcmV?d00001 diff --git a/src/plugins/qmldesigner/components/textureeditor/images/texture_ktx@2x.png b/src/plugins/qmldesigner/components/textureeditor/images/texture_ktx@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..015ae045d758f5dfed385315c905a30ff73e05e7 GIT binary patch literal 6625 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 images/texture_default.png images/texture_default@2x.png + images/texture_ktx.png + images/texture_ktx@2x.png