summaryrefslogtreecommitdiffstats
path: root/scroller
diff options
context:
space:
mode:
authorRalf Engels <ralf.engels@nokia.com>2010-05-21 17:01:34 +0200
committerRalf Engels <ralf.engels@nokia.com>2010-05-21 17:01:34 +0200
commitd2d5f539dd0d36a83ddb35b5d404315f6569560c (patch)
tree5926284f010477c4dcb704e9a6877adbef049e6b /scroller
parent0815d2126fe5ed478fa67b4ba93a10230d7d013c (diff)
Finally scroller is working again.
Diffstat (limited to 'scroller')
-rw-r--r--scroller/qflickgesture.cpp71
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)