diff --git a/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.cpp b/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.cpp index 0b8a17a31fa..758509d603d 100644 --- a/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.cpp +++ b/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.cpp @@ -10,13 +10,17 @@ namespace QmlDesigner { RequestModelNodePreviewImageCommand::RequestModelNodePreviewImageCommand() = default; -RequestModelNodePreviewImageCommand::RequestModelNodePreviewImageCommand(qint32 id, const QSize &size, - const QString &componentPath, - qint32 renderItemId) +RequestModelNodePreviewImageCommand::RequestModelNodePreviewImageCommand( + qint32 id, + const QSize &size, + const QString &componentPath, + qint32 renderItemId, + const QByteArray &requestId) : m_instanceId(id) , m_size(size) , m_componentPath(componentPath) , m_renderItemId(renderItemId) + , m_requestId(requestId) { } @@ -40,12 +44,18 @@ qint32 RequestModelNodePreviewImageCommand::renderItemId() const return m_renderItemId; } +QByteArray RequestModelNodePreviewImageCommand::requestId() const +{ + return m_requestId; +} + QDataStream &operator<<(QDataStream &out, const RequestModelNodePreviewImageCommand &command) { out << int(command.instanceId()); out << command.size(); out << command.componentPath(); out << command.renderItemId(); + out << command.requestId(); return out; } @@ -56,6 +66,7 @@ QDataStream &operator>>(QDataStream &in, RequestModelNodePreviewImageCommand &co in >> command.m_size; in >> command.m_componentPath; in >> command.m_renderItemId; + in >> command.m_requestId; return in; } @@ -65,7 +76,8 @@ QDebug operator <<(QDebug debug, const RequestModelNodePreviewImageCommand &comm << "instanceId: " << command.instanceId() << ", " << "size: " << command.size() << ", " << "componentPath: " << command.componentPath() << ", " - << "renderItemId: " << command.renderItemId() << ")"; + << "renderItemId: " << command.renderItemId() << ", " + << "requestId: " << command.requestId() << ")"; } } // namespace QmlDesigner diff --git a/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.h b/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.h index 414b8f6cc9d..33a1c97866b 100644 --- a/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.h +++ b/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.h @@ -18,38 +18,46 @@ class RequestModelNodePreviewImageCommand public: RequestModelNodePreviewImageCommand(); - explicit RequestModelNodePreviewImageCommand(qint32 id, const QSize &size, - const QString &componentPath, qint32 renderItemId); + explicit RequestModelNodePreviewImageCommand( + qint32 id, + const QSize &size, + const QString &componentPath, + qint32 renderItemId, + const QByteArray &requestId = {}); qint32 instanceId() const; QSize size() const; QString componentPath() const; qint32 renderItemId() const; + QByteArray requestId() const; private: qint32 m_instanceId; QSize m_size; QString m_componentPath; qint32 m_renderItemId; + QByteArray m_requestId; }; inline bool operator==(const RequestModelNodePreviewImageCommand &first, const RequestModelNodePreviewImageCommand &second) { - return first.instanceId() == second.instanceId() - && first.size() == second.size() - && first.componentPath() == second.componentPath() - && first.renderItemId() == second.renderItemId(); + return first.instanceId() == second.instanceId() && first.size() == second.size() + && first.componentPath() == second.componentPath() + && first.renderItemId() == second.renderItemId() + && first.requestId() == second.requestId(); } inline size_t qHash(const RequestModelNodePreviewImageCommand &key, size_t seed = 0) { #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) return ::qHash(key.instanceId(), seed) - ^ ::qHash(std::make_pair(key.size().width(), key.size().height()), seed) - ^ ::qHash(key.componentPath(), seed) ^ ::qHash(key.renderItemId(), seed); + ^ ::qHash(std::make_pair(key.size().width(), key.size().height()), seed) + ^ ::qHash(key.componentPath(), seed) ^ ::qHash(key.renderItemId(), seed) + ^ ::qHash(key.requestId(), seed); #else - return qHashMulti(seed, key.instanceId(), key.size(), key.componentPath(), key.renderItemId()); + return qHashMulti( + seed, key.instanceId(), key.size(), key.componentPath(), key.renderItemId(), key.requestId()); #endif } diff --git a/src/libs/qmlpuppetcommunication/container/imagecontainer.cpp b/src/libs/qmlpuppetcommunication/container/imagecontainer.cpp index 7747a9d1188..5cfeb2967bc 100644 --- a/src/libs/qmlpuppetcommunication/container/imagecontainer.cpp +++ b/src/libs/qmlpuppetcommunication/container/imagecontainer.cpp @@ -56,6 +56,11 @@ QRectF ImageContainer::rect() const return m_rect; } +QByteArray ImageContainer::requestId() const +{ + return m_requestId; +} + void ImageContainer::setImage(const QImage &image) { QTC_ASSERT(m_image.isNull(), /**/); @@ -68,6 +73,11 @@ void ImageContainer::setRect(const QRectF &rectangle) m_rect = rectangle; } +void ImageContainer::setRequestId(const QByteArray &newRequestId) +{ + m_requestId = newRequestId; +} + void ImageContainer::removeSharedMemorys(const QVector &keyNumberVector) { for (qint32 keyNumber : keyNumberVector) { @@ -151,6 +161,7 @@ QDataStream &operator<<(QDataStream &out, const ImageContainer &container) out << container.instanceId(); out << container.keyNumber(); out << container.rect(); + out << container.requestId(); const QImage image = container.image(); @@ -236,6 +247,7 @@ QDataStream &operator>>(QDataStream &in, ImageContainer &container) in >> container.m_instanceId; in >> container.m_keyNumber; in >> container.m_rect; + in >> container.m_requestId; in >> sharedMemoryIsUsed; if (sharedMemoryIsUsed) { @@ -259,10 +271,11 @@ bool operator <(const ImageContainer &first, const ImageContainer &second) QDebug operator <<(QDebug debug, const ImageContainer &container) { - return debug.nospace() << "ImageContainer(" - << "instanceId: " << container.instanceId() << ", " - << "size: " << container.image().size() << ")"; + debug.nospace() << "ImageContainer(" + << "instanceId: " << container.instanceId() << ", "; + if (!container.requestId().isEmpty()) + debug << "requestId: " << container.requestId() << ", "; + return debug << "size: " << container.image().size() << ")"; } - } // namespace QmlDesigner diff --git a/src/libs/qmlpuppetcommunication/container/imagecontainer.h b/src/libs/qmlpuppetcommunication/container/imagecontainer.h index cc028d45c0f..214cf0f18f7 100644 --- a/src/libs/qmlpuppetcommunication/container/imagecontainer.h +++ b/src/libs/qmlpuppetcommunication/container/imagecontainer.h @@ -23,9 +23,11 @@ public: QImage image() const; qint32 keyNumber() const; QRectF rect() const; + QByteArray requestId() const; void setImage(const QImage &image); void setRect(const QRectF &rectangle); + void setRequestId(const QByteArray &newRequestId); static void removeSharedMemorys(const QVector &keyNumberVector); @@ -34,6 +36,7 @@ private: qint32 m_instanceId; qint32 m_keyNumber; QRectF m_rect; + QByteArray m_requestId; }; QDataStream &operator<<(QDataStream &out, const ImageContainer &container); diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp index 096820b83df..e5c111aedbc 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp @@ -333,16 +333,16 @@ void MaterialBrowserView::selectedNodesChanged(const QList &selectedN m_widget->materialBrowserModel()->selectMaterial(idx); } -void MaterialBrowserView::modelNodePreviewPixmapChanged(const ModelNode &node, const QPixmap &pixmap) +void MaterialBrowserView::modelNodePreviewPixmapChanged(const ModelNode &node, + const QPixmap &pixmap, + const QByteArray &requestId) { if (!isMaterial(node)) return; // There might be multiple requests for different preview pixmap sizes. // Here only the one with the default size is picked. - const double ratio = externalDependencies().formEditorDevicePixelRatio(); - const int dim = Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * ratio; - if (pixmap.width() == dim && pixmap.height() == dim) + if (requestId.isEmpty()) m_widget->updateMaterialPreview(node, pixmap); } diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h index 36ac908e8cf..9689e721667 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h @@ -34,7 +34,9 @@ public: void modelAboutToBeDetached(Model *model) override; void selectedNodesChanged(const QList &selectedNodeList, const QList &lastSelectedNodeList) override; - void modelNodePreviewPixmapChanged(const ModelNode &node, const QPixmap &pixmap) override; + void modelNodePreviewPixmapChanged(const ModelNode &node, + const QPixmap &pixmap, + const QByteArray &requestId) override; void nodeIdChanged(const ModelNode &node, const QString &newId, const QString &oldId) override; void variantPropertiesChanged(const QList &propertyList, PropertyChangeFlags propertyChange) override; void propertiesRemoved(const QList &propertyList) override; diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp index c9e380a54b3..099d87f9289 100644 --- a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp +++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp @@ -42,6 +42,8 @@ namespace QmlDesigner { +static const char MATERIAL_EDITOR_IMAGE_REQUEST_ID[] = "MaterialEditor"; + MaterialEditorView::MaterialEditorView(ExternalDependenciesInterface &externalDependencies) : AbstractView{externalDependencies} , m_stackedWidget(new QStackedWidget) @@ -859,10 +861,12 @@ void MaterialEditorView::propertiesAboutToBeRemoved(const QListnodeInstanceView() && m_selectedMaterial.isValid()) + if (model() && model()->nodeInstanceView() && m_selectedMaterial.isValid()) { model()->nodeInstanceView()->previewImageDataForGenericNode(m_selectedMaterial, {}, - m_previewSize); + m_previewSize, + MATERIAL_EDITOR_IMAGE_REQUEST_ID); + } } bool MaterialEditorView::hasWidget() const @@ -946,15 +950,15 @@ void MaterialEditorView::rootNodeTypeChanged(const QString &type, int, int) } } -void MaterialEditorView::modelNodePreviewPixmapChanged(const ModelNode &node, const QPixmap &pixmap) +void MaterialEditorView::modelNodePreviewPixmapChanged(const ModelNode &node, + const QPixmap &pixmap, + const QByteArray &requestId) { if (node != m_selectedMaterial) return; - if (m_previewSize.isValid() && pixmap.size() != m_previewSize) - return; - - m_qmlBackEnd->updateMaterialPreview(pixmap); + if (requestId == MATERIAL_EDITOR_IMAGE_REQUEST_ID) + m_qmlBackEnd->updateMaterialPreview(pixmap); } void MaterialEditorView::importsChanged([[maybe_unused]] const Imports &addedImports, diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h index e6a80fc148e..7ef52dd3be5 100644 --- a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h +++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h @@ -55,7 +55,9 @@ public: void nodeTypeChanged(const ModelNode& node, const TypeName &type, int majorVersion, int minorVersion) override; void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) override; - void modelNodePreviewPixmapChanged(const ModelNode &node, const QPixmap &pixmap) override; + void modelNodePreviewPixmapChanged(const ModelNode &node, + const QPixmap &pixmap, + const QByteArray &requestId) override; void importsChanged(const Imports &addedImports, const Imports &removedImports) override; void customNotification(const AbstractView *view, const QString &identifier, const QList &nodeList, const QList &data) override; diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp index 47f3a590898..06e94968c16 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp @@ -364,13 +364,13 @@ void NavigatorView::enableWidget() m_widget->enableNavigator(); } -void NavigatorView::modelNodePreviewPixmapChanged(const ModelNode &node, const QPixmap &pixmap) +void NavigatorView::modelNodePreviewPixmapChanged(const ModelNode &node, + const QPixmap &pixmap, + const QByteArray &requestId) { // There might be multiple requests for different preview pixmap sizes. // Here only the one with the default size is picked. - const double ratio = externalDependencies().formEditorDevicePixelRatio(); - const int dim = Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * ratio; - if (pixmap.width() == dim && pixmap.height() == dim) + if (requestId.isEmpty()) m_treeModel->updateToolTipPixmap(node, pixmap); } diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.h b/src/plugins/qmldesigner/components/navigator/navigatorview.h index 662b749ecec..60c48d7bc57 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.h +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.h @@ -83,7 +83,9 @@ public: void disableWidget() override; void enableWidget() override; - void modelNodePreviewPixmapChanged(const ModelNode &node, const QPixmap &pixmap) override; + void modelNodePreviewPixmapChanged(const ModelNode &node, + const QPixmap &pixmap, + const QByteArray &requestId) override; private: ModelNode modelNodeForIndex(const QModelIndex &modelIndex) const; diff --git a/src/plugins/qmldesigner/components/navigator/previewtooltip.cpp b/src/plugins/qmldesigner/components/navigator/previewtooltip.cpp index f99b964f2d7..f8edc6d608c 100644 --- a/src/plugins/qmldesigner/components/navigator/previewtooltip.cpp +++ b/src/plugins/qmldesigner/components/navigator/previewtooltip.cpp @@ -57,7 +57,9 @@ void PreviewToolTip::setInfo(const QString &info) void PreviewToolTip::setPixmap(const QPixmap &pixmap) { - m_ui->imageLabel->setPixmap(pixmap); + QPixmap scaled = pixmap.scaled(m_ui->labelBackground->size(), Qt::KeepAspectRatio); + scaled.setDevicePixelRatio(1.); + m_ui->imageLabel->setPixmap(scaled); } QString PreviewToolTip::id() const diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index 450a51afdd0..2fbc0ae344d 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -148,7 +148,9 @@ public: void emitInstanceToken(const QString &token, int number, const QVector &nodeVector); void emitRenderImage3DChanged(const QImage &image); void emitUpdateActiveScene3D(const QVariantMap &sceneState); - void emitModelNodelPreviewPixmapChanged(const ModelNode &node, const QPixmap &pixmap); + void emitModelNodelPreviewPixmapChanged(const ModelNode &node, + const QPixmap &pixmap, + const QByteArray &requestId); void emitImport3DSupportChanged(const QVariantMap &supportMap); void emitNodeAtPosResult(const ModelNode &modelNode, const QVector3D &pos3d); void emitView3DAction(View3DActionType type, const QVariant &value); @@ -227,7 +229,9 @@ public: virtual void updateActiveScene3D(const QVariantMap &sceneState); virtual void updateImport3DSupport(const QVariantMap &supportMap); virtual void nodeAtPosReady(const ModelNode &modelNode, const QVector3D &pos3d); - virtual void modelNodePreviewPixmapChanged(const ModelNode &node, const QPixmap &pixmap); + virtual void modelNodePreviewPixmapChanged(const ModelNode &node, + const QPixmap &pixmap, + const QByteArray &requestId); virtual void view3DAction(View3DActionType type, const QVariant &value); diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index 2147c8aa88b..5c69b55afad 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -136,14 +136,16 @@ public: void view3DAction(View3DActionType type, const QVariant &value) override; void requestModelNodePreviewImage(const ModelNode &node, const ModelNode &renderNode, - const QSize &size = {}) const; + const QSize &size = {}, + const QByteArray &requestId = {}) const; void edit3DViewResized(const QSize &size) const; void handlePuppetToCreatorCommand(const PuppetToCreatorCommand &command) override; QVariant previewImageDataForGenericNode(const ModelNode &modelNode, const ModelNode &renderNode, - const QSize &size = {}) const; + const QSize &size = {}, + const QByteArray &requestId = {}) const; QVariant previewImageDataForImageNode(const ModelNode &modelNode) const; void setCrashCallback(std::function crashCallback) @@ -229,7 +231,9 @@ private: // functions QString info; }; QVariant modelNodePreviewImageDataToVariant(const ModelNodePreviewImageData &imageData) const; - void updatePreviewImageForNode(const ModelNode &modelNode, const QImage &image); + void updatePreviewImageForNode(const ModelNode &modelNode, + const QImage &image, + const QByteArray &requestId); void updateWatcher(const QString &path); void handleShaderChanges(); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 889dc5ba7e4..08a046cfb39 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -1779,7 +1779,7 @@ void NodeInstanceView::handlePuppetToCreatorCommand(const PuppetToCreatorCommand if (node.isValid()) { const double ratio = m_externalDependencies.formEditorDevicePixelRatio(); image.setDevicePixelRatio(ratio); - updatePreviewImageForNode(node, image); + updatePreviewImageForNode(node, image, container.requestId()); } } } else if (command.type() == PuppetToCreatorCommand::Import3DSupport) { @@ -1824,7 +1824,8 @@ void NodeInstanceView::view3DAction(View3DActionType type, const QVariant &value void NodeInstanceView::requestModelNodePreviewImage(const ModelNode &node, const ModelNode &renderNode, - const QSize &size) const + const QSize &size, + const QByteArray &requestId) const { if (m_nodeInstanceServer && node.isValid() && hasInstanceForModelNode(node)) { auto instance = instanceForModelNode(node); @@ -1842,16 +1843,17 @@ void NodeInstanceView::requestModelNodePreviewImage(const ModelNode &node, componentPath = ModelUtils::componentFilePath(node); } + const double ratio = m_externalDependencies.formEditorDevicePixelRatio(); + if (size.isValid()) { - imageSize = size; + imageSize = size * ratio; } else { - const double ratio = m_externalDependencies.formEditorDevicePixelRatio(); const int dim = Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * ratio; imageSize = {dim, dim}; } m_nodeInstanceServer->requestModelNodePreviewImage(RequestModelNodePreviewImageCommand( - instance.instanceId(), imageSize, componentPath, renderItemId)); + instance.instanceId(), imageSize, componentPath, renderItemId, requestId)); } } } @@ -1997,7 +1999,8 @@ void NodeInstanceView::endNanotrace() QVariant NodeInstanceView::previewImageDataForGenericNode(const ModelNode &modelNode, const ModelNode &renderNode, - const QSize &size) const + const QSize &size, + const QByteArray &requestId) const { if (!modelNode.isValid()) return {}; @@ -2014,23 +2017,23 @@ QVariant NodeInstanceView::previewImageDataForGenericNode(const ModelNode &model imageData.id = id; // There might be multiple requests for different preview pixmap sizes. - // Here only the one with the default size is stored. - const double ratio = externalDependencies().formEditorDevicePixelRatio(); - const int dim = Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * ratio; - if (size.width() == dim && size.height() == dim) + // Here only the one with no request id is stored. + if (requestId.isEmpty()) m_imageDataMap.insert(id, imageData); } - requestModelNodePreviewImage(modelNode, renderNode, size); + requestModelNodePreviewImage(modelNode, renderNode, size, requestId); return modelNodePreviewImageDataToVariant(imageData); } -void NodeInstanceView::updatePreviewImageForNode(const ModelNode &modelNode, const QImage &image) +void NodeInstanceView::updatePreviewImageForNode(const ModelNode &modelNode, + const QImage &image, + const QByteArray &requestId) { QPixmap pixmap = QPixmap::fromImage(image); if (m_imageDataMap.contains(modelNode.id())) m_imageDataMap[modelNode.id()].pixmap = pixmap; - emitModelNodelPreviewPixmapChanged(modelNode, pixmap); + emitModelNodelPreviewPixmapChanged(modelNode, pixmap, requestId); } void NodeInstanceView::updateWatcher(const QString &path) diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index 125c7195a8f..35ccf36efd8 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -385,7 +385,9 @@ void AbstractView::updateImport3DSupport(const QVariantMap &/*supportMap*/) // position of the requested view position. void AbstractView::nodeAtPosReady(const ModelNode &/*modelNode*/, const QVector3D &/*pos3d*/) {} -void AbstractView::modelNodePreviewPixmapChanged(const ModelNode &/*node*/, const QPixmap &/*pixmap*/) +void AbstractView::modelNodePreviewPixmapChanged(const ModelNode & /*node*/, + const QPixmap & /*pixmap*/, + const QByteArray & /*requestId*/) { } @@ -749,10 +751,12 @@ void AbstractView::emitUpdateActiveScene3D(const QVariantMap &sceneState) model()->d->notifyUpdateActiveScene3D(sceneState); } -void AbstractView::emitModelNodelPreviewPixmapChanged(const ModelNode &node, const QPixmap &pixmap) +void AbstractView::emitModelNodelPreviewPixmapChanged(const ModelNode &node, + const QPixmap &pixmap, + const QByteArray &requestId) { if (model()) - model()->d->notifyModelNodePreviewPixmapChanged(node, pixmap); + model()->d->notifyModelNodePreviewPixmapChanged(node, pixmap, requestId); } void AbstractView::emitImport3DSupportChanged(const QVariantMap &supportMap) diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index d4eea263785..f92aca3b8d6 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -715,10 +715,12 @@ void ModelPrivate::notifyUpdateActiveScene3D(const QVariantMap &sceneState) notifyInstanceChanges([&](AbstractView *view) { view->updateActiveScene3D(sceneState); }); } -void ModelPrivate::notifyModelNodePreviewPixmapChanged(const ModelNode &node, const QPixmap &pixmap) +void ModelPrivate::notifyModelNodePreviewPixmapChanged(const ModelNode &node, + const QPixmap &pixmap, + const QByteArray &requestId) { notifyInstanceChanges( - [&](AbstractView *view) { view->modelNodePreviewPixmapChanged(node, pixmap); }); + [&](AbstractView *view) { view->modelNodePreviewPixmapChanged(node, pixmap, requestId); }); } void ModelPrivate::notifyImport3DSupportChanged(const QVariantMap &supportMap) diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h index cb082fd1d70..e8aeadc590e 100644 --- a/src/plugins/qmldesigner/designercore/model/model_p.h +++ b/src/plugins/qmldesigner/designercore/model/model_p.h @@ -221,7 +221,9 @@ public: void notifyRenderImage3DChanged(const QImage &image); void notifyUpdateActiveScene3D(const QVariantMap &sceneState); - void notifyModelNodePreviewPixmapChanged(const ModelNode &node, const QPixmap &pixmap); + void notifyModelNodePreviewPixmapChanged(const ModelNode &node, + const QPixmap &pixmap, + const QByteArray &requestId); void notifyImport3DSupportChanged(const QVariantMap &supportMap); void notifyNodeAtPosResult(const ModelNode &modelNode, const QVector3D &pos3d); void notifyView3DAction(View3DActionType type, const QVariant &value); diff --git a/src/tools/qml2puppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/src/tools/qml2puppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 9549f59d3f3..d81a0aa5644 100644 --- a/src/tools/qml2puppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/src/tools/qml2puppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -1377,6 +1377,7 @@ void Qt5InformationNodeInstanceServer::doRenderModelNode3DImageView( // Key number is selected so that it is unlikely to conflict other ImageContainer use. ImageContainer imgContainer(cmd.instanceId(), {}, 2100000001 + cmd.instanceId()); imgContainer.setImage(renderImage); + imgContainer.setRequestId(cmd.requestId()); // send the rendered image to creator process nodeInstanceClient()->handlePuppetToCreatorCommand( @@ -1472,6 +1473,7 @@ void Qt5InformationNodeInstanceServer::doRenderModelNode2DImageView(const Reques if (!renderImage.isNull()) { imgContainer.setImage(renderImage); + imgContainer.setRequestId(cmd.requestId()); // send the rendered image to creator process nodeInstanceClient()->handlePuppetToCreatorCommand({PuppetToCreatorCommand::RenderModelNodePreviewImage,