summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2017-01-03 21:59:58 +0000
committerMike Krus <mike.krus@kdab.com>2017-01-04 07:21:17 +0000
commiteb2bfbbce7fd5f0aa9e7d9744487c3d3ac3bb9d2 (patch)
tree12f47de484776ecfdb61abb808d3fa20503f8931
parent63c2d34b80b4b41a4057ffe40eb11c7c6e49a20a (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.cpp7
-rw-r--r--src/render/jobs/pickboundingvolumejob_p.h2
-rw-r--r--tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp18
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();