43 |
43 |
44 #include <QTouchEvent> |
44 #include <QTouchEvent> |
45 |
45 |
46 Qt::GestureType ThreeFingerSlideGesture::Type = Qt::CustomGesture; |
46 Qt::GestureType ThreeFingerSlideGesture::Type = Qt::CustomGesture; |
47 |
47 |
48 QGesture *ThreeFingerSlideGestureRecognizer::createGesture(QObject *) |
48 QGesture *ThreeFingerSlideGestureRecognizer::create(QObject *) |
49 { |
49 { |
50 return new ThreeFingerSlideGesture; |
50 return new ThreeFingerSlideGesture; |
51 } |
51 } |
52 |
52 |
53 QGestureRecognizer::Result ThreeFingerSlideGestureRecognizer::filterEvent(QGesture *state, QObject *, QEvent *event) |
53 QGestureRecognizer::Result ThreeFingerSlideGestureRecognizer::recognize(QGesture *state, QObject *, QEvent *event) |
54 { |
54 { |
55 ThreeFingerSlideGesture *d = static_cast<ThreeFingerSlideGesture *>(state); |
55 ThreeFingerSlideGesture *d = static_cast<ThreeFingerSlideGesture *>(state); |
56 QGestureRecognizer::Result result; |
56 QGestureRecognizer::Result result; |
57 switch (event->type()) { |
57 switch (event->type()) { |
58 case QEvent::TouchBegin: |
58 case QEvent::TouchBegin: |
59 result = QGestureRecognizer::MaybeGesture; |
59 result = QGestureRecognizer::MayBeGesture; |
60 case QEvent::TouchEnd: |
60 case QEvent::TouchEnd: |
61 if (d->gestureFired) |
61 if (d->gestureFired) |
62 result = QGestureRecognizer::GestureFinished; |
62 result = QGestureRecognizer::FinishGesture; |
63 else |
63 else |
64 result = QGestureRecognizer::NotGesture; |
64 result = QGestureRecognizer::CancelGesture; |
65 case QEvent::TouchUpdate: |
65 case QEvent::TouchUpdate: |
66 if (d->state() != Qt::NoGesture) { |
66 if (d->state() != Qt::NoGesture) { |
67 QTouchEvent *ev = static_cast<QTouchEvent*>(event); |
67 QTouchEvent *ev = static_cast<QTouchEvent*>(event); |
68 if (ev->touchPoints().size() == 3) { |
68 if (ev->touchPoints().size() == 3) { |
69 d->gestureFired = true; |
69 d->gestureFired = true; |
70 result = QGestureRecognizer::GestureTriggered; |
70 result = QGestureRecognizer::TriggerGesture; |
71 } else { |
71 } else { |
72 result = QGestureRecognizer::MaybeGesture; |
72 result = QGestureRecognizer::MayBeGesture; |
73 for (int i = 0; i < ev->touchPoints().size(); ++i) { |
73 for (int i = 0; i < ev->touchPoints().size(); ++i) { |
74 const QTouchEvent::TouchPoint &pt = ev->touchPoints().at(i); |
74 const QTouchEvent::TouchPoint &pt = ev->touchPoints().at(i); |
75 const int distance = (pt.pos().toPoint() - pt.startPos().toPoint()).manhattanLength(); |
75 const int distance = (pt.pos().toPoint() - pt.startPos().toPoint()).manhattanLength(); |
76 if (distance > 20) { |
76 if (distance > 20) { |
77 result = QGestureRecognizer::NotGesture; |
77 result = QGestureRecognizer::CancelGesture; |
78 } |
78 } |
79 } |
79 } |
80 } |
80 } |
81 } else { |
81 } else { |
82 result = QGestureRecognizer::NotGesture; |
82 result = QGestureRecognizer::CancelGesture; |
83 } |
83 } |
84 |
84 |
85 break; |
85 break; |
86 case QEvent::MouseButtonPress: |
86 case QEvent::MouseButtonPress: |
87 case QEvent::MouseButtonRelease: |
87 case QEvent::MouseButtonRelease: |
88 case QEvent::MouseMove: |
88 case QEvent::MouseMove: |
89 if (d->state() != Qt::NoGesture) |
89 if (d->state() != Qt::NoGesture) |
90 result = QGestureRecognizer::Ignore; |
90 result = QGestureRecognizer::Ignore; |
91 else |
91 else |
92 result = QGestureRecognizer::NotGesture; |
92 result = QGestureRecognizer::CancelGesture; |
93 break; |
93 break; |
94 default: |
94 default: |
95 result = QGestureRecognizer::Ignore; |
95 result = QGestureRecognizer::Ignore; |
96 break; |
96 break; |
97 } |
97 } |
103 static_cast<ThreeFingerSlideGesture *>(state)->gestureFired = false; |
103 static_cast<ThreeFingerSlideGesture *>(state)->gestureFired = false; |
104 QGestureRecognizer::reset(state); |
104 QGestureRecognizer::reset(state); |
105 } |
105 } |
106 |
106 |
107 |
107 |
108 QGesture *RotateGestureRecognizer::createGesture(QObject *) |
108 QGesture *RotateGestureRecognizer::create(QObject *) |
109 { |
109 { |
110 return new QGesture; |
110 return new QGesture; |
111 } |
111 } |
112 |
112 |
113 QGestureRecognizer::Result RotateGestureRecognizer::filterEvent(QGesture *, QObject *, QEvent *event) |
113 QGestureRecognizer::Result RotateGestureRecognizer::recognize(QGesture *, QObject *, QEvent *event) |
114 { |
114 { |
115 switch (event->type()) { |
115 switch (event->type()) { |
116 case QEvent::TouchBegin: |
116 case QEvent::TouchBegin: |
117 case QEvent::TouchEnd: |
117 case QEvent::TouchEnd: |
118 case QEvent::TouchUpdate: |
118 case QEvent::TouchUpdate: |