diff options
| author | Ralf Engels <ralf.engels@nokia.com> | 2010-05-21 17:01:34 +0200 |
|---|---|---|
| committer | Ralf Engels <ralf.engels@nokia.com> | 2010-05-21 17:01:34 +0200 |
| commit | d2d5f539dd0d36a83ddb35b5d404315f6569560c (patch) | |
| tree | 5926284f010477c4dcb704e9a6877adbef049e6b | |
| parent | 0815d2126fe5ed478fa67b4ba93a10230d7d013c (diff) | |
Finally scroller is working again.
| -rw-r--r-- | scroller/qflickgesture.cpp | 71 | ||||
| -rw-r--r-- | testapp/qscrollareakineticscroller.cpp | 3 |
2 files changed, 45 insertions, 29 deletions
diff --git a/scroller/qflickgesture.cpp b/scroller/qflickgesture.cpp index 7a6025e..1feb050 100644 --- a/scroller/qflickgesture.cpp +++ b/scroller/qflickgesture.cpp @@ -111,26 +111,36 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, // eat mouse events if the scroller is active if ((scroller->state() == QKineticScroller::StateDragging || scroller->state() == QKineticScroller::StateScrolling) && - (event->type() != QEvent::MouseButtonPress && - event->type() != QEvent::MouseMove && - event->type() != QEvent::MouseButtonDblClick && - event->type() != QEvent::MouseButtonRelease) ) + (event->type() == QEvent::MouseButtonPress || + event->type() == QEvent::MouseMove || + event->type() == QEvent::MouseButtonDblClick || + event->type() == QEvent::MouseButtonRelease) ) return QGestureRecognizer::Ignore | QGestureRecognizer::ConsumeEventHint; + qDebug()<<"recognize event: "<<event<<"target:"<<d->target<<"scroller:"<<d->scroller(); + + QKineticScroller::State oldState = scroller->state(); + // ignore all other events except touch + /* + QGestureRecognizer::Result resultVector[4] = { + QGestureRecognizer::Ignore, + QGestureRecognizer::MayBeGesture, + QGestureRecognizer::TriggerGesture, + QGestureRecognizer::TriggerGesture }; + */ + if (event->type() != QEvent::TouchBegin && event->type() != QEvent::TouchEnd && event->type() != QEvent::TouchUpdate) return QGestureRecognizer::Ignore; - - qDebug()<<"recognize event: "<<event<<"target:"<<d->target<<"scroller:"<<d->scroller(); + // return resultVector[(int)oldState]; const QTouchEvent *ev = static_cast<const QTouchEvent *>(event); QTouchEvent::TouchPoint tp = ev->touchPoints().first(); qint64 timestamp = d->timer.elapsed(); - QKineticScroller::State oldState = scroller->state(); QGestureRecognizer::Result result = QGestureRecognizer::Ignore; switch (event->type()) { @@ -149,28 +159,31 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, QKineticScroller::State newState = scroller->state(); - bool oldTriggered = (oldState == QKineticScroller::StateInactive) || - (oldState == QKineticScroller::StatePressed); - - bool newTriggered = (newState == QKineticScroller::StateInactive) || - (newState == QKineticScroller::StatePressed); - - if (event->type() == QEvent::TouchBegin && !newTriggered) - return QGestureRecognizer::MayBeGesture; - - if (event->type() == QEvent::TouchEnd && !oldTriggered) - return QGestureRecognizer::CancelGesture; - - if (!oldTriggered && !newTriggered) - return QGestureRecognizer::Ignore; - - if (oldTriggered && newTriggered) - return QGestureRecognizer::Ignore | QGestureRecognizer::ConsumeEventHint; - - if (!oldTriggered) - return QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint; - - return QGestureRecognizer::FinishGesture | QGestureRecognizer::ConsumeEventHint; + // old state: inactive, pressed, dragging, scrolling + QGestureRecognizer::Result resultMatrix[4][4] = { + // new state inactive + {QGestureRecognizer::Ignore, + QGestureRecognizer::CancelGesture, + QGestureRecognizer::FinishGesture | QGestureRecognizer::ConsumeEventHint, + QGestureRecognizer::FinishGesture | QGestureRecognizer::ConsumeEventHint}, + // new state pressed + {QGestureRecognizer::MayBeGesture, + QGestureRecognizer::MayBeGesture, + QGestureRecognizer::FinishGesture | QGestureRecognizer::ConsumeEventHint, + QGestureRecognizer::FinishGesture | QGestureRecognizer::ConsumeEventHint}, + // new state dragging + {QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint, + QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint, + QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint, + QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint}, + // new state scrolling + {QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint, + QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint, + QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint, + QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint} + }; + + return resultMatrix[(int)newState][(int)oldState]; } void QFlickGestureRecognizer::reset(QGesture *state) diff --git a/testapp/qscrollareakineticscroller.cpp b/testapp/qscrollareakineticscroller.cpp index 43fb8dd..773c6b9 100644 --- a/testapp/qscrollareakineticscroller.cpp +++ b/testapp/qscrollareakineticscroller.cpp @@ -192,13 +192,16 @@ bool QScrollAreaKineticScroller::eventFilter(QObject *o, QEvent *e) switch (e->type()) { case QEvent::Gesture: qDebug("Got gesture event"); + e->accept(); res = true; break; +#if 0 case QEvent::TouchBegin: case QEvent::TouchUpdate: case QEvent::TouchEnd: { res = true; } +#endif case QEvent::Wheel: // the two-finger gesture on the Mac is mapped to wheel events by default res = d->touchActive; |
