diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2021-08-24 12:36:58 +0200 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2021-08-26 14:18:37 +0000 |
commit | 30827fe4016cbbc62d4eb0291d4af7c5dc54d007 (patch) | |
tree | 12339129b14b1557fc244286a7c06ae83634ba12 /share/qtcreator/qml/qmlpuppet | |
parent | 90027cd298359a70f35b6feca98609a3c7fc67e3 (diff) |
QmlDesigner: Implement visibility for unified render path
If the item is set to invisible we set visible to false in
the render and preview puppets. This will have no effect on the
value in the property editor.
Changing the actual value of visible can have side-effects on
the rendering in some rare cases.
Task-number: QDS-4932
Change-Id: I5ce0925ebff8f5e4e64bc71fd5d33d6154b85f91
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Diffstat (limited to 'share/qtcreator/qml/qmlpuppet')
6 files changed, 38 insertions, 0 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp index e31c4932cf..67fa5096bd 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp @@ -1529,4 +1529,9 @@ void NodeInstanceServer::registerFonts(const QUrl &resourceUrl) const QFontDatabase::addApplicationFont(it.next()); } +bool NodeInstanceServer::isInformationServer() const +{ + return false; +} + } // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h index 92fc069690..018b4da242 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h @@ -220,6 +220,8 @@ public: virtual QImage grabWindow() = 0; virtual QImage grabItem(QQuickItem *item) = 0; + virtual bool isInformationServer() const; + public slots: void refreshLocalFileProperty(const QString &path); void refreshDummyData(const QString &path); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index ad9de63f57..19e864e638 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -2085,6 +2085,11 @@ void Qt5InformationNodeInstanceServer::handleInstanceHidden(const ServerNodeInst #endif } +bool Qt5InformationNodeInstanceServer::isInformationServer() const +{ + return true; +} + // update 3D view size when it changes in creator side void Qt5InformationNodeInstanceServer::update3DViewState(const Update3dViewStateCommand &command) { diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h index ed4f97d81b..d827075c45 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h @@ -75,6 +75,8 @@ public: void handleInstanceLocked(const ServerNodeInstance &instance, bool enable, bool checkAncestors) override; void handleInstanceHidden(const ServerNodeInstance &instance, bool enable, bool checkAncestors) override; + bool isInformationServer() const override; + private slots: void handleSelectionChanged(const QVariant &objs); void handleObjectPropertyCommit(const QVariant &objects, const QVariant &propNames); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp index 51b1dcd1c0..ab38b33aaf 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp @@ -295,6 +295,27 @@ bool QuickItemNodeInstance::unifiedRenderPathOrQt6() #endif } +void QuickItemNodeInstance::setHiddenInEditor(bool hide) +{ + ObjectNodeInstance::setHiddenInEditor(hide); + if (s_unifiedRenderPath && !nodeInstanceServer()->isInformationServer()) { + QQmlProperty property(object(), "visible", context()); + + if (!property.isValid()) + return; + + bool visible = property.read().toBool(); + + if (hide && visible) { + setPropertyVariant("visible", false); + m_hidden = true; + } else if (!hide && !visible && m_hidden) { + setPropertyVariant("visible", true); + m_hidden = false; + } + } +} + QRectF QuickItemNodeInstance::contentItemBoundingBox() const { if (contentItem()) { diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h index 7e9bd53341..5f2f208913 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h @@ -106,6 +106,8 @@ public: static bool unifiedRenderPath(); static bool unifiedRenderPathOrQt6(); + void setHiddenInEditor(bool b) override; + protected: explicit QuickItemNodeInstance(QQuickItem*); QQuickItem *quickItem() const; @@ -139,6 +141,7 @@ private: //variables double m_y; double m_width; double m_height; + bool m_hidden = false; static bool s_createEffectItem; static bool s_unifiedRenderPath; }; |