diff options
author | Marco Bubke <marco.bubke@qt.io> | 2020-09-03 13:48:13 +0200 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2020-09-11 08:57:42 +0000 |
commit | 0f9010d381d9defb7597f28186b9e10d3dd3eae1 (patch) | |
tree | 437e2d0e8774736804bb3fe37f1bc2995ffd1622 /src | |
parent | a535196c418a7054c2fb1524ff1df9afb0961166 (diff) |
QmlDesigner: Introduce multiple node instance server
For capturing data we need a atomic mechanism. So in one
process multiple node instance server can be started and
then a command is send back that a scene is created. It
can be used to ensure that captured data of views is
up to date.
Task-number: QDS-2630
Change-Id: Iea8d0b036b6384c9c1b0f91af401f2b1f1978c12
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'src')
9 files changed, 39 insertions, 9 deletions
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index 1ba8fcd2be..247c564dd4 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -50,11 +50,12 @@ #include <utils/algorithm.h> #include <utils/qtcassert.h> +#include <memory> #include <QDebug> #include <QPair> +#include <QPicture> #include <QString> #include <QTimer> -#include <memory> namespace QmlDesigner { @@ -770,6 +771,11 @@ void FormEditorView::exportAsImage() m_formEditorWidget->exportAsImage(m_scene->rootFormEditorItem()->boundingRect()); } +QPicture FormEditorView::renderToPicture() const +{ + return m_formEditorWidget->renderToPicture(); +} + QmlItemNode findRecursiveQmlItemNode(const QmlObjectNode &firstQmlObjectNode) { QmlObjectNode qmlObjectNode = firstQmlObjectNode; diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h index 64c1f2a435..8aa156fa45 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h @@ -128,6 +128,7 @@ public: void setGotoErrorCallback(std::function<void(int, int)> gotoErrorCallback); void exportAsImage(); + QPicture renderToPicture() const; protected: void reset(); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp index c09516cbf8..c8c54f6a53 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp @@ -53,6 +53,7 @@ #include <QActionGroup> #include <QFileDialog> #include <QPainter> +#include <QPicture> #include <QVBoxLayout> #include <QWheelEvent> @@ -487,6 +488,19 @@ void FormEditorWidget::exportAsImage(const QRectF &boundingRect) } } +QPicture FormEditorWidget::renderToPicture() const +{ + QPicture picture; + QPainter painter{&picture}; + + const QTransform viewportTransform = m_graphicsView->viewportTransform(); + const QRectF boundingRect = rootItemRect(); + + m_graphicsView->render(&painter, boundingRect, viewportTransform.mapRect(boundingRect.toRect())); + + return picture; +} + FormEditorGraphicsView *FormEditorWidget::graphicsView() const { return m_graphicsView; @@ -504,7 +518,4 @@ DocumentWarningWidget *FormEditorWidget::errorWidget() return m_documentErrorWidget; } - -} - - +} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h index b32c95916a..1f6b559a38 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h @@ -83,6 +83,7 @@ public: void showWarningMessageBox(const QList<DocumentMessage> &warnings); void exportAsImage(const QRectF &boundingRect); + QPicture renderToPicture() const; FormEditorGraphicsView *graphicsView() const; diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index 7ab1fc9808..eaf4fc08e2 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -99,6 +99,7 @@ public: void nodeSourceChanged(const ModelNode &modelNode, const QString &newNodeSource) override; void capturedData(const CapturedDataCommand &capturedData) override; void currentStateChanged(const ModelNode &node) override; + void sceneCreated(const SceneCreatedCommand &command) override; QList<NodeInstance> instances() const; NodeInstance instanceForModelNode(const ModelNode &node) const ; diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index ece4fa35b9..dc379bd312 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -64,6 +64,7 @@ #include "removepropertiescommand.h" #include "removesharedmemorycommand.h" #include "reparentinstancescommand.h" +#include "scenecreatedcommand.h" #include "statepreviewimagechangedcommand.h" #include "tokencommand.h" #include "update3dviewstatecommand.h" @@ -585,10 +586,10 @@ void NodeInstanceView::currentStateChanged(const ModelNode &node) nodeInstanceView()->activateBaseState(); } +void NodeInstanceView::sceneCreated(const SceneCreatedCommand &) {} //\} - void NodeInstanceView::removeAllInstanceNodeRelationships() { m_nodeInstanceHash.clear(); diff --git a/src/plugins/qmldesigner/qmldesignerplugin.qbs b/src/plugins/qmldesigner/qmldesignerplugin.qbs index 40a26e7392..17c6b4282a 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.qbs +++ b/src/plugins/qmldesigner/qmldesignerplugin.qbs @@ -135,6 +135,7 @@ Project { "commands/changevaluescommand.cpp", "commands/changevaluescommand.h", "commands/captureddatacommand.h", + "commands/scenecreatedcommand.h", "commands/childrenchangedcommand.cpp", "commands/childrenchangedcommand.h", "commands/clearscenecommand.cpp", diff --git a/src/tools/qml2puppet/CMakeLists.txt b/src/tools/qml2puppet/CMakeLists.txt index 2b80c8ca29..f3f6a66303 100644 --- a/src/tools/qml2puppet/CMakeLists.txt +++ b/src/tools/qml2puppet/CMakeLists.txt @@ -53,6 +53,7 @@ extend_qtc_executable(qml2puppet view3dactioncommand.cpp view3dactioncommand.h valueschangedcommand.cpp captureddatacommand.h + scenecreatedcommand.h ) extend_qtc_executable(qml2puppet @@ -156,7 +157,9 @@ extend_qtc_executable(qml2puppet quick3dtexturenodeinstance.cpp quick3dtexturenodeinstance.h quickitemnodeinstance.cpp quickitemnodeinstance.h servernodeinstance.cpp servernodeinstance.h - qt5capturenodeinstanceserver.cpp qt5capturenodeinstanceserver.h + qt5capturepreviewnodeinstanceserver.cpp qt5capturepreviewnodeinstanceserver.h + nodeinstanceserverdispatcher.cpp nodeinstanceserverdispatcher.h + capturenodeinstanceserverdispatcher.cpp capturenodeinstanceserverdispatcher.h ) extend_qtc_executable(qml2puppet diff --git a/src/tools/qml2puppet/qml2puppet.qbs b/src/tools/qml2puppet/qml2puppet.qbs index 3aab61eb9c..4d135b0cde 100644 --- a/src/tools/qml2puppet/qml2puppet.qbs +++ b/src/tools/qml2puppet/qml2puppet.qbs @@ -117,6 +117,7 @@ QtcTool { "commands/view3dactioncommand.cpp", "commands/view3dactioncommand.h", "commands/captureddatacommand.h", + "commands/scenecreatedcommand.h", "container/addimportcontainer.cpp", "container/addimportcontainer.h", "container/idcontainer.cpp", @@ -219,8 +220,12 @@ QtcTool { "instances/qt5testnodeinstanceserver.h", "instances/servernodeinstance.cpp", "instances/servernodeinstance.h", - "instances/qt5capturenodeinstanceserver.cpp", - "instances/qt5capturenodeinstanceserver.h", + "instances/qt5capturepreviewnodeinstanceserver.cpp", + "instances/qt5capturepreviewnodeinstanceserver.h", + "instances/nodeinstanceserverdispatcher.cpp", + "instances/nodeinstanceserverdispatcher.h", + "instances/capturenodeinstanceserverdispatcher.cpp", + "instances/capturenodeinstanceserverdispatcher.h", "editor3d/generalhelper.cpp", "editor3d/mousearea3d.cpp", "editor3d/camerageometry.cpp", |