diff options
author | Giulio Camuffo <giulio.camuffo@kdab.com> | 2019-02-14 17:02:20 +0100 |
---|---|---|
committer | Giulio Camuffo <giulio.camuffo@kdab.com> | 2019-02-25 12:34:36 +0000 |
commit | 6cb3fa6f4d7b3a504bba063d964a8a5868559ba5 (patch) | |
tree | e3353d12174a8a2ad84b4ceb8ee705ef6900c372 /tests | |
parent | e1f81585c21582abe3b3d0c295b25ef4e3270c14 (diff) |
Add a viewport property to QPickEvent
The new property will contain the viewport in which the input event originated.
This is useful in cases where an entity with an ObjectPicker visible in multiple
viewports wants to react differently based on which viewport was clicked.
Change-Id: Ic5fb6393f3c3087cc3f54cd68c025d0e59ec2f20
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'tests')
4 files changed, 56 insertions, 33 deletions
diff --git a/tests/auto/render/objectpicker/tst_objectpicker.cpp b/tests/auto/render/objectpicker/tst_objectpicker.cpp index 644849102..99b2af538 100644 --- a/tests/auto/render/objectpicker/tst_objectpicker.cpp +++ b/tests/auto/render/objectpicker/tst_objectpicker.cpp @@ -142,7 +142,7 @@ private Q_SLOTS: Qt3DRender::QPickEventPtr event(new Qt3DRender::QPickEvent); // WHEN - objectPicker.onPressed(event); + objectPicker.onPressed(event, Qt3DCore::QNodeId()); // THEN QCOMPARE(arbiter.events.count(), 1); @@ -152,7 +152,7 @@ private Q_SLOTS: arbiter.events.clear(); // WHEN - objectPicker.onReleased(event); + objectPicker.onReleased(event, Qt3DCore::QNodeId()); // THEN QCOMPARE(arbiter.events.count(), 1); @@ -162,7 +162,7 @@ private Q_SLOTS: arbiter.events.clear(); // WHEN - objectPicker.onClicked(event); + objectPicker.onClicked(event, Qt3DCore::QNodeId()); // THEN QCOMPARE(arbiter.events.count(), 1); diff --git a/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp b/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp index 5e51c8aa7..ad4d69d04 100644 --- a/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp +++ b/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp @@ -56,6 +56,7 @@ #include <Qt3DRender/private/loadbufferjob_p.h> #include <Qt3DRender/private/buffermanager_p.h> #include <Qt3DRender/private/geometryrenderermanager_p.h> +#include <Qt3DRender/private/qobjectpicker_p.h> #include <private/qpickevent_p.h> @@ -783,11 +784,11 @@ private Q_SLOTS: QCOMPARE(arbiter.events.count(), backAndFrontPicking ? 2 : 1); Qt3DCore::QPropertyUpdatedChangePtr change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "pressed"); - Qt3DRender::QPickEventPtr pickEvent = change->value().value<Qt3DRender::QPickEventPtr>(); - QVERIFY(pickEvent); - QVERIFY(!Qt3DRender::QPickEventPrivate::get(pickEvent.data())->m_entity.isNull()); + Qt3DRender::QObjectPickerEvent pickEvent = change->value().value<Qt3DRender::QObjectPickerEvent>(); + QVERIFY(pickEvent.event); + QVERIFY(!Qt3DRender::QPickEventPrivate::get(pickEvent.event.data())->m_entity.isNull()); if (pickMethod == Qt3DRender::QPickingSettings::TrianglePicking) - QVERIFY(pickEvent.dynamicCast<Qt3DRender::QPickTriangleEvent>()); + QVERIFY(pickEvent.event.dynamicCast<Qt3DRender::QPickTriangleEvent>()); arbiter.events.clear(); @@ -804,11 +805,11 @@ private Q_SLOTS: QCOMPARE(arbiter.events.count(), backAndFrontPicking ? 2 : 1); change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "moved"); - pickEvent = change->value().value<Qt3DRender::QPickEventPtr>(); - QVERIFY(pickEvent); - QVERIFY(!Qt3DRender::QPickEventPrivate::get(pickEvent.data())->m_entity.isNull()); + pickEvent = change->value().value<Qt3DRender::QObjectPickerEvent>(); + QVERIFY(pickEvent.event); + QVERIFY(!Qt3DRender::QPickEventPrivate::get(pickEvent.event.data())->m_entity.isNull()); if (pickMethod == Qt3DRender::QPickingSettings::TrianglePicking) - QVERIFY(pickEvent.dynamicCast<Qt3DRender::QPickTriangleEvent>()); + QVERIFY(pickEvent.event.dynamicCast<Qt3DRender::QPickTriangleEvent>()); arbiter.events.clear(); @@ -825,18 +826,18 @@ private Q_SLOTS: QCOMPARE(arbiter.events.count(), 2); change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "released"); - pickEvent = change->value().value<Qt3DRender::QPickEventPtr>(); - QVERIFY(pickEvent); - QVERIFY(!Qt3DRender::QPickEventPrivate::get(pickEvent.data())->m_entity.isNull()); + pickEvent = change->value().value<Qt3DRender::QObjectPickerEvent>(); + QVERIFY(pickEvent.event); + QVERIFY(!Qt3DRender::QPickEventPrivate::get(pickEvent.event.data())->m_entity.isNull()); if (pickMethod == Qt3DRender::QPickingSettings::TrianglePicking) - QVERIFY(pickEvent.dynamicCast<Qt3DRender::QPickTriangleEvent>()); + QVERIFY(pickEvent.event.dynamicCast<Qt3DRender::QPickTriangleEvent>()); change = arbiter.events.last().staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "clicked"); - pickEvent = change->value().value<Qt3DRender::QPickEventPtr>(); - QVERIFY(pickEvent); - QVERIFY(!Qt3DRender::QPickEventPrivate::get(pickEvent.data())->m_entity.isNull()); + pickEvent = change->value().value<Qt3DRender::QObjectPickerEvent>(); + QVERIFY(pickEvent.event); + QVERIFY(!Qt3DRender::QPickEventPrivate::get(pickEvent.event.data())->m_entity.isNull()); if (pickMethod == Qt3DRender::QPickingSettings::TrianglePicking) - QVERIFY(pickEvent.dynamicCast<Qt3DRender::QPickTriangleEvent>()); + QVERIFY(pickEvent.event.dynamicCast<Qt3DRender::QPickTriangleEvent>()); arbiter.events.clear(); @@ -912,10 +913,10 @@ private Q_SLOTS: QCOMPARE(arbiter.events.count(), 1); Qt3DCore::QPropertyUpdatedChangePtr change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "pressed"); - Qt3DRender::QPickEventPtr pickEvent = change->value().value<Qt3DRender::QPickEventPtr>(); - QVERIFY(pickEvent); - QVERIFY(!Qt3DRender::QPickEventPrivate::get(pickEvent.data())->m_entity.isNull()); - QVERIFY(pickEvent.dynamicCast<Qt3DRender::QPickTriangleEvent>()); + Qt3DRender::QObjectPickerEvent pickEvent = change->value().value<Qt3DRender::QObjectPickerEvent>(); + QVERIFY(pickEvent.event); + QVERIFY(!Qt3DRender::QPickEventPrivate::get(pickEvent.event.data())->m_entity.isNull()); + QVERIFY(pickEvent.event.dynamicCast<Qt3DRender::QPickTriangleEvent>()); arbiter.events.clear(); @@ -932,9 +933,9 @@ private Q_SLOTS: QCOMPARE(arbiter.events.count(), 1); change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "released"); - pickEvent = change->value().value<Qt3DRender::QPickEventPtr>(); - QVERIFY(pickEvent); - QVERIFY(Qt3DRender::QPickEventPrivate::get(pickEvent.data())->m_entity.isNull()); + pickEvent = change->value().value<Qt3DRender::QObjectPickerEvent>(); + QVERIFY(pickEvent.event); + QVERIFY(Qt3DRender::QPickEventPrivate::get(pickEvent.event.data())->m_entity.isNull()); arbiter.events.clear(); @@ -1467,8 +1468,8 @@ private Q_SLOTS: QVERIFY(backendPicker->isPressed()); Qt3DCore::QPropertyUpdatedChangePtr change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "pressed"); - Qt3DRender::QPickEventPtr pickEvent = change->value().value<Qt3DRender::QPickEventPtr>(); - QVERIFY(pickEvent); + Qt3DRender::QObjectPickerEvent pickEvent = change->value().value<Qt3DRender::QObjectPickerEvent>(); + QVERIFY(pickEvent.event); arbiter.events.clear(); } diff --git a/tests/auto/render/picking/tst_picking.cpp b/tests/auto/render/picking/tst_picking.cpp index 47027bf56..4f4201e07 100644 --- a/tests/auto/render/picking/tst_picking.cpp +++ b/tests/auto/render/picking/tst_picking.cpp @@ -30,10 +30,12 @@ #include <Qt3DCore/qentity.h> #include <Qt3DCore/qtransform.h> #include <Qt3DCore/QPropertyUpdatedChange> +#include <Qt3DCore/private/qscene_p.h> #include <Qt3DRender/private/qboundingvolumeprovider_p.h> #include <Qt3DRender/private/pickboundingvolumejob_p.h> #include <Qt3DRender/private/objectpicker_p.h> #include <Qt3DRender/qobjectpicker.h> +#include <Qt3DRender/private/qobjectpicker_p.h> #include <Qt3DExtras/qspheremesh.h> #include <Qt3DRender/qattribute.h> #include <Qt3DRender/qbuffer.h> @@ -139,17 +141,22 @@ private Q_SLOTS: void testEventPressedAcceptPropagation() { // GIVEN + Qt3DCore::QScene scene; PickableEntity root(QVector3D(), 5.0f); PickableEntity child1(QVector3D(), 5.0f, &root); PickableEntity child2(QVector3D(), 5.0f, &root); PickableEntity child11(QVector3D(), 5.0f, &child1); + Qt3DCore::QNodePrivate::get(root.picker)->setScene(&scene); + Qt3DCore::QNodePrivate::get(child1.picker)->setScene(&scene); + Qt3DCore::QNodePrivate::get(child2.picker)->setScene(&scene); + Qt3DCore::QNodePrivate::get(child11.picker)->setScene(&scene); QCoreApplication::processEvents(); // WHEN Qt3DRender::QPickEventPtr event(new Qt3DRender::QPickEvent()); QVariant v; - v.setValue<Qt3DRender::QPickEventPtr>(event); + v.setValue<Qt3DRender::QObjectPickerEvent>({event, Qt3DCore::QNodeId()}); Qt3DCore::QPropertyUpdatedChangePtr e(new Qt3DCore::QPropertyUpdatedChange(child11.id())); e->setPropertyName("pressed"); e->setValue(v); @@ -189,17 +196,22 @@ private Q_SLOTS: void testEventReleasedAcceptPropagation() { // GIVEN + Qt3DCore::QScene scene; PickableEntity root(QVector3D(), 5.0f); PickableEntity child1(QVector3D(), 5.0f, &root); PickableEntity child2(QVector3D(), 5.0f, &root); PickableEntity child11(QVector3D(), 5.0f, &child1); + Qt3DCore::QNodePrivate::get(root.picker)->setScene(&scene); + Qt3DCore::QNodePrivate::get(child1.picker)->setScene(&scene); + Qt3DCore::QNodePrivate::get(child2.picker)->setScene(&scene); + Qt3DCore::QNodePrivate::get(child11.picker)->setScene(&scene); QCoreApplication::processEvents(); // WHEN Qt3DRender::QPickEventPtr event(new Qt3DRender::QPickEvent()); QVariant v; - v.setValue<Qt3DRender::QPickEventPtr>(event); + v.setValue<Qt3DRender::QObjectPickerEvent>({event, Qt3DCore::QNodeId()}); Qt3DCore::QPropertyUpdatedChangePtr e(new Qt3DCore::QPropertyUpdatedChange(child11.id())); e->setPropertyName("pressed"); e->setValue(v); @@ -235,17 +247,22 @@ private Q_SLOTS: void testEventClickedAcceptPropagation() { // GIVEN + Qt3DCore::QScene scene; PickableEntity root(QVector3D(), 5.0f); PickableEntity child1(QVector3D(), 5.0f, &root); PickableEntity child2(QVector3D(), 5.0f, &root); PickableEntity child11(QVector3D(), 5.0f, &child1); + Qt3DCore::QNodePrivate::get(root.picker)->setScene(&scene); + Qt3DCore::QNodePrivate::get(child1.picker)->setScene(&scene); + Qt3DCore::QNodePrivate::get(child2.picker)->setScene(&scene); + Qt3DCore::QNodePrivate::get(child11.picker)->setScene(&scene); QCoreApplication::processEvents(); // WHEN Qt3DRender::QPickEventPtr event(new Qt3DRender::QPickEvent()); QVariant v; - v.setValue<Qt3DRender::QPickEventPtr>(event); + v.setValue<Qt3DRender::QObjectPickerEvent>({event, Qt3DCore::QNodeId()}); Qt3DCore::QPropertyUpdatedChangePtr e(new Qt3DCore::QPropertyUpdatedChange(child11.id())); e->setPropertyName("clicked"); e->setValue(v); diff --git a/tests/auto/render/qobjectpicker/tst_qobjectpicker.cpp b/tests/auto/render/qobjectpicker/tst_qobjectpicker.cpp index bd486774c..2f351331a 100644 --- a/tests/auto/render/qobjectpicker/tst_qobjectpicker.cpp +++ b/tests/auto/render/qobjectpicker/tst_qobjectpicker.cpp @@ -262,8 +262,10 @@ private Q_SLOTS: { // GIVEN TestArbiter arbiter; + Qt3DCore::QScene scene; QScopedPointer<Qt3DRender::QObjectPicker> objectPicker(new Qt3DRender::QObjectPicker()); arbiter.setArbiterOnNode(objectPicker.data()); + Qt3DCore::QNodePrivate::get(objectPicker.data())->setScene(&scene); // WHEN objectPicker->setHoverEnabled(true); @@ -317,9 +319,12 @@ private Q_SLOTS: QFETCH(QByteArray, signalPrototype); QFETCH(QByteArray, propertyName); QFETCH(bool, requiresEvent); + Qt3DCore::QScene scene; QScopedPointer<MyObjectPicker> objectPicker(new MyObjectPicker()); + Qt3DCore::QNodePrivate::get(objectPicker.data())->setScene(&scene); + QSignalSpy spy(objectPicker.data(), signalPrototype.constData()); - Qt3DRender::QPickEventPtr event(new Qt3DRender::QPickEvent()); + Qt3DRender::QObjectPickerEvent event {Qt3DRender::QPickEventPtr::create(), Qt3DCore::QNodeId()}; // WHEN // Create Backend Change and distribute it to frontend node @@ -328,7 +333,7 @@ private Q_SLOTS: if (requiresEvent) { QVariant v; - v.setValue<Qt3DRender::QPickEventPtr>(event); + v.setValue<Qt3DRender::QObjectPickerEvent>(event); e->setValue(v); } objectPicker->sceneChangeEvent(e); |