@@ -38,7 +38,7 @@ private:
38 int m_duration;
38 int m_duration;
41−class FakeTimeSource : public AxisVelocityCalculator::TimeSource
41+class FakeTimeSource : public UbuntuGestures::TimeSource
44 FakeTimeSource() { m_msecsSinceReference = 0; }
44 FakeTimeSource() { m_msecsSinceReference = 0; }
@@ -65,6 +65,9 @@ private Q_SLOTS:
65 void minSpeed_data();
65 void minSpeed_data();
66 void recognitionTimerUsage();
66 void recognitionTimerUsage();
67 void maxSilenceTime();
67 void maxSilenceTime();
70+ void emitDraggingChangedOnDirectRecognition();
70 QQuickView *createView();
73 QQuickView *createView();
@@ -72,7 +75,6 @@ private:
72 QTouchDevice *device;
75 QTouchDevice *device;
73 FakeTimer *fakeTimer;
76 FakeTimer *fakeTimer;
74 FakeTimeSource *fakeTimeSource;
77 FakeTimeSource *fakeTimeSource;
75− AxisVelocityCalculator *velCalcWithFakeTiming;
78void tst_DirectionalDragArea::initTestCase()
80void tst_DirectionalDragArea::initTestCase()
@@ -101,7 +103,6 @@ void tst_DirectionalDragArea::init()
102 fakeTimer = new FakeTimer;
104 fakeTimer = new FakeTimer;
103 fakeTimeSource = new FakeTimeSource;
105 fakeTimeSource = new FakeTimeSource;
104− velCalcWithFakeTiming = new AxisVelocityCalculator(fakeTimeSource);
107void tst_DirectionalDragArea::cleanup()
108void tst_DirectionalDragArea::cleanup()
@@ -112,10 +113,8 @@ void tst_DirectionalDragArea::cleanup()
112 delete fakeTimer;
113 delete fakeTimer;
113 fakeTimer = 0;
114 fakeTimer = 0;
115− // will bring fakeTimeSource down with it
116+ delete fakeTimeSource;
116− delete velCalcWithFakeTiming;
117 fakeTimeSource = 0;
117 fakeTimeSource = 0;
118− velCalcWithFakeTiming = 0;
121QQuickView *tst_DirectionalDragArea::createView()
120QQuickView *tst_DirectionalDragArea::createView()
@@ -187,7 +186,7 @@ void tst_DirectionalDragArea::edgeDrag()
187 view->rootObject()->findChild<DirectionalDragArea*>(dragAreaObjectName);
186 view->rootObject()->findChild<DirectionalDragArea*>(dragAreaObjectName);
188 QVERIFY(edgeDragArea != 0);
187 QVERIFY(edgeDragArea != 0);
189 edgeDragArea->setRecognitionTimer(fakeTimer);
188 edgeDragArea->setRecognitionTimer(fakeTimer);
190− edgeDragArea->setAxisVelocityCalculator(velCalcWithFakeTiming);
189+ edgeDragArea->setTimeSource(fakeTimeSource);
192 QSignalSpy draggingSpy(edgeDragArea, SIGNAL(draggingChanged(bool)));
191 QSignalSpy draggingSpy(edgeDragArea, SIGNAL(draggingChanged(bool)));
@@ -292,7 +291,7 @@ void tst_DirectionalDragArea::dragWithShortDirectionChange()
292 view->rootObject()->findChild<DirectionalDragArea*>("hpDragArea");
291 view->rootObject()->findChild<DirectionalDragArea*>("hpDragArea");
293 QVERIFY(edgeDragArea != 0);
292 QVERIFY(edgeDragArea != 0);
294 edgeDragArea->setRecognitionTimer(fakeTimer);
293 edgeDragArea->setRecognitionTimer(fakeTimer);
295− edgeDragArea->setAxisVelocityCalculator(velCalcWithFakeTiming);
294+ edgeDragArea->setTimeSource(fakeTimeSource);
297 QPointF initialTouchPos = calculateInitialTouchPos(edgeDragArea, view);
296 QPointF initialTouchPos = calculateInitialTouchPos(edgeDragArea, view);
298 QPointF touchPoint = initialTouchPos;
297 QPointF touchPoint = initialTouchPos;
@@ -337,7 +336,7 @@ void tst_DirectionalDragArea::minSpeed()
337 view->rootObject()->findChild<DirectionalDragArea*>("hpDragArea");
336 view->rootObject()->findChild<DirectionalDragArea*>("hpDragArea");
338 QVERIFY(edgeDragArea != 0);
337 QVERIFY(edgeDragArea != 0);
339 edgeDragArea->setRecognitionTimer(fakeTimer);
338 edgeDragArea->setRecognitionTimer(fakeTimer);
340− edgeDragArea->setAxisVelocityCalculator(velCalcWithFakeTiming);
339+ edgeDragArea->setTimeSource(fakeTimeSource);
342 QPointF initialTouchPos = calculateInitialTouchPos(edgeDragArea, view);
341 QPointF initialTouchPos = calculateInitialTouchPos(edgeDragArea, view);
343 QPointF touchPoint = initialTouchPos;
342 QPointF touchPoint = initialTouchPos;
@@ -390,7 +389,7 @@ void tst_DirectionalDragArea::recognitionTimerUsage()
390 view->rootObject()->findChild<DirectionalDragArea*>("hpDragArea");
389 view->rootObject()->findChild<DirectionalDragArea*>("hpDragArea");
391 QVERIFY(edgeDragArea != 0);
390 QVERIFY(edgeDragArea != 0);
392 edgeDragArea->setRecognitionTimer(fakeTimer);
391 edgeDragArea->setRecognitionTimer(fakeTimer);
393− edgeDragArea->setAxisVelocityCalculator(velCalcWithFakeTiming);
392+ edgeDragArea->setTimeSource(fakeTimeSource);
395 QPointF initialTouchPos = calculateInitialTouchPos(edgeDragArea, view);
394 QPointF initialTouchPos = calculateInitialTouchPos(edgeDragArea, view);
396 QPointF touchPoint = initialTouchPos;
395 QPointF touchPoint = initialTouchPos;
@@ -431,7 +430,7 @@ void tst_DirectionalDragArea::maxSilenceTime()
431 view->rootObject()->findChild<DirectionalDragArea*>("hpDragArea");
430 view->rootObject()->findChild<DirectionalDragArea*>("hpDragArea");
432 QVERIFY(edgeDragArea != 0);
431 QVERIFY(edgeDragArea != 0);
433 edgeDragArea->setRecognitionTimer(fakeTimer);
432 edgeDragArea->setRecognitionTimer(fakeTimer);
434− edgeDragArea->setAxisVelocityCalculator(velCalcWithFakeTiming);
433+ edgeDragArea->setTimeSource(fakeTimeSource);
436 QPointF initialTouchPos = calculateInitialTouchPos(edgeDragArea, view);
435 QPointF initialTouchPos = calculateInitialTouchPos(edgeDragArea, view);
437 QPointF touchPoint = initialTouchPos;
436 QPointF touchPoint = initialTouchPos;
@@ -458,6 +457,95 @@ void tst_DirectionalDragArea::maxSilenceTime()
458 QCOMPARE((int)edgeDragArea->status(), (int)DirectionalDragArea::Rejected);
457 QCOMPARE((int)edgeDragArea->status(), (int)DirectionalDragArea::Rejected);
461+ Checks that it informs the X coordinate of the touch point in local and scene coordinates
464+void tst_DirectionalDragArea::sceneXAndX()
466+ DirectionalDragArea *edgeDragArea =
467+ view->rootObject()->findChild<DirectionalDragArea*>("hnDragArea");
468+ QVERIFY(edgeDragArea != 0);
469+ edgeDragArea->setRecognitionTimer(fakeTimer);
470+ edgeDragArea->setTimeSource(fakeTimeSource);
472+ QPointF touchScenePos(view->width() - (edgeDragArea->width()/2.0f), view->height()/2.0f);
474+ fakeTimeSource->m_msecsSinceReference = 0;
475+ QTest::touchEvent(view, device).press(0, touchScenePos.toPoint());
477+ QSignalSpy touchXSpy(edgeDragArea, SIGNAL(touchXChanged(qreal)));
478+ QSignalSpy touchSceneXSpy(edgeDragArea, SIGNAL(touchSceneXChanged(qreal)));
480+ touchScenePos.rx() = view->width() / 2;
481+ QTest::touchEvent(view, device).move(0, touchScenePos.toPoint());
483+ QCOMPARE(touchXSpy.count(), 1);
484+ QCOMPARE(touchSceneXSpy.count(), 1);
485+ QCOMPARE(edgeDragArea->touchX(), touchScenePos.x() - edgeDragArea->x());
486+ QCOMPARE(edgeDragArea->touchSceneX(), touchScenePos.x());
490+ Checks that it informs the Y coordinate of the touch point in local and scene coordinates
493+void tst_DirectionalDragArea::sceneYAndY()
495+ DirectionalDragArea *edgeDragArea =
496+ view->rootObject()->findChild<DirectionalDragArea*>("vnDragArea");
497+ QVERIFY(edgeDragArea != 0);
498+ edgeDragArea->setRecognitionTimer(fakeTimer);
499+ edgeDragArea->setTimeSource(fakeTimeSource);
501+ QPointF touchScenePos(view->width()/2.0f, view->height() - (edgeDragArea->height()/2.0f));
503+ fakeTimeSource->m_msecsSinceReference = 0;
504+ QTest::touchEvent(view, device).press(0, touchScenePos.toPoint());
506+ QSignalSpy touchYSpy(edgeDragArea, SIGNAL(touchYChanged(qreal)));
507+ QSignalSpy touchSceneYSpy(edgeDragArea, SIGNAL(touchSceneYChanged(qreal)));
509+ touchScenePos.ry() = view->height() / 2;
510+ QTest::touchEvent(view, device).move(0, touchScenePos.toPoint());
512+ QCOMPARE(touchYSpy.count(), 1);
513+ QCOMPARE(touchSceneYSpy.count(), 1);
514+ QCOMPARE(edgeDragArea->touchY(), touchScenePos.y() - edgeDragArea->y());
515+ QCOMPARE(edgeDragArea->touchSceneY(), touchScenePos.y());
519+ Emit draggingChanged() when status change from WaitingForTouch directly to Recognized.
520+ This happens when the gesture recognition is effectively disabled (e.g. by setting a
521+ distanceThreshold of zero)
523+void tst_DirectionalDragArea::emitDraggingChangedOnDirectRecognition()
525+ DirectionalDragArea *edgeDragArea =
526+ view->rootObject()->findChild<DirectionalDragArea*>("hpDragArea");
527+ QVERIFY(edgeDragArea != 0);
528+ edgeDragArea->setRecognitionTimer(fakeTimer);
529+ edgeDragArea->setTimeSource(fakeTimeSource);
531+ QPointF touchPos = calculateInitialTouchPos(edgeDragArea, view);
533+ QSignalSpy draggingSpy(edgeDragArea, SIGNAL(draggingChanged(bool)));
535+ // That will make it completetly skip the recognition phase ("Undecided" status).
536+ edgeDragArea->setDistanceThreshold(0.0);
538+ QCOMPARE((int)edgeDragArea->status(), (int)DirectionalDragArea::WaitingForTouch);
539+ QCOMPARE(edgeDragArea->dragging(), false);
541+ fakeTimeSource->m_msecsSinceReference = 0;
542+ QTest::touchEvent(view, device).press(0, touchPos.toPoint());
544+ QCOMPARE((int)edgeDragArea->status(), (int)DirectionalDragArea::Recognized);
545+ QCOMPARE(draggingSpy.count(), 1);
546+ QCOMPARE(edgeDragArea->dragging(), true);
461QTEST_MAIN(tst_DirectionalDragArea)
549QTEST_MAIN(tst_DirectionalDragArea)
463#include "tst_DirectionalDragArea.moc"
551#include "tst_DirectionalDragArea.moc"