diff options
author | Liang Qi <liang.qi@qt.io> | 2018-12-11 15:08:00 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2018-12-11 15:08:00 +0100 |
commit | c9ce0deeb8f2bb79c446e41584f753f1b1bfe17f (patch) | |
tree | 5e9a06346ea22e6e9a2fafd6a2ac7394c73648c6 /tests | |
parent | f1b333c36a19cf85eab798fc1b1952ed063fedfe (diff) | |
parent | 0a0a7e4ca4f05c7d6da55ec64c8a9734d82853fe (diff) |
Merge remote-tracking branch 'origin/5.12' into dev
Conflicts:
src/render/renderers/opengl/textures/gltexture.cpp
Change-Id: I57e9a296dc15f0b5dc3af3664f698bdc799c4bb5
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp | 88 | ||||
-rw-r--r-- | tests/benchmarks/core/core.pro | 2 |
2 files changed, 89 insertions, 1 deletions
diff --git a/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp b/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp index b86df05a4..60b60eb6e 100644 --- a/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp +++ b/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp @@ -861,6 +861,94 @@ private Q_SLOTS: arbiter.events.clear(); } + void checkDispatchReleaseEventOnLastPickerWhenMovingOutOfViewport() + { + // GIVEN + QmlSceneReader sceneReader(QUrl("qrc:/testscene_dragenabled.qml")); + QScopedPointer<Qt3DCore::QNode> root(qobject_cast<Qt3DCore::QNode *>(sceneReader.root())); + QVERIFY(root); + + QList<Qt3DRender::QRenderSettings *> renderSettings = root->findChildren<Qt3DRender::QRenderSettings *>(); + QCOMPARE(renderSettings.size(), 1); + Qt3DRender::QPickingSettings *settings = renderSettings.first()->pickingSettings(); + + settings->setPickMethod(Qt3DRender::QPickingSettings::TrianglePicking); + settings->setPickResultMode(Qt3DRender::QPickingSettings::NearestPick); + settings->setFaceOrientationPickingMode(Qt3DRender::QPickingSettings::FrontAndBackFace); + + QScopedPointer<Qt3DRender::TestAspect> test(new Qt3DRender::TestAspect(root.data())); + TestArbiter arbiter; + + // Runs Required jobs + runRequiredJobs(test.data()); + + // THEN + QList<Qt3DRender::QObjectPicker *> pickers = root->findChildren<Qt3DRender::QObjectPicker *>(); + QCOMPARE(pickers.size(), 2); + + Qt3DRender::QObjectPicker *picker1 = nullptr; + if (pickers.first()->objectName() == QLatin1String("Picker1")) + picker1 = pickers.first(); + else + picker1 = pickers.last(); + + Qt3DRender::Render::ObjectPicker *backendPicker1 = test->nodeManagers()->objectPickerManager()->lookupResource(picker1->id()); + QVERIFY(backendPicker1); + Qt3DCore::QBackendNodePrivate::get(backendPicker1)->setArbiter(&arbiter); + + // WHEN -> Pressed on object + Qt3DRender::Render::PickBoundingVolumeJob pickBVJob; + initializePickBoundingVolumeJob(&pickBVJob, test.data()); + + QList<QPair<QObject *, QMouseEvent>> events; + events.push_back({nullptr, QMouseEvent(QMouseEvent::MouseButtonPress, QPointF(207.0f, 303.0f), + Qt::LeftButton, Qt::LeftButton, Qt::NoModifier)}); + pickBVJob.setMouseEvents(events); + bool earlyReturn = !pickBVJob.runHelper(); + + // THEN -> Pressed + QVERIFY(!earlyReturn); + QVERIFY(backendPicker1->isPressed()); + 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>()); + + arbiter.events.clear(); + + // WHEN -> Releasing out of the viewport + events.clear(); + events.push_back({nullptr, QMouseEvent(QMouseEvent::MouseButtonRelease, QPointF(10000.0f, 10000.0f), + Qt::LeftButton, Qt::LeftButton, Qt::NoModifier)}); + pickBVJob.setMouseEvents(events); + earlyReturn = !pickBVJob.runHelper(); + + // THEN -> Should have received released event + QVERIFY(!earlyReturn); + QVERIFY(!backendPicker1->isPressed()); + 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()); + + arbiter.events.clear(); + + // WHEN -> Releasing out of the viewport + events.clear(); + events.push_back({nullptr, QMouseEvent(QMouseEvent::MouseButtonRelease, QPointF(10000.0f, 10000.0f), + Qt::LeftButton, Qt::LeftButton, Qt::NoModifier)}); + pickBVJob.setMouseEvents(events); + earlyReturn = !pickBVJob.runHelper(); + + // THEN -> Should have received nothing + QCOMPARE(arbiter.events.count(), 0); + } + void checkDispatchHoverEvent_data() { generateAllPickingSettingsCombinations(); diff --git a/tests/benchmarks/core/core.pro b/tests/benchmarks/core/core.pro index d5c6b98b3..67710db78 100644 --- a/tests/benchmarks/core/core.pro +++ b/tests/benchmarks/core/core.pro @@ -1,6 +1,6 @@ TEMPLATE = subdirs -!wince*: SUBDIRS += \ +SUBDIRS += \ qcircularbuffer \ qresourcesmanager \ qframeallocator |