aboutsummaryrefslogtreecommitdiffstats
path: root/share/qtcreator
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2020-10-05 13:23:54 +0300
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2020-10-12 07:33:56 +0000
commit47714c38c6b899d4fac4eb1b2ac042c4337dd3aa (patch)
tree15d0c74cbb25a5f5815e5dfc65c19a1739f81b8b /share/qtcreator
parent22545933b643877382dd8275ecd85df336a84f5b (diff)
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 <mahmoud.badri@qt.io>
Diffstat (limited to 'share/qtcreator')
-rw-r--r--share/qtcreator/qml/qmlpuppet/images/non-visual-component.pngbin0 -> 3311 bytes
-rw-r--r--share/qtcreator/qml/qmlpuppet/images/non-visual-component@2x.pngbin0 -> 7260 bytes
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp31
-rw-r--r--share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc2
4 files changed, 31 insertions, 2 deletions
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 0000000000..f66e2b8b11
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/images/non-visual-component.png
Binary files differ
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 0000000000..25a136ff25
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/images/non-visual-component@2x.png
Binary files differ
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
index 2963119def..ecd066d16c 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 d5a50ed566..e094303014 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc
@@ -3,6 +3,8 @@
<file>images/template_image.png</file>
<file>html/welcome.html</file>
<file>images/webkit.png</file>
+ <file>images/non-visual-component.png</file>
+ <file>images/non-visual-component@2x.png</file>
<file>mockfiles/Window.qml</file>
<file>mockfiles/SwipeView.qml</file>
<file>mockfiles/GenericBackend.qml</file>