diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2020-10-05 13:23:54 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2020-10-12 07:33:56 +0000 |
commit | 47714c38c6b899d4fac4eb1b2ac042c4337dd3aa (patch) | |
tree | 15d0c74cbb25a5f5815e5dfc65c19a1739f81b8b /share/qtcreator | |
parent | 22545933b643877382dd8275ecd85df336a84f5b (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.png | bin | 0 -> 3311 bytes | |||
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/images/non-visual-component@2x.png | bin | 0 -> 7260 bytes | |||
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp | 31 | ||||
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc | 2 |
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 Binary files differnew file mode 100644 index 0000000000..f66e2b8b11 --- /dev/null +++ b/share/qtcreator/qml/qmlpuppet/images/non-visual-component.png diff --git a/share/qtcreator/qml/qmlpuppet/images/non-visual-component@2x.png b/share/qtcreator/qml/qmlpuppet/images/non-visual-component@2x.png Binary files differnew file mode 100644 index 0000000000..25a136ff25 --- /dev/null +++ b/share/qtcreator/qml/qmlpuppet/images/non-visual-component@2x.png 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> |