From 47714c38c6b899d4fac4eb1b2ac042c4337dd3aa Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 5 Oct 2020 13:23:54 +0300 Subject: [PATCH] QmlDesigner: Return placeholder preview image for non-visual components Preview image is returned when a 2D item render results in a blank image. Also improved device pixel ratio handling. No longer always render preview at 2x ratio, if not needed. Change-Id: I67b7563dffea523ea85be23b6a0e8b802c0f03fb Fixes: QDS-2893 Reviewed-by: Mahmoud Badri --- .../qmlpuppet/images/non-visual-component.png | Bin 0 -> 3311 bytes .../images/non-visual-component@2x.png | Bin 0 -> 7260 bytes .../qt5informationnodeinstanceserver.cpp | 31 ++++++++++++++++-- share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc | 2 ++ .../instances/nodeinstanceview.cpp | 31 +++++++++--------- 5 files changed, 47 insertions(+), 17 deletions(-) create mode 100644 share/qtcreator/qml/qmlpuppet/images/non-visual-component.png create mode 100644 share/qtcreator/qml/qmlpuppet/images/non-visual-component@2x.png diff --git a/share/qtcreator/qml/qmlpuppet/images/non-visual-component.png b/share/qtcreator/qml/qmlpuppet/images/non-visual-component.png new file mode 100644 index 0000000000000000000000000000000000000000..f66e2b8b114ad4f5fa8dcb9582cab218cfb5f1b5 GIT binary patch literal 3311 zcmeAS@N?(olHy`uVBq!ia0y~yV3-EN9Bd2>3^t5~j~Ezuwt2cZhE&XXJ2(Htw5zhm z_gDYg+*K05H|5`iL-RDYeN9@Ry~6bToFKzv5{;evR%{W=*jw_DBk;;}?S+xE^hJbk z#T}h;L^hYjuyt>N+au!>CtMOGb=pmfjm}+uf9dq^o#%G`n_Il@{?E^i>`(Ts|82Fu z_+9_=UGIwLezv~vr%}OrY&7fk*N8ns^#?!Z;_rVrY23{m%<_hG*$J z*G)L8ROJym;i=ZdqnngN9jA4B#I0!yie>ts_4l_WLvma4mFBko3{42duQ+IZ(IQmI5bmf^RPo2&r@hXO{eDmaKSI`>8 zrCLWPY>BzpdDL-Lkj}|dqEjR0EYUhTWl7AkQ*5rzEB`$Y)?%HywWsCU!X!I~(vBvL zsx@svwY(3mJ9TWgZ7Y-1e5%j5hxLKg;lztyVh(nTHifVTor-7p5zJM@svG7JB)UW? zd_z*JMyMlK5vyj{i6GGey4nsu*@ANc4!B zc=g7h39A&;c1CnhofN{l@x;-vH6ly3Ivn+;B`wtnb$n5@QCQo%v~|MMB-OBKSy~HE z9d%oyGj*Q8(kFnIbv&|Z!sp8~V}iWCvaZrE z=KFh=r9io1_KOLh8TPRhupMy!QXazbab|PGF0W9788P>cW)&{3Tes}>cBSc4KBY1A zGexjGU}ShK>u<{VpqAl1!wuz@AO7ce%<}kZ*^nud|6*^~)o0h`@2mW3JMzkC$%SQ&vrnil z-NSgmm?4g#Abfe(mgmU~``JIt5_q(l&2ZZ~~M zd3DA$%pcm;vA+%u&nvPNKYi>$`gykhiVbTSo|Ua@iRELC&};e8zSe5mxr1(c%ad-( z1m@rVaK(Es#{*S{>t$=2UPby{=I=}@D3bbn_LU)Dh2ViG2I-LZsh=mEchyTz+F9Xq z`4M-8%z-Qh`+Ui7g;xJ}GuW|w@K-!iZ@RHY`oMRFJKPTvcTL>4JGC-v`o`WZU+&%N z7vU?i6g>TOvpsjR_2L?)gyp9=lv`%JC|1&ZYN5&y$@Rd``(x?fr`9WCt{wgK(c$K# znBxpdlUhBlFZQm{%pT&Lm zxh-dca6@!--JNR;9~6org|jdQW<5?c)DrtsjJaz8kb5fPA}%> zX@H`#IC@ifTUXXZ*AC*`*bAx_X;xSANqBU;i_LC#`N@gz{BQ2L7UnT=$ps zg>1C(*!VKSp>%WXx7%N2zGWXy40~2w`fg*}v@W+R|MMjN*mwuYZjRl?yJX6%>yN72 z=6U}O`g`#O$KIuz=6;WvTcyJm)O#^mYHmpU#i#vCLw+p#9s)jDq8TjrU1EPb~+%u?sJ=xU8`TJIKESsx5Nf7L@r zFX-amW1ric!+y*C*}`~q&#i)0&tvaoi|&}P+AJci+f&}~%%2eR!?$Ipzn}Crq+RRX zqFvU9x5c<^lvo!KmspX%_jP)`-ohK#rMnES-sLiTda3KEuU3@r=77)N)J>LamfTyk zD`ew@TL(0^Jy|8vovGLA&bvCZ?AE+rMl2!ib7w7Dzuc^#k9X&?j-wWi$CVCOTiYCa zC>0#*lbbMgUs0^8*ylC+{26if_sXBCtFO>I9=)wm_}7WjNS$**7dMsP zm5E>O!`^j8zFn$I|M2-oQQe@?2drh9(~Xk z&pwUPSvqHR)taYm%{!K)&skadcZ`_HGdboaBfxjjNB?=7j^8_uWo3@p2Tg7mJVn%nv3 z-7ynZ_gdp`Y8ve~`G7@1oN)8!^mOJ$t7os%-Q$$^;@x?BS!14Kv5V8hj3&PJKKuHz z?eT}gv3E;yANF2ab2-~2_21HnDGMH3sTIw=xW~@hE7SVy;|BqA)3)Yt>zm9uwWrjF zqmbi3-eE_XC%-&C|BC2O*)m7c+$ZzW*4APvudUG>g*!O@nKSfB@X1B#1t;HoZO9it zvA0FSm5}a`}|R%9UL$owGS+%AEaOyEP}ri3G%!XsVay zK4`Ja=39P8!D!lR*~8VRk&AFbQd2I?F0%fmuOc@70U9 z+^z0BS+qCvTjsrelZ)!w&OL5hvg7x!cjqs&M0>yMJG%Ydnkb&Tp6QnS|bP?o4rh>gn9}w14Hha~tN$EV=l&=mcAG;Jc-#?iox09RAKbb|XC~)42 z(l+OL3*H=Ybl5oSQptL5U30NrDPNK=74LQ2o$>O9&&|$AXTvu|{Wf(eItZI2dgIN0VZ?R;-4Q{`ke`zOA$ zswQopx_j21wR2oQxy`6l_Ia|lTK#17_qGkC`HanHkJU$SHjWT|diGfV#gK%{X^$UY zQGR;%n0tYmn9k{|PODDpH@wTgaxF(+k}dG{4wuOIb5n~nSBRdvoN+h)di+)KOrE^v zUFWl-%`bOadazzkIyfn&R%)Kxi|yBPUOf^1IwS4piwDbjckb|Dm3|yi`bGBntJ@F0 zu-^0M{874Dsit63(vJOEE_0LS`*&!cv#crKknl~fgP$oH>;bYpZkBNd$1K;m*D{Q*Xad*5?$!fO zyj-=8D2Opl)K*<7&>fMW7oHWQsJ8Jy$U2dwPB}@9Gh_KAp^h7> zHOdcu`=%3gDn51PDo-z+Ez`3%zGKjQD#TEKCMb0Bm8Bbe4xe7+^>K#}$Hwd@o4r=a zn*KMOJe5ncyS1+*yyTOu;ludn{{{`sbmuPXXtZ=Sg5o(K|*)H&1?6S+z#a*dGf zlT$&x6Ydl=cU}rOGEq$4deYKaUSioSLQfPKc1z2w>#Nl8Hl13dX`--n4*P@5Ti-X_ qDE%k$)_8|6M`1_m183$3|L<1*kT!Tyv6g{>fx*+&&t;ucLK6T;i$6{P literal 0 HcmV?d00001 diff --git a/share/qtcreator/qml/qmlpuppet/images/non-visual-component@2x.png b/share/qtcreator/qml/qmlpuppet/images/non-visual-component@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..25a136ff252a3299e9092af55d2cfa0e672c2851 GIT binary patch literal 7260 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 E0Nd~2c>n+a literal 0 HcmV?d00001 diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 2963119deff..ecd066d16ce 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -101,6 +101,30 @@ static QVariant objectToVariant(QObject *object) return QVariant::fromValue(object); } +static QImage nonVisualComponentPreviewImage() +{ + static double ratio = qgetenv("FORMEDITOR_DEVICE_PIXEL_RATIO").toDouble(); + if (ratio == 1.) { + static const QImage image(":/qtquickplugin/images/non-visual-component.png"); + return image; + } else { + static const QImage image(":/qtquickplugin/images/non-visual-component@2x.png"); + return image; + } +} + +static bool imageHasContent(const QImage &image) +{ + // Check if any image pixel contains non-zero data + const uchar *pData = image.constBits(); + const qsizetype size = image.sizeInBytes(); + for (qsizetype i = 0; i < size; ++i) { + if (*(pData++) != 0) + return true; + } + return false; +} + QQuickView *Qt5InformationNodeInstanceServer::createAuxiliaryQuickView(const QUrl &url, QQuickItem *&rootItem) { @@ -556,7 +580,7 @@ void Qt5InformationNodeInstanceServer::doRenderModelNode3DImageView() ServerNodeInstance instance = instanceForId(m_modelNodePreviewImageCommand.instanceId()); instanceObj = instance.internalObject(); } - QSize renderSize = m_modelNodePreviewImageCommand.size() * 2; + QSize renderSize = m_modelNodePreviewImageCommand.size(); QMetaObject::invokeMethod(m_ModelNode3DImageViewRootItem, "createViewForObject", Q_ARG(QVariant, objectToVariant(instanceObj)), @@ -652,7 +676,7 @@ void Qt5InformationNodeInstanceServer::doRenderModelNode2DImageView() // Some component may expect to always be shown at certain size, so their layouts may // not support scaling, so let's always render at the default size if item has one and // scale the resulting image instead. - QSize finalSize = m_modelNodePreviewImageCommand.size() * 2; + QSize finalSize = m_modelNodePreviewImageCommand.size(); QRectF renderRect = itemBoundingRect(instanceItem); QSize renderSize = renderRect.size().toSize(); if (renderSize.isEmpty()) { @@ -665,6 +689,9 @@ void Qt5InformationNodeInstanceServer::doRenderModelNode2DImageView() renderImage = designerSupport()->renderImageForItem(m_ModelNode2DImageViewContentItem, renderRect, renderSize); + if (!imageHasContent(renderImage)) + renderImage = nonVisualComponentPreviewImage(); + if (renderSize != finalSize) renderImage = renderImage.scaled(finalSize, Qt::KeepAspectRatio); diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc b/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc index d5a50ed566e..e094303014a 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc @@ -3,6 +3,8 @@ images/template_image.png html/welcome.html images/webkit.png + images/non-visual-component.png + images/non-visual-component@2x.png mockfiles/Window.qml mockfiles/SwipeView.qml mockfiles/GenericBackend.qml diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 2f85a9e1a47..492d6c62b6b 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -1496,7 +1496,11 @@ void NodeInstanceView::handlePuppetToCreatorCommand(const PuppetToCreatorCommand if (hasModelNodeForInternalId(container.instanceId()) && !image.isNull()) { auto node = modelNodeForInternalId(container.instanceId()); if (node.isValid()) { - image.setDevicePixelRatio(2.); + const double ratio = QmlDesignerPlugin::formEditorDevicePixelRatio(); + const int dim = Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * ratio; + if (image.height() != dim || image.width() != dim) + image = image.scaled(dim, dim, Qt::KeepAspectRatio); + image.setDevicePixelRatio(ratio); updatePreviewImageForNode(node, image); } } @@ -1540,12 +1544,10 @@ void NodeInstanceView::requestModelNodePreviewImage(const ModelNode &node, const } else if (node.isComponent()) { componentPath = node.metaInfo().componentFileName(); } + const int dim = Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * QmlDesignerPlugin::formEditorDevicePixelRatio(); m_nodeInstanceServer->requestModelNodePreviewImage( - RequestModelNodePreviewImageCommand( - instance.instanceId(), - QSize(Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS, - Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS), - componentPath, renderItemId)); + RequestModelNodePreviewImageCommand(instance.instanceId(), QSize(dim, dim), + componentPath, renderItemId)); } } } @@ -1587,6 +1589,7 @@ QVariant NodeInstanceView::previewImageDataForImageNode(const ModelNode &modelNo ModelNodePreviewImageData imageData; imageData.id = modelNode.id(); imageData.type = QString::fromLatin1(modelNode.type()); + const double ratio = QmlDesignerPlugin::formEditorDevicePixelRatio(); if (imageSource.isEmpty() && modelNode.isSubclassOf("QtQuick3D.Texture")) { // Texture node may have sourceItem instead @@ -1601,11 +1604,10 @@ QVariant NodeInstanceView::previewImageDataForImageNode(const ModelNode &modelNo return previewImageDataForGenericNode(modelNode, boundNode); } else { QmlItemNode itemNode(boundNode); - imageData.pixmap = itemNode.instanceRenderPixmap().scaled( - Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * 2, - Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * 2, - Qt::KeepAspectRatio); - imageData.pixmap.setDevicePixelRatio(2.); + const int dim = Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * ratio; + imageData.pixmap = itemNode.instanceRenderPixmap().scaled(dim, dim, Qt::KeepAspectRatio); + imageData.pixmap.setDevicePixelRatio(ratio); + } imageData.info = QObject::tr("Source item: %1").arg(boundNode.id()); } @@ -1629,10 +1631,9 @@ QVariant NodeInstanceView::previewImageDataForImageNode(const ModelNode &modelNo QPixmap originalPixmap; originalPixmap.load(imageSource); if (!originalPixmap.isNull()) { - imageData.pixmap = originalPixmap.scaled(Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * 2, - Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * 2, - Qt::KeepAspectRatio); - imageData.pixmap.setDevicePixelRatio(2.); + const int dim = Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * ratio; + imageData.pixmap = originalPixmap.scaled(dim, dim, Qt::KeepAspectRatio); + imageData.pixmap.setDevicePixelRatio(ratio); double imgSize = double(imageFi.size()); static QStringList units({QObject::tr("B"), QObject::tr("KB"), QObject::tr("MB"), QObject::tr("GB")});