diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index f7953e2fbe6..c3d3b1ceaa0 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -199,24 +199,17 @@ void DesignerActionManager::registerAddResourceHandler(const AddResourceHandler m_addResourceHandler.append(handler); } -QMultiHash DesignerActionManager::modelNodePreviewHandlers() const -{ - return m_modelNodePreviewImageHandlers; -} - void DesignerActionManager::registerModelNodePreviewHandler(const ModelNodePreviewImageHandler &handler) { - m_modelNodePreviewImageHandlers.insert(handler.type, handler); + m_modelNodePreviewImageHandlers.append(handler); } bool DesignerActionManager::hasModelNodePreviewHandler(const ModelNode &node) const { const bool isComponent = node.isComponent(); for (const auto &handler : qAsConst(m_modelNodePreviewImageHandlers)) { - if ((isComponent || !handler.componentOnly) && node.isSubclassOf(handler.type)) { - ModelNodePreviewImageHandler subClassHandler = handler; + if ((isComponent || !handler.componentOnly) && node.isSubclassOf(handler.type)) return true; - } } return false; } @@ -1413,6 +1406,15 @@ void DesignerActionManager::createDefaultModelNodePreviewImageHandlers() registerModelNodePreviewHandler( ModelNodePreviewImageHandler("QtQuick.Image", ModelNodeOperations::previewImageDataForImageNode)); + registerModelNodePreviewHandler( + ModelNodePreviewImageHandler("QtQuick.BorderImage", + ModelNodeOperations::previewImageDataForImageNode)); + registerModelNodePreviewHandler( + ModelNodePreviewImageHandler("Qt.SafeRenderer.SafeRendererImage", + ModelNodeOperations::previewImageDataForImageNode)); + registerModelNodePreviewHandler( + ModelNodePreviewImageHandler("Qt.SafeRenderer.SafeRendererPicture", + ModelNodeOperations::previewImageDataForImageNode)); registerModelNodePreviewHandler( ModelNodePreviewImageHandler("QtQuick3D.Texture", ModelNodeOperations::previewImageDataForImageNode)); diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h index 7731b09e633..969af7a3bdd 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h @@ -127,7 +127,6 @@ public: QList addResourceHandler() const; void registerAddResourceHandler(const AddResourceHandler &handler); - QMultiHash modelNodePreviewHandlers() const; void registerModelNodePreviewHandler(const ModelNodePreviewImageHandler &handler); bool hasModelNodePreviewHandler(const ModelNode &node) const; ModelNodePreviewImageOperation modelNodePreviewOperation(const ModelNode &node) const; @@ -139,7 +138,7 @@ private: QList > m_designerActions; DesignerActionManagerView *m_designerActionManagerView; QList m_addResourceHandler; - QMultiHash m_modelNodePreviewImageHandlers; + QList m_modelNodePreviewImageHandlers; }; } //QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 3f0b1f8a5f3..9f965a453c5 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -98,6 +98,8 @@ #include #include #include +#include +#include enum { debug = false @@ -1636,7 +1638,20 @@ QVariant NodeInstanceView::previewImageDataForImageNode(const ModelNode &modelNo if (reload) { QPixmap originalPixmap; - originalPixmap.load(imageSource); + if (modelNode.isSubclassOf("Qt.SafeRenderer.SafeRendererPicture")) { + QPicture picture; + picture.load(imageSource); + if (!picture.isNull()) { + QImage paintImage(picture.width(), picture.height(), QImage::Format_ARGB32); + paintImage.fill(Qt::transparent); + QPainter painter(&paintImage); + painter.drawPicture(0, 0, picture); + painter.end(); + originalPixmap = QPixmap::fromImage(paintImage); + } + } else { + originalPixmap.load(imageSource); + } if (!originalPixmap.isNull()) { const int dim = Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * ratio; imageData.pixmap = originalPixmap.scaled(dim, dim, Qt::KeepAspectRatio);