diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp index 53dc355f368..699c0fc4d1d 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp @@ -433,6 +433,10 @@ QVariant ObjectNodeInstance::fixResourcePaths(const QVariant &value) return value; } +void ObjectNodeInstance::updateDirtyNodeRecursive() +{ +} + void ObjectNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value) { QQmlProperty property(object(), name, context()); @@ -1108,6 +1112,11 @@ QImage ObjectNodeInstance::renderImage() const return QImage(); } +QImage ObjectNodeInstance::renderPreviewImage(const QSize & /*previewImageSize*/) const +{ + return QImage(); +} + QObject *ObjectNodeInstance::parent() const { if (!object()) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h index 4feb35aaccc..d310f28129e 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h @@ -85,6 +85,7 @@ public: virtual void initialize(const Pointer &objectNodeInstance); virtual void paint(QPainter *painter); virtual QImage renderImage() const; + virtual QImage renderPreviewImage(const QSize &previewImageSize) const; virtual QObject *parent() const; @@ -179,6 +180,8 @@ public: static QVariant fixResourcePaths(const QVariant &value); + virtual void updateDirtyNodeRecursive(); + protected: void doResetProperty(const PropertyName &propertyName); void removeFromOldProperty(QObject *object, QObject *oldParent, const PropertyName &oldParentProperty); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp index 8e3a5c767b0..63451eb01bc 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp @@ -65,7 +65,7 @@ void Qt5PreviewNodeInstanceServer::collectItemChangesAndSendChangeCommands() { static bool inFunction = false; - if (rootNodeInstance().internalSGItem() == 0) + if (!rootNodeInstance().holdsQuickItem()) return; if (!inFunction && nodeInstanceClient()->bytesToWrite() < 10000) { @@ -106,17 +106,14 @@ static void updateDirtyNodeRecursive(QQuickItem *parentItem) QImage Qt5PreviewNodeInstanceServer::renderPreviewImage() { - updateDirtyNodeRecursive(rootNodeInstance().internalSGItem()); + rootNodeInstance().updateDirtyNodeRecursive(); QRectF boundingRect = rootNodeInstance().boundingRect(); QSize previewImageSize = boundingRect.size().toSize(); previewImageSize.scale(QSize(100, 100), Qt::KeepAspectRatio); - QImage previewImage; - - if (boundingRect.isValid() && rootNodeInstance().internalSGItem()) - previewImage = designerSupport()->renderImageForItem(rootNodeInstance().internalSGItem(), boundingRect, previewImageSize); + QImage previewImage = rootNodeInstance().renderPreviewImage(previewImageSize); previewImage = previewImage.convertToFormat(QImage::Format_ARGB32_Premultiplied); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp index 94f8622491f..b1fd2f35769 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp @@ -218,6 +218,14 @@ void QuickItemNodeInstance::updateDirtyNodeRecursive(QQuickItem *parentItem) con DesignerSupport::updateDirtyNode(parentItem); } +void QuickItemNodeInstance::updateAllDirtyNodeRecursive(QQuickItem *parentItem) const +{ + foreach (QQuickItem *childItem, parentItem->childItems()) + updateDirtyNodeRecursive(childItem); + + DesignerSupport::updateDirtyNode(parentItem); +} + QImage QuickItemNodeInstance::renderImage() const { updateDirtyNodeRecursive(quickItem()); @@ -231,6 +239,16 @@ QImage QuickItemNodeInstance::renderImage() const return renderImage; } +QImage QuickItemNodeInstance::renderPreviewImage(const QSize &previewImageSize) const +{ + QRectF previewItemBoundingRect = boundingRect(); + + if (previewItemBoundingRect.isValid() && quickItem()) + return designerSupport()->renderImageForItem(quickItem(), previewItemBoundingRect, previewImageSize); + + return QImage(); +} + bool QuickItemNodeInstance::isMovable() const { if (isRootNodeInstance()) @@ -661,6 +679,11 @@ void QuickItemNodeInstance::createEffectItem(bool createEffectItem) s_createEffectItem = createEffectItem; } +void QuickItemNodeInstance::updateDirtyNodeRecursive() const +{ + updateAllDirtyNodeRecursive(quickItem()); +} + } // namespace Internal } // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h index 7ac8a9f4ae6..0254235d7e2 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h @@ -102,12 +102,15 @@ public: QList stateInstances() const; QImage renderImage() const; + QImage renderPreviewImage(const QSize &previewImageSize) const; DesignerSupport *designerSupport() const; Qt5NodeInstanceServer *qt5NodeInstanceServer() const; static void createEffectItem(bool createEffectItem); + void updateDirtyNodeRecursive() const; + protected: QuickItemNodeInstance(QQuickItem*); QQuickItem *quickItem() const; @@ -116,6 +119,7 @@ protected: void refresh(); QRectF boundingRectWithStepChilds(QQuickItem *parentItem) const; void updateDirtyNodeRecursive(QQuickItem *parentItem) const; + void updateAllDirtyNodeRecursive(QQuickItem *parentItem) const; static bool anyItemHasContent(QQuickItem *graphicsItem); static bool childItemsHaveContent(QQuickItem *graphicsItem); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp index 0250e77b145..592ea39dae2 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp @@ -122,6 +122,11 @@ QImage ServerNodeInstance::renderImage() const return m_nodeInstance->renderImage(); } +QImage ServerNodeInstance::renderPreviewImage(const QSize &previewImageSize) const +{ + return m_nodeInstance->renderPreviewImage(previewImageSize); +} + bool ServerNodeInstance::isRootNodeInstance() const { return isValid() && m_nodeInstance->isRootNodeInstance(); @@ -153,6 +158,16 @@ void ServerNodeInstance::setNodeSource(const QString &source) m_nodeInstance->setNodeSource(source); } +bool ServerNodeInstance::holdsQuickItem() const +{ + return m_nodeInstance->isQuickItem(); +} + +void ServerNodeInstance::updateDirtyNodeRecursive() +{ + m_nodeInstance->updateDirtyNodeRecursive(); +} + bool ServerNodeInstance::isSubclassOf(const QString &superTypeName) const { return isSubclassOf(internalObject(), superTypeName.toUtf8()); @@ -552,13 +567,6 @@ QObject *ServerNodeInstance::internalObject() const return m_nodeInstance->object(); } -#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) -QQuickItem *ServerNodeInstance::internalSGItem() const -{ - return qobject_cast(internalObject()); -} -#endif - void ServerNodeInstance::activateState() { m_nodeInstance->activateState(); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.h index a230e6f1d96..ef9728937d2 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.h @@ -98,6 +98,7 @@ public: void paint(QPainter *painter); QImage renderImage() const; + QImage renderPreviewImage(const QSize &previewImageSize) const; ServerNodeInstance parent() const; bool hasParent() const; @@ -196,11 +197,11 @@ private: // functions void setNodeSource(const QString &source); + bool holdsQuickItem() const; + + void updateDirtyNodeRecursive(); QObject *internalObject() const; // should be not used outside of the nodeinstances!!!! -#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) - QQuickItem *internalSGItem() const; -#endif private: // variables QSharedPointer m_nodeInstance;