27QMacSwipeGestureRecognizer::recognize(QGesture *gesture, QObject *obj, QEvent *event)
29 if (event->type() == QEvent::NativeGesture && obj->isWidgetType()) {
30 QNativeGestureEvent *ev =
static_cast<QNativeGestureEvent*>(event);
31 switch (ev->gestureType()) {
32 case Qt::SwipeNativeGesture: {
33 QSwipeGesture *g =
static_cast<QSwipeGesture *>(gesture);
34 g->setSwipeAngle(ev->value());
35 g->setHotSpot(ev->globalPosition());
36 return QGestureRecognizer::FinishGesture | QGestureRecognizer::ConsumeEventHint;
43 return QGestureRecognizer::Ignore;
67 if (event->type() == QEvent::NativeGesture && obj->isWidgetType()) {
68 QPinchGesture *g =
static_cast<QPinchGesture *>(gesture);
69 QNativeGestureEvent *ev =
static_cast<QNativeGestureEvent*>(event);
70 switch (ev->gestureType()) {
71 case Qt::BeginNativeGesture:
73 g->setStartCenterPoint(
static_cast<QWidget*>(obj)->mapFromGlobal(ev->globalPosition().toPoint()));
74 g->setCenterPoint(g->startCenterPoint());
75 g->setChangeFlags(QPinchGesture::CenterPointChanged);
76 g->setTotalChangeFlags(g->totalChangeFlags() | g->changeFlags());
77 g->setHotSpot(ev->globalPosition());
78 return QGestureRecognizer::MayBeGesture | QGestureRecognizer::ConsumeEventHint;
79 case Qt::RotateNativeGesture:
80 g->setLastScaleFactor(g->scaleFactor());
81 g->setLastRotationAngle(g->rotationAngle());
82 g->setRotationAngle(g->rotationAngle() + ev->value());
83 g->setChangeFlags(QPinchGesture::RotationAngleChanged);
84 g->setTotalChangeFlags(g->totalChangeFlags() | g->changeFlags());
85 g->setHotSpot(ev->globalPosition());
86 return QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint;
87 case Qt::ZoomNativeGesture:
88 g->setLastScaleFactor(g->scaleFactor());
89 g->setLastRotationAngle(g->rotationAngle());
90 g->setScaleFactor(1 + ev->value());
91 g->setTotalScaleFactor(g->totalScaleFactor() * g->scaleFactor());
92 g->setChangeFlags(QPinchGesture::ScaleFactorChanged);
93 g->setTotalChangeFlags(g->totalChangeFlags() | g->changeFlags());
94 g->setHotSpot(ev->globalPosition());
95 return QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint;
96 case Qt::SmartZoomNativeGesture:
97 g->setLastScaleFactor(g->scaleFactor());
98 g->setLastRotationAngle(g->rotationAngle());
99 g->setScaleFactor(ev->value() ? 1.7f : 1.0f);
100 g->setChangeFlags(QPinchGesture::ScaleFactorChanged);
101 g->setTotalChangeFlags(g->totalChangeFlags() | g->changeFlags());
102 g->setHotSpot(ev->globalPosition());
103 return QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint;
104 case Qt::EndNativeGesture:
105 return QGestureRecognizer::FinishGesture | QGestureRecognizer::ConsumeEventHint;
111 return QGestureRecognizer::Ignore;
116 QPinchGesture *g =
static_cast<QPinchGesture *>(gesture);
117 g->setChangeFlags({});
118 g->setTotalChangeFlags({});
119 g->setScaleFactor(1.0f);
120 g->setTotalScaleFactor(1.0f);
121 g->setLastScaleFactor(1.0f);
122 g->setRotationAngle(0.0f);
123 g->setTotalRotationAngle(0.0f);
124 g->setLastRotationAngle(0.0f);
125 g->setCenterPoint(QPointF());
126 g->setStartCenterPoint(QPointF());
127 g->setLastCenterPoint(QPointF());
128 QGestureRecognizer::reset(gesture);
163 const int panBeginDelay = 300;
164 const int panBeginRadius = 3;
166 QPanGesture *g =
static_cast<QPanGesture *>(gesture);
168 switch (event->type()) {
169 case QEvent::TouchBegin: {
170 const QTouchEvent *ev =
static_cast<
const QTouchEvent*>(event);
171 if (ev->points().size() == 1) {
173 _startPos = QCursor::pos();
175 _panTimer.start(panBeginDelay,
this);
176 _panCanceled =
false;
177 return QGestureRecognizer::MayBeGesture;
180 case QEvent::TouchEnd: {
184 const QTouchEvent *ev =
static_cast<
const QTouchEvent*>(event);
185 if (ev->points().size() == 1)
186 return QGestureRecognizer::FinishGesture;
188 case QEvent::TouchUpdate: {
192 const QTouchEvent *ev =
static_cast<
const QTouchEvent*>(event);
193 if (ev->points().size() == 1) {
194 if (_panTimer.isActive()) {
197 const QPointF p = QCursor::pos();
198 if ((p - _startPos).manhattanLength() > panBeginRadius) {
201 return QGestureRecognizer::CancelGesture;
204 const QPointF p = QCursor::pos();
205 const QPointF posOffset = p - _startPos;
206 g->setLastOffset(g->offset());
207 g->setOffset(QPointF(posOffset.x(), posOffset.y()));
208 g->setHotSpot(_startPos);
209 return QGestureRecognizer::TriggerGesture;
211 }
else if (_panTimer.isActive()) {
216 return QGestureRecognizer::CancelGesture;
219 case QEvent::Timer: {
220 QTimerEvent *ev =
static_cast<QTimerEvent *>(event);
221 if (ev->timerId() == _panTimer.timerId()) {
225 _startPos = QCursor::pos();
226 g->setHotSpot(_startPos);
227 return QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint;
234 return QGestureRecognizer::Ignore;
239 QPanGesture *g =
static_cast<QPanGesture *>(gesture);
240 _startPos = QPointF();
243 g->setOffset(QPointF(0, 0));
244 g->setLastOffset(QPointF(0, 0));
245 g->setAcceleration(qreal(1));
246 QGestureRecognizer::reset(gesture);