summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Määttä <antti.maatta@qt.io>2016-10-25 11:36:38 +0300
committerAntti Määttä <antti.maatta@qt.io>2017-01-25 11:22:13 +0000
commit6f36bb5edecea1efb13450672be29af32e1f49e8 (patch)
tree588a1434a548105498326c0fa03b4fe2b05ed63d
parent34ad7528652c9016548277331e0e393ab7a782c6 (diff)
Add QEventForward to QObjectPicker
Change-Id: I3a1a7ffdf2c5ec765e9f9e10ed5f15e3902ae15d Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--src/render/picking/objectpicker.cpp15
-rw-r--r--src/render/picking/objectpicker_p.h3
-rw-r--r--src/render/picking/qobjectpicker.cpp33
-rw-r--r--src/render/picking/qobjectpicker.h6
-rw-r--r--src/render/picking/qobjectpicker_p.h3
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