diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2018-03-02 15:29:26 +0100 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2018-03-09 15:05:22 +0000 |
commit | 8a8b8c46025752175edf7d894613eeb33188b005 (patch) | |
tree | af8bb6050c81a6377b5d6589d3104c998572cc7a /share/qtcreator | |
parent | 98889e1a3801d66d9bfdb7474316bfb76ef79c43 (diff) |
QmlDesigner: Add meta hint if item renders children directly
In some cases items render their children directly using an effect.
In this case we do not want to hide the children when calling
refFromEffectItem().
If the hint takesOverRenderingOfChildren is set in the .metainfo hints
for a parent item we forward a flag to the puppet and refFromEffectItem()
is not hiding this item,
Change-Id: I37a8c0ad8a15bc914c220e03b1b744779431d655
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Diffstat (limited to 'share/qtcreator')
7 files changed, 65 insertions, 12 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp b/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp index bb9ec181610..6e480ceef98 100644 --- a/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp +++ b/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp @@ -44,9 +44,24 @@ InstanceContainer::InstanceContainer() { } -InstanceContainer::InstanceContainer(qint32 instanceId, const TypeName &type, int majorNumber, int minorNumber, const QString &componentPath, const QString &nodeSource, NodeSourceType nodeSourceType, NodeMetaType metaType) - : m_instanceId(instanceId), m_type(properDelemitingOfType(type)), m_majorNumber(majorNumber), m_minorNumber(minorNumber), m_componentPath(componentPath), - m_nodeSource(nodeSource), m_nodeSourceType(nodeSourceType), m_metaType(metaType) +InstanceContainer::InstanceContainer(qint32 instanceId, + const TypeName &type, + int majorNumber, + int minorNumber, + const QString &componentPath, + const QString &nodeSource, + NodeSourceType nodeSourceType, + NodeMetaType metaType, + NodeFlags metaFlags) + : m_instanceId(instanceId) + ,m_type(properDelemitingOfType(type)) + ,m_majorNumber(majorNumber) + ,m_minorNumber(minorNumber) + ,m_componentPath(componentPath) + ,m_nodeSource(nodeSource) + ,m_nodeSourceType(nodeSourceType) + ,m_metaType(metaType) + ,m_metaFlags(metaFlags) { } @@ -90,6 +105,16 @@ InstanceContainer::NodeMetaType InstanceContainer::metaType() const return static_cast<NodeMetaType>(m_metaType); } +InstanceContainer::NodeFlags InstanceContainer::metaFlags() const +{ + return m_metaFlags; +} + +bool InstanceContainer::checkFlag(NodeFlag flag) const +{ + return NodeFlags(m_metaFlags).testFlag(flag); +} + QDataStream &operator<<(QDataStream &out, const InstanceContainer &container) { out << container.instanceId(); @@ -100,6 +125,7 @@ QDataStream &operator<<(QDataStream &out, const InstanceContainer &container) out << container.nodeSource(); out << qint32(container.nodeSourceType()); out << qint32(container.metaType()); + out << qint32(container.metaFlags()); return out; } @@ -115,6 +141,7 @@ QDataStream &operator>>(QDataStream &in, InstanceContainer &container) in >> container.m_nodeSource; in >> container.m_nodeSourceType; in >> container.m_metaType; + in >> container.m_metaFlags; return in; } diff --git a/share/qtcreator/qml/qmlpuppet/container/instancecontainer.h b/share/qtcreator/qml/qmlpuppet/container/instancecontainer.h index 6dc86bf93c9..9d4c21b1274 100644 --- a/share/qtcreator/qml/qmlpuppet/container/instancecontainer.h +++ b/share/qtcreator/qml/qmlpuppet/container/instancecontainer.h @@ -54,8 +54,22 @@ public: ItemMetaType }; + enum NodeFlag { + ParentTakesOverRendering = 1 + }; + + Q_DECLARE_FLAGS(NodeFlags, NodeFlag) + InstanceContainer(); - InstanceContainer(qint32 instanceId, const TypeName &type, int majorNumber, int minorNumber, const QString &componentPath, const QString &nodeSource, NodeSourceType nodeSourceType, NodeMetaType metaType); + InstanceContainer(qint32 instanceId, + const TypeName &type, + int majorNumber, + int minorNumber, + const QString &componentPath, + const QString &nodeSource, + NodeSourceType nodeSourceType, + NodeMetaType metaType, + NodeFlags metaFlags); qint32 instanceId() const; TypeName type() const; @@ -65,6 +79,8 @@ public: QString nodeSource() const; NodeSourceType nodeSourceType() const; NodeMetaType metaType() const; + bool checkFlag(NodeFlag flag) const; + NodeFlags metaFlags() const; private: qint32 m_instanceId = -1; @@ -75,6 +91,7 @@ private: QString m_nodeSource; qint32 m_nodeSourceType = 0; qint32 m_metaType = 0; + qint32 m_metaFlags = 0; }; QDebug operator <<(QDebug debug, const InstanceContainer &command); @@ -82,3 +99,4 @@ QDebug operator <<(QDebug debug, const InstanceContainer &command); } // namespace QmlDesigner Q_DECLARE_METATYPE(QmlDesigner::InstanceContainer) +Q_DECLARE_OPERATORS_FOR_FLAGS(QmlDesigner::InstanceContainer::NodeFlags) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp index 1dc4716649c..3ee177a3872 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp @@ -126,7 +126,8 @@ void ObjectNodeInstance::initializePropertyWatcher(const ObjectNodeInstance::Poi m_signalSpy.setObjectNodeInstance(objectNodeInstance); } -void ObjectNodeInstance::initialize(const ObjectNodeInstance::Pointer &objectNodeInstance) +void ObjectNodeInstance::initialize(const ObjectNodeInstance::Pointer &objectNodeInstance, + InstanceContainer::NodeFlags /*flags*/) { initializePropertyWatcher(objectNodeInstance); QmlPrivateGate::registerNodeInstanceMetaObject(objectNodeInstance->object(), objectNodeInstance->nodeInstanceServer()->engine()); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h index 8266f0addf8..5977d3d31ce 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h @@ -28,6 +28,8 @@ #include "nodeinstanceserver.h" #include "nodeinstancesignalspy.h" +#include "instancecontainer.h" + #include <QPainter> #include <QSharedPointer> #include <QWeakPointer> @@ -78,7 +80,7 @@ public: NodeInstanceServer *nodeInstanceServer() const; void setNodeInstanceServer(NodeInstanceServer *server); - virtual void initialize(const Pointer &objectNodeInstance); + virtual void initialize(const Pointer &objectNodeInstance, InstanceContainer::NodeFlags flags); virtual QImage renderImage() const; virtual QImage renderPreviewImage(const QSize &previewImageSize) const; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp index a30fbc184a9..647d1d74706 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp @@ -156,7 +156,8 @@ void QuickItemNodeInstance::createEffectItem(bool createEffectItem) s_createEffectItem = createEffectItem; } -void QuickItemNodeInstance::initialize(const ObjectNodeInstance::Pointer &objectNodeInstance) +void QuickItemNodeInstance::initialize(const ObjectNodeInstance::Pointer &objectNodeInstance, + InstanceContainer::NodeFlags flags) { if (instanceId() == 0) { @@ -167,10 +168,11 @@ void QuickItemNodeInstance::initialize(const ObjectNodeInstance::Pointer &object if (quickItem()->window()) { if (s_createEffectItem || instanceId() == 0) - designerSupport()->refFromEffectItem(quickItem()); + designerSupport()->refFromEffectItem(quickItem(), + !flags.testFlag(InstanceContainer::ParentTakesOverRendering)); } - ObjectNodeInstance::initialize(objectNodeInstance); + ObjectNodeInstance::initialize(objectNodeInstance, flags); quickItem()->update(); } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h index d655a9a1032..1f000f1ba2b 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h @@ -46,7 +46,8 @@ public: static Pointer create(QObject *objectToBeWrapped); static void createEffectItem(bool createEffectItem); - void initialize(const ObjectNodeInstance::Pointer &objectNodeInstance) override; + void initialize(const ObjectNodeInstance::Pointer &objectNodeInstance, + InstanceContainer::NodeFlags flags) override; QQuickItem *contentItem() const override; bool hasContent() const override; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp index 58b17e2451e..2f090517dc8 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp @@ -188,7 +188,9 @@ Internal::ObjectNodeInstance::Pointer ServerNodeInstance::createInstance(QObject return instance; } -ServerNodeInstance ServerNodeInstance::create(NodeInstanceServer *nodeInstanceServer, const InstanceContainer &instanceContainer, ComponentWrap componentWrap) +ServerNodeInstance ServerNodeInstance::create(NodeInstanceServer *nodeInstanceServer, + const InstanceContainer &instanceContainer, + ComponentWrap componentWrap) { Q_ASSERT(instanceContainer.instanceId() != -1); Q_ASSERT(nodeInstanceServer); @@ -229,7 +231,7 @@ ServerNodeInstance ServerNodeInstance::create(NodeInstanceServer *nodeInstanceSe instance.internalInstance()->setInstanceId(instanceContainer.instanceId()); - instance.internalInstance()->initialize(instance.m_nodeInstance); + instance.internalInstance()->initialize(instance.m_nodeInstance, instanceContainer.metaFlags()); return instance; } |