diff options
author | Frederik Gladhorn <frederik.gladhorn@nokia.com> | 2010-09-22 17:01:08 +0200 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@nokia.com> | 2010-09-27 13:15:53 +0200 |
commit | fab304e64769b75b80bfdee86499fca076412997 (patch) | |
tree | 8c32b362d61204dd175dbed87de80a0c1ce5eced | |
parent | f0a5fd33091a989e48a3329c40224cdad42fa355 (diff) |
Make TapAndHold recognizer work with QGraphicsItem
-rw-r--r-- | qdeclarativegesturerecognizers.cpp | 59 |
1 files changed, 33 insertions, 26 deletions
diff --git a/qdeclarativegesturerecognizers.cpp b/qdeclarativegesturerecognizers.cpp index 9d9aeaf..6e5d3af 100644 --- a/qdeclarativegesturerecognizers.cpp +++ b/qdeclarativegesturerecognizers.cpp @@ -714,11 +714,6 @@ QGestureRecognizer::Result QTapGestureRecognizer::recognize(QGesture *state, QObject * target, QEvent *event) { -// if (target) { -// qDebug() << "QTapGestureRecognizer::recognize"; -// target->dumpObjectInfo(); -// } - QTapGesture *q = static_cast<QTapGesture *>(state); QGestureRecognizer::Result result = QGestureRecognizer::CancelGesture; @@ -854,30 +849,36 @@ QTapAndHoldGestureRecognizer::recognize(QGesture *state, QObject *object, } const QTouchEvent *ev = static_cast<const QTouchEvent *>(event); -// const QMouseEvent *me = static_cast<const QMouseEvent *>(event); + //const QMouseEvent *me = static_cast<const QMouseEvent *>(event); + #ifndef QT_NO_GRAPHICSVIEW - const QMouseEvent *gsme = static_cast<const QMouseEvent *>(event); + const QGraphicsSceneMouseEvent *gsme = static_cast<const QGraphicsSceneMouseEvent *>(event); #endif enum { TapRadius = 40 }; switch (event->type()) { #ifndef QT_NO_GRAPHICSVIEW - case QEvent::MouseButtonPress: - q->setPosition(gsme->globalPos()); + case QEvent::GraphicsSceneMousePress: + qDebug() << "got GraphicsSceneMousePress in tap and hold"; + + q->setPosition(gsme->screenPos()); q->setHotSpot(q->position()); if (q->property("timerId").toInt()) q->killTimer(q->property("timerId").toInt()); q->setProperty("timerId",q->startTimer(q->timeout())); return QGestureRecognizer::MayBeGesture; // we don't show a sign of life until the timeout #endif -// case QEvent::MouseButtonPress: -// d->position = me->globalPos(); -// q->setHotSpot(d->position); -// if (q->property("timerId").toInt()) -// q->killTimer(q->property("timerId").toInt()); -// q->setProperty("timerId",q->startTimer(QTapAndHoldGesturePrivate::Timeout)); -// return QGestureRecognizer::MayBeGesture; // we don't show a sign of life until the timeout + + case QEvent::MouseButtonPress: { + QMouseEvent *ev = static_cast<QMouseEvent *>(event); + q->setPosition(ev->globalPos()); + q->setHotSpot(q->position()); + if (q->property("timerId").toInt()) + q->killTimer(q->property("timerId").toInt()); + q->setProperty("timerId",q->startTimer(q->startTimer(q->timeout()))); + return QGestureRecognizer::MayBeGesture; // we don't show a sign of life until the timeout + } case QEvent::TouchBegin: q->setPosition(ev->touchPoints().at(0).startScreenPos()); q->setHotSpot(q->position()); @@ -885,11 +886,13 @@ QTapAndHoldGestureRecognizer::recognize(QGesture *state, QObject *object, q->killTimer(q->property("timerId").toInt()); q->setProperty("timerId",q->startTimer(q->timeout())); return QGestureRecognizer::MayBeGesture; // we don't show a sign of life until the timeout + #ifndef QT_NO_GRAPHICSVIEW - case QEvent::MouseButtonRelease: + case QEvent::GraphicsSceneMouseRelease: #endif -// case QEvent::MouseButtonRelease: + case QEvent::MouseButtonRelease: case QEvent::TouchEnd: + qDebug() << "cancel tap and hold."; return QGestureRecognizer::CancelGesture; // get out of the MayBeGesture state case QEvent::TouchUpdate: if (q->property("timerId").toInt() && ev->touchPoints().size() == 1) { @@ -899,15 +902,16 @@ QTapAndHoldGestureRecognizer::recognize(QGesture *state, QObject *object, return QGestureRecognizer::MayBeGesture; } return QGestureRecognizer::CancelGesture; -// case QEvent::MouseMove: { -// QPoint delta = me->globalPos() - d->position.toPoint(); -// if (q->property("timerId").toInt() && delta.manhattanLength() <= TapRadius) -// return QGestureRecognizer::MayBeGesture; -// return QGestureRecognizer::CancelGesture; -// } -#ifndef QT_NO_GRAPHICSVIEW case QEvent::MouseMove: { - QPoint delta = gsme->globalPos() - q->position().toPoint(); + QMouseEvent *ev = static_cast<QMouseEvent *>(event); + QPoint delta = ev->globalPos() - q->position().toPoint(); + if (q->property("timerId").toInt() && delta.manhattanLength() <= TapRadius) + return QGestureRecognizer::MayBeGesture; + return QGestureRecognizer::CancelGesture; + } +#ifndef QT_NO_GRAPHICSVIEW + case QEvent::GraphicsSceneMouseMove: { + QPoint delta = gsme->screenPos() - q->position().toPoint(); if (q->property("timerId").toInt() && delta.manhattanLength() <= TapRadius) return QGestureRecognizer::MayBeGesture; return QGestureRecognizer::CancelGesture; @@ -922,6 +926,9 @@ void QTapAndHoldGestureRecognizer::reset(QGesture *state) { if (!state) return; + + qDebug() << "reset tap and hold"; + QTapAndHoldGesture *q = static_cast<QTapAndHoldGesture *>(state); q->setPosition(QPointF()); |