diff options
Diffstat (limited to 'tests/auto/gestures/customgesturerecognizer.cpp')
-rw-r--r-- | tests/auto/gestures/customgesturerecognizer.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/auto/gestures/customgesturerecognizer.cpp b/tests/auto/gestures/customgesturerecognizer.cpp index 898071a..cb3f7bf 100644 --- a/tests/auto/gestures/customgesturerecognizer.cpp +++ b/tests/auto/gestures/customgesturerecognizer.cpp @@ -4,6 +4,7 @@ const char* SingleshotGestureRecognizer::Name = "SingleshotGesture"; const char* PinchGestureRecognizer::Name = "PinchGesture"; const char* SecondFingerGestureRecognizer::Name = "SecondFingerGesture"; +const char* PanGestureRecognizer::Name = "PanGesture"; SingleshotGestureRecognizer::SingleshotGestureRecognizer(QObject *parent) : QGestureRecognizer(QString(SingleshotGestureRecognizer::Name), parent) @@ -105,3 +106,62 @@ void SecondFingerGestureRecognizer::reset() gesture->point = TouchPoint(); gesture->offset = QPoint(); } + +PanGestureRecognizer::PanGestureRecognizer(QObject *parent) + : QGestureRecognizer(PanGestureRecognizer::Name, parent) +{ + gesture = new PanGesture(this, PanGestureRecognizer::Name); +} + +QGestureRecognizer::Result PanGestureRecognizer::filterEvent(const QEvent *event) +{ + if (event->type() != QEvent::TouchBegin || + event->type() != QEvent::TouchUpdate || + event->type() != QEvent::TouchEnd) + return QGestureRecognizer::Ignore; + + const QTouchEvent *e = static_cast<const QTouchEvent*>(event); + const QList<QTouchEvent::TouchPoint*> &points = e->touchPoints(); + + if (points.size() >= 1) { + gesture->lastPoints[0] = gesture->points[0]; + gesture->points[0].id = points.at(0)->id(); + gesture->points[0].pt = points.at(0)->startPos().toPoint(); + gesture->points[0].state = (TouchPoint::State)points.at(0)->state(); + if (points.at(0)->state() == Qt::TouchPointPressed) { + gesture->startPoints[0] = gesture->points[0]; + gesture->lastPoints[0] = gesture->points[0]; + } + } + if (points.size() >= 2) { + gesture->lastPoints[1] = gesture->points[1]; + gesture->points[1].id = points.at(1)->id(); + gesture->points[1].pt = points.at(1)->startPos().toPoint(); + gesture->points[1].state = (TouchPoint::State)points.at(1)->state(); + if (points.at(1)->state() == Qt::TouchPointPressed) { + gesture->startPoints[1] = gesture->points[1]; + gesture->lastPoints[1] = gesture->points[1]; + } + } + + if (points.size() == 2) + return QGestureRecognizer::GestureStarted; + if (points.size() > 2) + return QGestureRecognizer::MaybeGesture; + if (points.at(0)->state() == Qt::TouchPointPressed) + return QGestureRecognizer::MaybeGesture; + if (points.at(0)->state() == Qt::TouchPointReleased) + return QGestureRecognizer::GestureFinished; + return QGestureRecognizer::GestureStarted; +} + +void PanGestureRecognizer::reset() +{ + gesture->startPoints[0] = TouchPoint(); + gesture->startPoints[1] = TouchPoint(); + gesture->lastPoints[0] = TouchPoint(); + gesture->lastPoints[1] = TouchPoint(); + gesture->points[0] = TouchPoint(); + gesture->points[1] = TouchPoint(); + gesture->offset = QPoint(); +} |