diff options
author | Antti Määttä <antti.maatta@qt.io> | 2016-10-25 11:36:38 +0300 |
---|---|---|
committer | Antti Määttä <antti.maatta@qt.io> | 2017-01-25 11:22:13 +0000 |
commit | 6f36bb5edecea1efb13450672be29af32e1f49e8 (patch) | |
tree | 588a1434a548105498326c0fa03b4fe2b05ed63d | |
parent | 34ad7528652c9016548277331e0e393ab7a782c6 (diff) |
Add QEventForward to QObjectPicker
Change-Id: I3a1a7ffdf2c5ec765e9f9e10ed5f15e3902ae15d
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | src/render/picking/objectpicker.cpp | 15 | ||||
-rw-r--r-- | src/render/picking/objectpicker_p.h | 3 | ||||
-rw-r--r-- | src/render/picking/qobjectpicker.cpp | 33 | ||||
-rw-r--r-- | src/render/picking/qobjectpicker.h | 6 | ||||
-rw-r--r-- | src/render/picking/qobjectpicker_p.h | 3 |
5 files changed, 60 insertions, 0 deletions
diff --git a/src/render/picking/objectpicker.cpp b/src/render/picking/objectpicker.cpp index eff6e3b3c..2fb1752a4 100644 --- a/src/render/picking/objectpicker.cpp +++ b/src/render/picking/objectpicker.cpp @@ -70,6 +70,7 @@ void ObjectPicker::cleanup() m_isPressed = false; m_hoverEnabled = false; m_dragEnabled = false; + m_eventForward = Qt3DCore::QNodeId(); } void ObjectPicker::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) @@ -78,6 +79,7 @@ void ObjectPicker::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr const auto &data = typedChange->data; m_hoverEnabled = data.hoverEnabled; m_dragEnabled = data.dragEnabled; + m_eventForward = data.eventForward; m_isDirty = true; } @@ -92,6 +94,9 @@ void ObjectPicker::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) } else if (propertyChange->propertyName() == QByteArrayLiteral("dragEnabled")) { m_dragEnabled = propertyChange->value().toBool(); m_isDirty = true; + } else if (propertyChange->propertyName() == QByteArrayLiteral("eventForward")) { + m_eventForward = propertyChange->value().value<Qt3DCore::QNodeId>(); + m_isDirty = true; } markDirty(AbstractRenderer::AllDirty); } @@ -129,6 +134,16 @@ bool ObjectPicker::isDragEnabled() const return m_dragEnabled; } +bool ObjectPicker::isEventForwardingEnabled() const +{ + return Qt3DCore::QNodeId() != m_eventForward; +} + +Qt3DCore::QNodeId ObjectPicker::eventForward() const +{ + return m_eventForward; +} + void ObjectPicker::onClicked(QPickEventPtr event) { auto e = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); diff --git a/src/render/picking/objectpicker_p.h b/src/render/picking/objectpicker_p.h index f116aa332..a90b48e1d 100644 --- a/src/render/picking/objectpicker_p.h +++ b/src/render/picking/objectpicker_p.h @@ -76,6 +76,8 @@ public: void makeDirty(); bool isHoverEnabled() const; bool isDragEnabled() const; + bool isEventForwardingEnabled() const; + Qt3DCore::QNodeId eventForward() const; void onClicked(QPickEventPtr event); void onMoved(QPickEventPtr event); @@ -91,6 +93,7 @@ private: bool m_isPressed; bool m_hoverEnabled; bool m_dragEnabled; + Qt3DCore::QNodeId m_eventForward; }; } // Render diff --git a/src/render/picking/qobjectpicker.cpp b/src/render/picking/qobjectpicker.cpp index 1842b7fee..9fa8b774c 100644 --- a/src/render/picking/qobjectpicker.cpp +++ b/src/render/picking/qobjectpicker.cpp @@ -43,6 +43,7 @@ #include <Qt3DCore/private/qcomponent_p.h> #include <Qt3DCore/qpropertyupdatedchange.h> #include <Qt3DRender/qpickevent.h> +#include <Qt3DRender/qeventforward.h> QT_BEGIN_NAMESPACE @@ -203,6 +204,37 @@ void QObjectPicker::setDragEnabled(bool dragEnabled) } /*! + \qmlproperty EventForward Qt3D.Render::ObjectPicker::eventForward + Holds the EventForward type. +*/ +/*! + \property Qt3DRender::QObjectPicker::eventForward + Holds the EventForward type. + */ +QEventForward *QObjectPicker::eventForward() const +{ + Q_D(const QObjectPicker); + return d->m_eventForward; +} + +void QObjectPicker::setEventForward(QEventForward *eventForward) +{ + Q_D(QObjectPicker); + if (d->m_eventForward != eventForward) { + if (d->m_eventForward) + d->unregisterDestructionHelper(d->m_eventForward); + d->m_eventForward = eventForward; + if (eventForward) { + if (eventForward->parent() == nullptr) + eventForward->setParent(this); + d->registerDestructionHelper(eventForward, &QObjectPicker::setEventForward, + d->m_eventForward); + } + emit eventForwardChanged(eventForward); + } +} + +/*! \qmlproperty bool Qt3D.Render::ObjectPicker::dragEnabled */ /*! @@ -402,6 +434,7 @@ Qt3DCore::QNodeCreatedChangeBasePtr QObjectPicker::createNodeCreationChange() co Q_D(const QObjectPicker); data.hoverEnabled = d->m_hoverEnabled; data.dragEnabled = d->m_dragEnabled; + data.eventForward = Qt3DCore::qIdForNode(d->m_eventForward); return creationChange; } diff --git a/src/render/picking/qobjectpicker.h b/src/render/picking/qobjectpicker.h index 950fff2cc..b00178851 100644 --- a/src/render/picking/qobjectpicker.h +++ b/src/render/picking/qobjectpicker.h @@ -41,6 +41,7 @@ #define QT3DRENDER_QOBJECTPICKER_H #include <Qt3DCore/qcomponent.h> +#include <Qt3DRender/qeventforward.h> #include <Qt3DRender/qt3drender_global.h> QT_BEGIN_NAMESPACE @@ -58,6 +59,7 @@ class QT3DRENDERSHARED_EXPORT QObjectPicker : public Qt3DCore::QComponent Q_PROPERTY(bool dragEnabled READ isDragEnabled WRITE setDragEnabled NOTIFY dragEnabledChanged) Q_PROPERTY(bool pressed READ isPressed NOTIFY pressedChanged) Q_PROPERTY(bool containsMouse READ containsMouse NOTIFY containsMouseChanged) + Q_PROPERTY(Qt3DRender::QEventForward *eventForward READ eventForward WRITE setEventForward NOTIFY eventForwardChanged) public: explicit QObjectPicker(QNode *parent = nullptr); @@ -69,9 +71,12 @@ public: bool containsMouse() const; bool isPressed() const; + QEventForward *eventForward() const; + public Q_SLOTS: void setHoverEnabled(bool hoverEnabled); void setDragEnabled(bool dragEnabled); + void setEventForward(QEventForward *eventForward); Q_SIGNALS: void pressed(Qt3DRender::QPickEvent *pick); @@ -84,6 +89,7 @@ Q_SIGNALS: void dragEnabledChanged(bool dragEnabled); void pressedChanged(bool pressed); void containsMouseChanged(bool containsMouse); + void eventForwardChanged(QEventForward *eventForward); protected: void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change) Q_DECL_OVERRIDE; diff --git a/src/render/picking/qobjectpicker_p.h b/src/render/picking/qobjectpicker_p.h index 884e5673b..bddc213cc 100644 --- a/src/render/picking/qobjectpicker_p.h +++ b/src/render/picking/qobjectpicker_p.h @@ -68,6 +68,7 @@ public: , m_pressed(false) , m_containsMouse(false) , m_acceptedLastPressedEvent(true) + , m_eventForward(nullptr) { m_shareable = false; } @@ -78,6 +79,7 @@ public: bool m_pressed; bool m_containsMouse; bool m_acceptedLastPressedEvent; + QEventForward *m_eventForward; enum EventType { Pressed, @@ -101,6 +103,7 @@ struct QObjectPickerData { bool hoverEnabled; bool dragEnabled; + Qt3DCore::QNodeId eventForward; }; } // namespace Qt3DRender |