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 /scroller | |
parent | 0815d2126fe5ed478fa67b4ba93a10230d7d013c (diff) |
Finally scroller is working again.
Diffstat (limited to 'scroller')
-rw-r--r-- | scroller/qflickgesture.cpp | 71 |
1 files changed, 42 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) |