diff options
author | Mike Krus <mike.krus@kdab.com> | 2017-01-03 21:59:58 +0000 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2017-01-04 07:21:17 +0000 |
commit | eb2bfbbce7fd5f0aa9e7d9744487c3d3ac3bb9d2 (patch) | |
tree | 12f47de484776ecfdb61abb808d3fa20503f8931 | |
parent | 63c2d34b80b4b41a4057ffe40eb11c7c6e49a20a (diff) |
Make sure QPickTriangleEvent gets generated
Pass down flag to even creation method.
Add unit tests for type of event received.
Task-number: QTBUG-57071
Change-Id: Iaee32002e2f5a46ca526af5375f8a50361a6ca3e
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r-- | src/render/jobs/pickboundingvolumejob.cpp | 7 | ||||
-rw-r--r-- | src/render/jobs/pickboundingvolumejob_p.h | 2 | ||||
-rw-r--r-- | tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp | 18 |
3 files changed, 22 insertions, 5 deletions
diff --git a/src/render/jobs/pickboundingvolumejob.cpp b/src/render/jobs/pickboundingvolumejob.cpp index 4a228681a..c2a3272b4 100644 --- a/src/render/jobs/pickboundingvolumejob.cpp +++ b/src/render/jobs/pickboundingvolumejob.cpp @@ -204,7 +204,7 @@ bool PickBoundingVolumeJob::runHelper() } // Dispatch events based on hit results - dispatchPickEvents(event, sphereHits, eventButton, eventButtons, eventModifiers); + dispatchPickEvents(event, sphereHits, eventButton, eventButtons, eventModifiers, trianglePickingRequested); } } @@ -231,13 +231,12 @@ void PickBoundingVolumeJob::dispatchPickEvents(const QMouseEvent &event, const PickingUtils::CollisionVisitor::HitList &sphereHits, QPickEvent::Buttons eventButton, int eventButtons, - int eventModifiers) + int eventModifiers, + bool trianglePickingRequested) { ObjectPicker *lastCurrentPicker = m_manager->objectPickerManager()->data(m_currentPicker); // If we have hits if (!sphereHits.isEmpty()) { - - const bool trianglePickingRequested = (m_renderSettings->pickResultMode() == QPickingSettings::AllPicks); // Note: how can we control that we want the first/last/all elements along the ray to be picked // How do we differentiate betwnee an Entity with no GeometryRenderer and one with one, both having diff --git a/src/render/jobs/pickboundingvolumejob_p.h b/src/render/jobs/pickboundingvolumejob_p.h index e0a759d6c..913a5ace0 100644 --- a/src/render/jobs/pickboundingvolumejob_p.h +++ b/src/render/jobs/pickboundingvolumejob_p.h @@ -104,7 +104,7 @@ protected: void dispatchPickEvents(const QMouseEvent &event, const PickingUtils::CollisionVisitor::HitList &sphereHits, QPickEvent::Buttons eventButton, int eventButtons, - int eventModifiers); + int eventModifiers, bool trianglePickingRequested); private: NodeManagers *m_manager; diff --git a/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp b/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp index 11b60f3c2..f39a030f2 100644 --- a/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp +++ b/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp @@ -38,6 +38,8 @@ #include <Qt3DRender/QCamera> #include <Qt3DRender/QObjectPicker> +#include <Qt3DRender/QPickEvent> +#include <Qt3DRender/QPickTriangleEvent> #include <Qt3DRender/private/nodemanagers_p.h> #include <Qt3DRender/private/managers_p.h> #include <Qt3DRender/private/entity_p.h> @@ -719,6 +721,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); + if (pickMethod == Qt3DRender::QPickingSettings::TrianglePicking) + QVERIFY(pickEvent.dynamicCast<Qt3DRender::QPickTriangleEvent>()); arbiter.events.clear(); @@ -734,6 +740,10 @@ private Q_SLOTS: QCOMPARE(arbiter.events.count(), 1); change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "moved"); + pickEvent = change->value().value<Qt3DRender::QPickEventPtr>(); + QVERIFY(pickEvent); + if (pickMethod == Qt3DRender::QPickingSettings::TrianglePicking) + QVERIFY(pickEvent.dynamicCast<Qt3DRender::QPickTriangleEvent>()); arbiter.events.clear(); @@ -749,8 +759,16 @@ private Q_SLOTS: QCOMPARE(arbiter.events.count(), 2); change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "clicked"); + pickEvent = change->value().value<Qt3DRender::QPickEventPtr>(); + QVERIFY(pickEvent); + if (pickMethod == Qt3DRender::QPickingSettings::TrianglePicking) + QVERIFY(pickEvent.dynamicCast<Qt3DRender::QPickTriangleEvent>()); change = arbiter.events.last().staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "released"); + pickEvent = change->value().value<Qt3DRender::QPickEventPtr>(); + QVERIFY(pickEvent); + if (pickMethod == Qt3DRender::QPickingSettings::TrianglePicking) + QVERIFY(pickEvent.dynamicCast<Qt3DRender::QPickTriangleEvent>()); arbiter.events.clear(); |