summaryrefslogtreecommitdiffstats
path: root/tests/auto/gestures/customgesturerecognizer.cpp
blob: 906fd32c43cfe7ef5da808a0f6b86cfae3de5982 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "customgesturerecognizer.h"
#include "qgesture.h"

const char* SingleshotGestureRecognizer::Name = "SingleshotGesture";
const char* PinchGestureRecognizer::Name = "PinchGesture";
const char* SecondFingerGestureRecognizer::Name = "SecondFingerGesture";

SingleshotGestureRecognizer::SingleshotGestureRecognizer(QObject *parent)
    : QGestureRecognizer(QString(SingleshotGestureRecognizer::Name), parent)
{
    gesture = new SingleshotGesture(this, SingleshotGestureRecognizer::Name);
}

QGestureRecognizer::Result SingleshotGestureRecognizer::filterEvent(const QEvent *event)
{
    if (event->type() == SingleshotEvent::Type) {
        return QGestureRecognizer::GestureFinished;
    }
    return QGestureRecognizer::NotGesture;
}

void SingleshotGestureRecognizer::reset()
{
    gesture->offset = QPoint();
}

PinchGestureRecognizer::PinchGestureRecognizer(QObject *parent)
    : QGestureRecognizer(PinchGestureRecognizer::Name, parent)
{
    gesture = new PinchGesture(this, PinchGestureRecognizer::Name);
}

QGestureRecognizer::Result PinchGestureRecognizer::filterEvent(const QEvent *event)
{
    if (event->type() != TouchEvent::Type)
        return QGestureRecognizer::Ignore;

    const TouchEvent *e = static_cast<const TouchEvent*>(event);
    if (e->points[0].state == TouchPoint::Begin)
        gesture->startPoints[0] = e->points[0];
    if (e->points[1].state == TouchPoint::Begin)
        gesture->startPoints[1] = e->points[1];
    gesture->lastPoints[0] = gesture->points[0];
    gesture->lastPoints[1] = gesture->points[1];
    gesture->points[0] = e->points[0];
    gesture->points[1] = e->points[1];
    if (((e->points[0].state == TouchPoint::Begin || e->points[0].state == TouchPoint::Update))) {
        if (e->points[1].state == TouchPoint::End || e->points[1].state == TouchPoint::None)
            return MaybeGesture;
        return GestureStarted;
    } else if (((e->points[1].state == TouchPoint::Begin || e->points[1].state == TouchPoint::Update))) {
        if (e->points[0].state == TouchPoint::End || e->points[0].state == TouchPoint::None)
            return MaybeGesture;
        return GestureStarted;
    } else if ((e->points[0].state == TouchPoint::End && e->points[1].state == TouchPoint::End) ||
               (e->points[0].state == TouchPoint::End && e->points[1].state == TouchPoint::None) ||
               (e->points[0].state == TouchPoint::None && e->points[1].state == TouchPoint::End)) {
        return QGestureRecognizer::NotGesture;
    }
    return QGestureRecognizer::NotGesture;
}

void PinchGestureRecognizer::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();
}

SecondFingerGestureRecognizer::SecondFingerGestureRecognizer(QObject *parent)
    : QGestureRecognizer(SecondFingerGestureRecognizer::Name, parent)
{
    gesture = new SecondFingerGesture(this, SecondFingerGestureRecognizer::Name);
}

QGestureRecognizer::Result SecondFingerGestureRecognizer::filterEvent(const QEvent *event)
{
    if (event->type() != TouchEvent::Type)
        return QGestureRecognizer::Ignore;

    const TouchEvent *e = static_cast<const TouchEvent*>(event);
    if (e->points[1].state != TouchPoint::None) {
        if (e->points[1].state == TouchPoint::Begin)
            gesture->startPoint = e->points[1];
        gesture->lastPoint = gesture->point;
        gesture->point = e->points[1];
        if (e->points[1].state == TouchPoint::End)
            return QGestureRecognizer::GestureFinished;
        else if (e->points[1].state != TouchPoint::None)
            return QGestureRecognizer::GestureStarted;
    }
    return QGestureRecognizer::NotGesture;
}

void SecondFingerGestureRecognizer::reset()
{
    gesture->startPoint = TouchPoint();
    gesture->lastPoint = TouchPoint();
    gesture->point = TouchPoint();
    gesture->offset = QPoint();
}