summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBradley T. Hughes <bradley.hughes@nokia.com>2009-06-15 13:04:48 (GMT)
committerBradley T. Hughes <bradley.hughes@nokia.com>2009-06-15 13:04:48 (GMT)
commit460822e82edf7ee2dce022121b12aa7f7f5847ef (patch)
treed731a985b19fb366d56b7afa66018337bcec0bca
parent83d4da7bffa9118012a690ac99015a06c17b9133 (diff)
parentcb8576e538e08e450ed4129d03272071bdc15709 (diff)
downloadQt-460822e82edf7ee2dce022121b12aa7f7f5847ef.zip
Qt-460822e82edf7ee2dce022121b12aa7f7f5847ef.tar.gz
Qt-460822e82edf7ee2dce022121b12aa7f7f5847ef.tar.bz2
Merge branch 'master' of git@scm.dev.nokia.troll.no:qt/qt-multitouch
-rw-r--r--src/gui/kernel/qapplication.cpp6
-rw-r--r--src/gui/kernel/qgesturemanager.cpp5
-rw-r--r--tests/auto/gestures/customgesturerecognizer.cpp26
-rw-r--r--tests/auto/gestures/tst_gestures.cpp83
4 files changed, 88 insertions, 32 deletions
diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp
index 01c8b11..fcc8d30 100644
--- a/src/gui/kernel/qapplication.cpp
+++ b/src/gui/kernel/qapplication.cpp
@@ -3606,11 +3606,7 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
if (!d->grabbedGestures.isEmpty() && e->spontaneous() && receiver->isWidgetType()) {
const QEvent::Type t = e->type();
- if (t == QEvent::MouseButtonPress || t == QEvent::MouseButtonRelease || t == QEvent::MouseMove
- || t == QEvent::MouseButtonDblClick || t == QEvent::Wheel
- || t == QEvent::KeyPress || t == QEvent::KeyRelease
- || t == QEvent::TabletPress || t == QEvent::TabletRelease || t == QEvent::TabletMove
- || t >= QEvent::User) {
+ if (t != QEvent::Gesture && t != QEvent::GraphicsSceneGesture) {
if (QGestureManager::instance()->filterEvent(static_cast<QWidget*>(receiver), e))
return true;
}
diff --git a/src/gui/kernel/qgesturemanager.cpp b/src/gui/kernel/qgesturemanager.cpp
index 799bcfd..a1d55fa 100644
--- a/src/gui/kernel/qgesturemanager.cpp
+++ b/src/gui/kernel/qgesturemanager.cpp
@@ -176,8 +176,6 @@ bool QGestureManager::filterEvent(QWidget *receiver, QEvent *event)
gesture->d_func()->singleshot = false;
}
}
- Q_ASSERT(!started.isEmpty());
- ret = sendGestureEvent(receiver, started, QSet<QGesture*>());
if (!activeGestures.isEmpty()) {
DEBUG() << "QGestureManager: new state = Gesture";
@@ -189,6 +187,9 @@ bool QGestureManager::filterEvent(QWidget *receiver, QEvent *event)
DEBUG() << "QGestureManager: new state = NotGesture";
state = NotGesture;
}
+
+ Q_ASSERT(!started.isEmpty());
+ ret = sendGestureEvent(receiver, started, QSet<QGesture*>());
} else if (!maybeGestures.isEmpty()) {
if (state != MaybeGesture) {
// We got a new set of events that look like a start
diff --git a/tests/auto/gestures/customgesturerecognizer.cpp b/tests/auto/gestures/customgesturerecognizer.cpp
index cb3f7bf..12d07b1 100644
--- a/tests/auto/gestures/customgesturerecognizer.cpp
+++ b/tests/auto/gestures/customgesturerecognizer.cpp
@@ -115,30 +115,30 @@ PanGestureRecognizer::PanGestureRecognizer(QObject *parent)
QGestureRecognizer::Result PanGestureRecognizer::filterEvent(const QEvent *event)
{
- if (event->type() != QEvent::TouchBegin ||
- event->type() != QEvent::TouchUpdate ||
+ if (event->type() != QEvent::TouchBegin &&
+ event->type() != QEvent::TouchUpdate &&
event->type() != QEvent::TouchEnd)
return QGestureRecognizer::Ignore;
const QTouchEvent *e = static_cast<const QTouchEvent*>(event);
- const QList<QTouchEvent::TouchPoint*> &points = e->touchPoints();
+ const QList<QTouchEvent::TouchPoint> &points = e->touchPoints();
if (points.size() >= 1) {
gesture->lastPoints[0] = gesture->points[0];
- gesture->points[0].id = points.at(0)->id();
- gesture->points[0].pt = points.at(0)->startPos().toPoint();
- gesture->points[0].state = (TouchPoint::State)points.at(0)->state();
- if (points.at(0)->state() == Qt::TouchPointPressed) {
+ gesture->points[0].id = points.at(0).id();
+ gesture->points[0].pt = points.at(0).startPos().toPoint();
+ gesture->points[0].state = (TouchPoint::State)points.at(0).state();
+ if (points.at(0).state() == Qt::TouchPointPressed) {
gesture->startPoints[0] = gesture->points[0];
gesture->lastPoints[0] = gesture->points[0];
}
}
if (points.size() >= 2) {
gesture->lastPoints[1] = gesture->points[1];
- gesture->points[1].id = points.at(1)->id();
- gesture->points[1].pt = points.at(1)->startPos().toPoint();
- gesture->points[1].state = (TouchPoint::State)points.at(1)->state();
- if (points.at(1)->state() == Qt::TouchPointPressed) {
+ gesture->points[1].id = points.at(1).id();
+ gesture->points[1].pt = points.at(1).startPos().toPoint();
+ gesture->points[1].state = (TouchPoint::State)points.at(1).state();
+ if (points.at(1).state() == Qt::TouchPointPressed) {
gesture->startPoints[1] = gesture->points[1];
gesture->lastPoints[1] = gesture->points[1];
}
@@ -148,9 +148,9 @@ QGestureRecognizer::Result PanGestureRecognizer::filterEvent(const QEvent *event
return QGestureRecognizer::GestureStarted;
if (points.size() > 2)
return QGestureRecognizer::MaybeGesture;
- if (points.at(0)->state() == Qt::TouchPointPressed)
+ if (points.at(0).state() == Qt::TouchPointPressed)
return QGestureRecognizer::MaybeGesture;
- if (points.at(0)->state() == Qt::TouchPointReleased)
+ if (points.at(0).state() == Qt::TouchPointReleased)
return QGestureRecognizer::GestureFinished;
return QGestureRecognizer::GestureStarted;
}
diff --git a/tests/auto/gestures/tst_gestures.cpp b/tests/auto/gestures/tst_gestures.cpp
index 0061506..9c9d279 100644
--- a/tests/auto/gestures/tst_gestures.cpp
+++ b/tests/auto/gestures/tst_gestures.cpp
@@ -110,6 +110,14 @@ struct GestureState
TouchPoint point;
QPoint offset;
} secondfinger;
+ struct PanGesture
+ {
+ bool delivered;
+ TouchPoint startPoints[2];
+ TouchPoint lastPoints[2];
+ TouchPoint points[2];
+ QPoint offset;
+ } pan;
QSet<QString> cancelled;
} last;
@@ -292,6 +300,18 @@ protected:
if (shouldAcceptSecondFingerGesture)
g->accept();
}
+ if (PanGesture *g = (PanGesture*)e->gesture(PanGestureRecognizer::Name)) {
+ gesture.last.pan.delivered = true;
+ gesture.last.pan.startPoints[0] = g->startPoints[0];
+ gesture.last.pan.startPoints[1] = g->startPoints[1];
+ gesture.last.pan.lastPoints[0] = g->lastPoints[0];
+ gesture.last.pan.lastPoints[1] = g->lastPoints[1];
+ gesture.last.pan.points[0] = g->points[0];
+ gesture.last.pan.points[1] = g->points[1];
+ gesture.last.pan.offset = g->offset;
+ if (shouldAcceptPanGesture)
+ g->accept();
+ }
gesture.last.cancelled = e->cancelledGestures();
return true;
}
@@ -427,13 +447,13 @@ public:
protected:
bool sceneEvent(QEvent *event)
{
- if (event->type() == QEvent::GraphicsSceneTouchBegin) {
+ if (event->type() == QEvent::TouchBegin) {
event->accept();
++touch.seenTouchBeginEvent;
return true;
- } else if (event->type() == QEvent::GraphicsSceneTouchUpdate) {
+ } else if (event->type() == QEvent::TouchUpdate) {
++touch.seenTouchUpdateEvent;
- } else if (event->type() == QEvent::GraphicsSceneTouchEnd) {
+ } else if (event->type() == QEvent::TouchEnd) {
++touch.seenTouchEndEvent;
} else if (event->type() == QEvent::GraphicsSceneGesture) {
QGraphicsSceneGestureEvent *e = static_cast<QGraphicsSceneGestureEvent*>(event);
@@ -498,7 +518,8 @@ private slots:
void simpleGraphicsItem();
void overlappingGraphicsItems();
- void touch();
+ void touch_widget();
+ void touch_graphicsView();
void panOnWidgets();
@@ -506,6 +527,7 @@ private:
SingleshotGestureRecognizer *singleshotRecognizer;
PinchGestureRecognizer *pinchRecognizer;
SecondFingerGestureRecognizer *secondFingerRecognizer;
+ PanGestureRecognizer *panGestureRecognizer;
GestureWidget *mainWidget;
void sendPinchEvents(QWidget *receiver, const QPoint &fromFinger1, const QPoint &fromFinger2);
@@ -516,9 +538,11 @@ tst_Gestures::tst_Gestures()
singleshotRecognizer = new SingleshotGestureRecognizer;
pinchRecognizer = new PinchGestureRecognizer;
secondFingerRecognizer = new SecondFingerGestureRecognizer;
+ panGestureRecognizer = new PanGestureRecognizer;
qApp->addGestureRecognizer(singleshotRecognizer);
qApp->addGestureRecognizer(pinchRecognizer);
qApp->addGestureRecognizer(secondFingerRecognizer);
+ qApp->addGestureRecognizer(panGestureRecognizer);
}
tst_Gestures::~tst_Gestures()
@@ -805,7 +829,46 @@ void tst_Gestures::overlappingGraphicsItems()
QVERIFY(item->gesture.last.singleshot.delivered);
}
-void tst_Gestures::touch()
+void tst_Gestures::touch_widget()
+{
+ GestureWidget leftWidget(GestureWidget::DoNotGrabGestures);
+ leftWidget.setObjectName("leftWidget");
+ leftWidget.setAttribute(Qt::WA_AcceptTouchEvents);
+ GestureWidget rightWidget(GestureWidget::DoNotGrabGestures);
+ rightWidget.setObjectName("rightWidget");
+ rightWidget.setAttribute(Qt::WA_AcceptTouchEvents);
+ delete mainWidget->layout();
+ (void)new QHBoxLayout(mainWidget);
+ mainWidget->layout()->addWidget(&leftWidget);
+ mainWidget->layout()->addWidget(&rightWidget);
+ QApplication::processEvents();
+
+ QTest::touchEvent()
+ .press(0, QPoint(10, 10), &leftWidget);
+ QTest::touchEvent()
+ .move(0, QPoint(12, 30), &leftWidget);
+ QTest::touchEvent()
+ .stationary(0)
+ .press(1, QPoint(15, 15), &rightWidget);
+ QTest::touchEvent()
+ .move(0, QPoint(10, 35), &leftWidget)
+ .press(1, QPoint(15, 15), &rightWidget);
+ QTest::touchEvent()
+ .move(0, QPoint(10, 40), &leftWidget)
+ .move(1, QPoint(20, 50), &rightWidget);
+ QTest::touchEvent()
+ .release(0, QPoint(10, 40), &leftWidget)
+ .release(1, QPoint(20, 50), &rightWidget);
+ QVERIFY(!mainWidget->touch.seenTouchBeginEvent);
+ QVERIFY(leftWidget.touch.seenTouchBeginEvent);
+ QVERIFY(leftWidget.touch.seenTouchUpdateEvent);
+ QVERIFY(leftWidget.touch.seenTouchEndEvent);
+ QVERIFY(rightWidget.touch.seenTouchBeginEvent);
+ QVERIFY(rightWidget.touch.seenTouchUpdateEvent);
+ QVERIFY(rightWidget.touch.seenTouchEndEvent);
+}
+
+void tst_Gestures::touch_graphicsView()
{
mainWidget->setAttribute(Qt::WA_AcceptTouchEvents);
GraphicsScene scene;
@@ -877,13 +940,9 @@ void tst_Gestures::panOnWidgets()
QTest::touchEvent()
.release(0, QPoint(10, 40), &leftWidget)
.release(1, QPoint(20, 50), &rightWidget);
- QVERIFY(!mainWidget->touch.seenTouchBeginEvent);
- QVERIFY(leftWidget.touch.seenTouchBeginEvent);
- QVERIFY(leftWidget.touch.seenTouchUpdateEvent);
- QVERIFY(leftWidget.touch.seenTouchEndEvent);
- QVERIFY(rightWidget.touch.seenTouchBeginEvent);
- QVERIFY(rightWidget.touch.seenTouchUpdateEvent);
- QVERIFY(rightWidget.touch.seenTouchEndEvent);
+
+ QVERIFY(leftWidget.gesture.last.pan.delivered);
+ QVERIFY(rightWidget.gesture.last.pan.delivered);
}
QTEST_MAIN(tst_Gestures)