src/hbcore/gestures/hbpangesturelogic_p.cpp
changeset 30 80e4d18b72f5
parent 28 b7da29130b0e
equal deleted inserted replaced
28:b7da29130b0e 30:80e4d18b72f5
    21 ** If you have questions regarding the use of this file, please contact
    21 ** If you have questions regarding the use of this file, please contact
    22 ** Nokia at developer.feedback@nokia.com.
    22 ** Nokia at developer.feedback@nokia.com.
    23 **
    23 **
    24 ****************************************************************************/
    24 ****************************************************************************/
    25 
    25 
       
    26 #include "hbpangesture.h"
       
    27 #include "hbpangesturelogic_p.h"
       
    28 #include "hbgestures_p.h"
       
    29 
       
    30 #include "hbnamespace_p.h"
       
    31 #include <hbdeviceprofile.h>
       
    32 
    26 #include <QEvent>
    33 #include <QEvent>
    27 #include <QGestureRecognizer>
    34 #include <QGestureRecognizer>
    28 #include <QGraphicsView>
    35 #include <QGraphicsView>
    29 #include <QMouseEvent>
    36 #include <QMouseEvent>
    30 #include <QGraphicsScene>
    37 #include <QGraphicsScene>
    31 
    38 
    32 #include <hbdeviceprofile.h>
       
    33 
       
    34 #include "hbpangesture.h"
       
    35 #include "hbpangesture_p.h"
       
    36 #include "hbpangesturelogic_p.h"
       
    37 #include "hbnamespace_p.h"
       
    38 
    39 
    39 #define followedTouchPoint(te, gesture) te->touchPoints().at(followedTouchPointIndex(te, gesture))
    40 #define followedTouchPoint(te, gesture) te->touchPoints().at(followedTouchPointIndex(te, gesture))
    40 
    41 
    41 /*!
    42 /*!
    42    @hbcore
    43    @hbcore
    54     \return
    55     \return
    55 
    56 
    56 */
    57 */
    57 HbPanGestureLogic::HbPanGestureLogic()
    58 HbPanGestureLogic::HbPanGestureLogic()
    58 {
    59 {
    59     mCurrentTime = QTime();
       
    60 }
    60 }
    61 
    61 
    62 HbPanGestureLogic::~HbPanGestureLogic() {}
    62 HbPanGestureLogic::~HbPanGestureLogic() {}
    63 
    63 
    64 /*!
    64 /*!
   100     gesture->d_ptr->mDeltaSinceLastTimeStamp      = QPointF(0,0);
   100     gesture->d_ptr->mDeltaSinceLastTimeStamp      = QPointF(0,0);
   101     gesture->d_ptr->mSceneStartPos                = QPointF(0,0);
   101     gesture->d_ptr->mSceneStartPos                = QPointF(0,0);
   102     gesture->d_ptr->mSceneLastOffset              = QPointF(0,0);
   102     gesture->d_ptr->mSceneLastOffset              = QPointF(0,0);
   103     gesture->d_ptr->mSceneOffset                  = QPointF(0,0);
   103     gesture->d_ptr->mSceneOffset                  = QPointF(0,0);
   104     gesture->d_ptr->mSceneDeltaSinceLastTimeStamp = QPointF(0,0);
   104     gesture->d_ptr->mSceneDeltaSinceLastTimeStamp = QPointF(0,0);
   105     gesture->d_ptr->mAxisX.clear();
   105     gesture->d_ptr->mAxisX.resetRecorder();
   106     gesture->d_ptr->mAxisY.clear();
   106     gesture->d_ptr->mAxisY.resetRecorder();
   107     gesture->d_ptr->mSceneAxisX.clear();
   107     gesture->d_ptr->mSceneAxisX.resetRecorder();
   108     gesture->d_ptr->mSceneAxisY.clear();
   108     gesture->d_ptr->mSceneAxisY.resetRecorder();
   109 
   109 
   110     gesture->setLastOffset(QPointF());
   110     gesture->setLastOffset(QPointF());
   111     gesture->setOffset(QPointF(0,0));
   111     gesture->setOffset(QPointF(0,0));
   112     gesture->setAcceleration(0);
   112     gesture->setAcceleration(0);
   113     gesture->setStartPos(QPointF());
   113     gesture->setStartPos(QPointF());
   124 */
   124 */
   125 QGestureRecognizer::Result HbPanGestureLogic::handleMousePress(
   125 QGestureRecognizer::Result HbPanGestureLogic::handleMousePress(
   126         Qt::GestureState gestureState,
   126         Qt::GestureState gestureState,
   127         HbPanGesture *gesture,
   127         HbPanGesture *gesture,
   128         QObject *watched,
   128         QObject *watched,
   129         QMouseEvent *me )
   129         QMouseEvent *me,
       
   130         qint64 currentTime )
   130 {
   131 {
   131     // Just ignore situations that are not interesting at all.
   132     // Just ignore situations that are not interesting at all.
   132     if ( !( gestureState == Qt::NoGesture && me->button() == Qt::LeftButton ) )
   133     if ( !( gestureState == Qt::NoGesture && me->button() == Qt::LeftButton ) )
   133     {
   134     {
   134         return QGestureRecognizer::Ignore;
   135         return QGestureRecognizer::Ignore;
   140     gesture->setLastOffset( QPointF( 0,0 ) );
   141     gesture->setLastOffset( QPointF( 0,0 ) );
   141     QPointF scenePos = HbGestureUtils::mapToScene(watched, me->globalPos());
   142     QPointF scenePos = HbGestureUtils::mapToScene(watched, me->globalPos());
   142     gesture->d_ptr->mSceneStartPos       = scenePos;
   143     gesture->d_ptr->mSceneStartPos       = scenePos;
   143     gesture->d_ptr->mSceneOffset         = HbGestureUtils::mapToScene(watched, QPointF(0,0));
   144     gesture->d_ptr->mSceneOffset         = HbGestureUtils::mapToScene(watched, QPointF(0,0));
   144     gesture->d_ptr->mSceneLastOffset     = HbGestureUtils::mapToScene(watched, QPointF(0,0));
   145     gesture->d_ptr->mSceneLastOffset     = HbGestureUtils::mapToScene(watched, QPointF(0,0));
   145     gesture->d_ptr->mLastTimeStamp = mCurrentTime;
   146     gesture->d_ptr->mLastTimeStamp = currentTime;
   146 
   147 
   147 
   148 
   148     gesture->d_ptr->mThresholdSquare = HbDefaultPanThreshold * HbDeviceProfile::current().ppmValue();
   149     gesture->d_ptr->mThresholdSquare = HbDefaultPanThreshold * HbDeviceProfile::current().ppmValue();
   149     gesture->d_ptr->mThresholdSquare = gesture->d_ptr->mThresholdSquare * gesture->d_ptr->mThresholdSquare;
   150     gesture->d_ptr->mThresholdSquare = gesture->d_ptr->mThresholdSquare * gesture->d_ptr->mThresholdSquare;
   150 
   151 
   152 
   153 
   153     gesture->d_ptr->mAxisX.resetRecorder(velocityThreshold);
   154     gesture->d_ptr->mAxisX.resetRecorder(velocityThreshold);
   154     gesture->d_ptr->mAxisY.resetRecorder(velocityThreshold);
   155     gesture->d_ptr->mAxisY.resetRecorder(velocityThreshold);
   155     gesture->d_ptr->mSceneAxisX.resetRecorder(velocityThreshold);
   156     gesture->d_ptr->mSceneAxisX.resetRecorder(velocityThreshold);
   156     gesture->d_ptr->mSceneAxisY.resetRecorder(velocityThreshold);
   157     gesture->d_ptr->mSceneAxisY.resetRecorder(velocityThreshold);
   157     gesture->d_ptr->mAxisX.record( me->globalPos().x(), mCurrentTime );
   158     gesture->d_ptr->mAxisX.record( me->globalPos().x(), currentTime );
   158     gesture->d_ptr->mAxisY.record( me->globalPos().y(), mCurrentTime );
   159     gesture->d_ptr->mAxisY.record( me->globalPos().y(), currentTime );
   159     gesture->d_ptr->mSceneAxisX.record( scenePos.x(), mCurrentTime );
   160     gesture->d_ptr->mSceneAxisX.record( scenePos.x(), currentTime );
   160     gesture->d_ptr->mSceneAxisY.record( scenePos.y(), mCurrentTime );
   161     gesture->d_ptr->mSceneAxisY.record( scenePos.y(), currentTime );
   161 
   162 
   162     return QGestureRecognizer::MayBeGesture;
   163     return QGestureRecognizer::MayBeGesture;
   163 }
   164 }
   164 
   165 
   165 /*!
   166 /*!
   170 */
   171 */
   171 QGestureRecognizer::Result HbPanGestureLogic::handleMouseMove(
   172 QGestureRecognizer::Result HbPanGestureLogic::handleMouseMove(
   172         Qt::GestureState gestureState,
   173         Qt::GestureState gestureState,
   173         HbPanGesture *gesture,
   174         HbPanGesture *gesture,
   174         QObject *watched,
   175         QObject *watched,
   175         QMouseEvent *me )
   176         QMouseEvent *me,
       
   177         qint64 currentTime )
   176 {
   178 {
   177     if ( !me->buttons().testFlag(Qt::LeftButton))
   179     if ( !me->buttons().testFlag(Qt::LeftButton))
   178     {
   180     {
   179         return QGestureRecognizer::Ignore;
   181         return QGestureRecognizer::Ignore;
   180     }
   182     }
   183     gesture->setLastOffset( gesture->offset().toPoint() );
   185     gesture->setLastOffset( gesture->offset().toPoint() );
   184     gesture->setOffset( offset );
   186     gesture->setOffset( offset );
   185     gesture->d_ptr->mSceneLastOffset = gesture->d_ptr->mSceneOffset;
   187     gesture->d_ptr->mSceneLastOffset = gesture->d_ptr->mSceneOffset;
   186     gesture->d_ptr->mSceneOffset =
   188     gesture->d_ptr->mSceneOffset =
   187             HbGestureUtils::mapToScene(watched, me->globalPos()) - gesture->d_ptr->mSceneStartPos;
   189             HbGestureUtils::mapToScene(watched, me->globalPos()) - gesture->d_ptr->mSceneStartPos;
   188     gesture->d_ptr->mLastTimeStamp = mCurrentTime;
   190     gesture->d_ptr->mLastTimeStamp = currentTime;
   189 
   191 
   190     QPointF scenePos = HbGestureUtils::mapToScene(watched, me->globalPos());
   192     QPointF scenePos = HbGestureUtils::mapToScene(watched, me->globalPos());
   191     gesture->d_ptr->mAxisX.record( me->globalPos().x(), mCurrentTime );
   193     gesture->d_ptr->mAxisX.record( me->globalPos().x(), currentTime );
   192     gesture->d_ptr->mAxisY.record( me->globalPos().y(), mCurrentTime );
   194     gesture->d_ptr->mAxisY.record( me->globalPos().y(), currentTime );
   193     gesture->d_ptr->mSceneAxisX.record( scenePos.x(), mCurrentTime );
   195     gesture->d_ptr->mSceneAxisX.record( scenePos.x(), currentTime );
   194     gesture->d_ptr->mSceneAxisY.record( scenePos.y(), mCurrentTime );
   196     gesture->d_ptr->mSceneAxisY.record( scenePos.y(), currentTime );
   195 
   197 
   196 
   198 
   197     QGraphicsView* view = qobject_cast<QGraphicsView*>(watched->parent());
   199     QGraphicsView* view = qobject_cast<QGraphicsView*>(watched->parent());
   198     if (view) {
   200     if (view) {
   199         QGraphicsScene* scene = view->scene();
   201         QGraphicsScene* scene = view->scene();
   225 */
   227 */
   226 QGestureRecognizer::Result HbPanGestureLogic::handleMouseRelease(
   228 QGestureRecognizer::Result HbPanGestureLogic::handleMouseRelease(
   227         Qt::GestureState gestureState,
   229         Qt::GestureState gestureState,
   228         HbPanGesture *gesture,
   230         HbPanGesture *gesture,
   229         QObject *watched,
   231         QObject *watched,
   230         QMouseEvent *me )
   232         QMouseEvent *me,
       
   233         qint64 currentTime)
   231 {
   234 {
   232     Q_UNUSED(me);
   235     Q_UNUSED(me);
   233     Q_UNUSED(gesture);
   236     Q_UNUSED(gesture);
   234     Q_UNUSED(watched);
   237     Q_UNUSED(watched);
   235 
   238 
   236     gesture->d_ptr->mLastTimeStamp = mCurrentTime;
   239     gesture->d_ptr->mLastTimeStamp = currentTime;
   237 
   240 
   238     if ( gestureState == Qt::GestureStarted || gestureState == Qt::GestureUpdated )
   241     if ( gestureState == Qt::GestureStarted || gestureState == Qt::GestureUpdated )
   239     {
   242     {
   240         return QGestureRecognizer::FinishGesture;
   243         return QGestureRecognizer::FinishGesture;
   241     }
   244     }
   267 */
   270 */
   268 QGestureRecognizer::Result HbPanGestureLogic::handleTouchBegin(
   271 QGestureRecognizer::Result HbPanGestureLogic::handleTouchBegin(
   269         Qt::GestureState gestureState,
   272         Qt::GestureState gestureState,
   270         HbPanGesture *gesture,
   273         HbPanGesture *gesture,
   271         QObject *watched,
   274         QObject *watched,
   272         QTouchEvent *te )
   275         QTouchEvent *te,
       
   276         qint64 currentTime)
   273 {
   277 {
   274     gesture->d_ptr->mFollowedTouchPointId = getNextId(te);
   278     gesture->d_ptr->mFollowedTouchPointId = getNextId(te);
   275 
   279 
   276     if(gesture->d_ptr->mFollowedTouchPointId == -1 && gestureState != Qt::NoGesture) {
   280     if(gesture->d_ptr->mFollowedTouchPointId == -1 && gestureState != Qt::NoGesture) {
   277         return QGestureRecognizer::FinishGesture; // if all touchpoints are released
   281         return QGestureRecognizer::FinishGesture; // if all touchpoints are released
   286     gesture->setLastOffset( QPointF( 0,0 ) );
   290     gesture->setLastOffset( QPointF( 0,0 ) );
   287 
   291 
   288     gesture->d_ptr->mSceneStartPos       = scenePos;
   292     gesture->d_ptr->mSceneStartPos       = scenePos;
   289     gesture->d_ptr->mSceneOffset         = QPointF(0,0);
   293     gesture->d_ptr->mSceneOffset         = QPointF(0,0);
   290     gesture->d_ptr->mSceneLastOffset     = QPointF(0,0);
   294     gesture->d_ptr->mSceneLastOffset     = QPointF(0,0);
   291     gesture->d_ptr->mLastTimeStamp = mCurrentTime;
   295     gesture->d_ptr->mLastTimeStamp = currentTime;
   292 
   296 
   293     qreal defaultThreshold = HbDefaultPanThreshold * HbDeviceProfile::current().ppmValue();
   297     qreal defaultThreshold = HbDefaultPanThreshold * HbDeviceProfile::current().ppmValue();
   294     gesture->d_ptr->mThresholdSquare = defaultThreshold * defaultThreshold;
   298     gesture->d_ptr->mThresholdSquare = defaultThreshold * defaultThreshold;
   295 
   299 
   296     gesture->d_ptr->mAxisX.resetRecorder(defaultThreshold);
   300     gesture->d_ptr->mAxisX.resetRecorder(defaultThreshold);
   297     gesture->d_ptr->mAxisY.resetRecorder(defaultThreshold);
   301     gesture->d_ptr->mAxisY.resetRecorder(defaultThreshold);
   298     gesture->d_ptr->mSceneAxisX.resetRecorder(defaultThreshold);
   302     gesture->d_ptr->mSceneAxisX.resetRecorder(defaultThreshold);
   299     gesture->d_ptr->mSceneAxisY.resetRecorder(defaultThreshold);
   303     gesture->d_ptr->mSceneAxisY.resetRecorder(defaultThreshold);
   300     gesture->d_ptr->mAxisY.record( tp.screenPos().y(), mCurrentTime );
   304     gesture->d_ptr->mAxisY.record( tp.screenPos().y(), currentTime );
   301     gesture->d_ptr->mAxisX.record( tp.screenPos().x(), mCurrentTime );    
   305     gesture->d_ptr->mAxisX.record( tp.screenPos().x(), currentTime );
   302     gesture->d_ptr->mSceneAxisX.record( scenePos.x(), mCurrentTime );
   306     gesture->d_ptr->mSceneAxisX.record( scenePos.x(), currentTime );
   303     gesture->d_ptr->mSceneAxisY.record( scenePos.y(), mCurrentTime );
   307     gesture->d_ptr->mSceneAxisY.record( scenePos.y(), currentTime );
   304 
   308 
   305     if (gestureState != Qt::NoGesture) {
   309     if (gestureState != Qt::NoGesture) {
   306         return QGestureRecognizer::Ignore;
   310         return QGestureRecognizer::Ignore;
   307     } else {
   311     } else {
   308         return QGestureRecognizer::MayBeGesture;
   312         return QGestureRecognizer::MayBeGesture;
   317 */
   321 */
   318 QGestureRecognizer::Result HbPanGestureLogic::handleTouchMove(
   322 QGestureRecognizer::Result HbPanGestureLogic::handleTouchMove(
   319         Qt::GestureState gestureState,
   323         Qt::GestureState gestureState,
   320         HbPanGesture *gesture,
   324         HbPanGesture *gesture,
   321         QObject *watched,
   325         QObject *watched,
   322         QTouchEvent *te)
   326         QTouchEvent *te,
       
   327         qint64 currentTime)
   323 {
   328 {
   324     QTouchEvent::TouchPoint tp = followedTouchPoint(te, gesture);
   329     QTouchEvent::TouchPoint tp = followedTouchPoint(te, gesture);
   325 
   330 
   326     // touch event handling has already started
   331     // touch event handling has already started
   327     // need to update position and offset
   332     // need to update position and offset
   343     gesture->setLastOffset( gesture->offset().toPoint() );
   348     gesture->setLastOffset( gesture->offset().toPoint() );
   344     gesture->setOffset( offset );
   349     gesture->setOffset( offset );
   345     gesture->d_ptr->mSceneLastOffset = gesture->d_ptr->mSceneOffset;
   350     gesture->d_ptr->mSceneLastOffset = gesture->d_ptr->mSceneOffset;
   346     gesture->d_ptr->mSceneOffset =
   351     gesture->d_ptr->mSceneOffset =
   347             HbGestureUtils::mapToScene(watched, tp.screenPos()) - gesture->d_ptr->mSceneStartPos;
   352             HbGestureUtils::mapToScene(watched, tp.screenPos()) - gesture->d_ptr->mSceneStartPos;
   348     gesture->d_ptr->mLastTimeStamp = mCurrentTime;
   353     gesture->d_ptr->mLastTimeStamp = currentTime;
   349 
   354 
   350     gesture->d_ptr->mAxisX.record( tp.screenPos().x(), mCurrentTime );
   355     gesture->d_ptr->mAxisX.record( tp.screenPos().x(), currentTime );
   351     gesture->d_ptr->mAxisY.record( tp.screenPos().y(), mCurrentTime );
   356     gesture->d_ptr->mAxisY.record( tp.screenPos().y(), currentTime );
   352     QPointF scenePos = HbGestureUtils::mapToScene(watched, tp.screenPos());
   357     QPointF scenePos = HbGestureUtils::mapToScene(watched, tp.screenPos());
   353     gesture->d_ptr->mSceneAxisX.record( scenePos.x(), mCurrentTime );
   358     gesture->d_ptr->mSceneAxisX.record( scenePos.x(), currentTime );
   354     gesture->d_ptr->mSceneAxisY.record( scenePos.y(), mCurrentTime );
   359     gesture->d_ptr->mSceneAxisY.record( scenePos.y(), currentTime );
   355 
   360 
   356     QGraphicsView* view = qobject_cast<QGraphicsView*>(watched->parent());
   361     QGraphicsView* view = qobject_cast<QGraphicsView*>(watched->parent());
   357     if (view) {
   362     if (view) {
   358         QGraphicsScene* scene = view->scene();
   363         QGraphicsScene* scene = view->scene();
   359         if (scene && scene->property(HbPrivate::OverridingGesture.latin1()).isValid() &&
   364         if (scene && scene->property(HbPrivate::OverridingGesture.latin1()).isValid() &&
   373 */
   378 */
   374 QGestureRecognizer::Result HbPanGestureLogic::handleTouchEnd(
   379 QGestureRecognizer::Result HbPanGestureLogic::handleTouchEnd(
   375         Qt::GestureState gestureState,
   380         Qt::GestureState gestureState,
   376         HbPanGesture *gesture,
   381         HbPanGesture *gesture,
   377         QObject *watched,
   382         QObject *watched,
   378         QTouchEvent *te )
   383         QTouchEvent *te,
       
   384         qint64 currentTime)
   379 {
   385 {
   380     Q_UNUSED(te);
   386     Q_UNUSED(te);
   381     Q_UNUSED(gesture);
   387     Q_UNUSED(gesture);
   382     Q_UNUSED(watched);
   388     Q_UNUSED(watched);
   383 
   389 
   384     gesture->d_ptr->mLastTimeStamp = mCurrentTime;
   390     gesture->d_ptr->mLastTimeStamp = currentTime;
   385 
   391 
   386     if ( gestureState == Qt::GestureStarted || gestureState == Qt::GestureUpdated )
   392     if ( gestureState == Qt::GestureStarted || gestureState == Qt::GestureUpdated )
   387     {
   393     {
   388         return QGestureRecognizer::FinishGesture;
   394         return QGestureRecognizer::FinishGesture;
   389     }
   395     }
   403 QGestureRecognizer::Result HbPanGestureLogic::recognize(
   409 QGestureRecognizer::Result HbPanGestureLogic::recognize(
   404         Qt::GestureState gestureState,
   410         Qt::GestureState gestureState,
   405         HbPanGesture *gesture,
   411         HbPanGesture *gesture,
   406         QObject *watched,
   412         QObject *watched,
   407         QEvent *event,
   413         QEvent *event,
   408         QTime currentTime)
   414         qint64 currentTime)
   409 {
   415 {
   410     // Record the time right away.
       
   411     mCurrentTime = currentTime;
       
   412 
       
   413     if ( isMouseEvent(event->type()) )
   416     if ( isMouseEvent(event->type()) )
   414     {
   417     {
   415         if (gesture->d_ptr->mIgnoreMouseEvents) {
   418         if (gesture->d_ptr->mIgnoreMouseEvents) {
   416             return QGestureRecognizer::Ignore;
   419             return QGestureRecognizer::Ignore;
   417         }
   420         }
   418         QMouseEvent* me = static_cast<QMouseEvent*>(event);
   421         QMouseEvent* me = static_cast<QMouseEvent*>(event);
   419         switch(event->type())
   422         switch(event->type())
   420         {
   423         {
   421         case QEvent::MouseButtonDblClick:
   424         case QEvent::MouseButtonDblClick:
   422         case QEvent::MouseButtonPress:
   425         case QEvent::MouseButtonPress:
   423             return handleMousePress(gestureState, gesture, watched, me);
   426             return handleMousePress(gestureState, gesture, watched, me, currentTime);
   424         case QEvent::MouseMove:
   427         case QEvent::MouseMove:
   425             return handleMouseMove(gestureState, gesture, watched, me);
   428             return handleMouseMove(gestureState, gesture, watched, me, currentTime);
   426         case QEvent::MouseButtonRelease:
   429         case QEvent::MouseButtonRelease:
   427             return handleMouseRelease(gestureState, gesture, watched, me);
   430             return handleMouseRelease(gestureState, gesture, watched, me, currentTime);
   428         default: break;
   431         default: break;
   429         }
   432         }
   430     }
   433     }
   431     if (isTouchEvent(event->type()) && watched->isWidgetType() ) {
   434     if (isTouchEvent(event->type()) && watched->isWidgetType() ) {
   432 
   435 
   433         QTouchEvent *te = static_cast<QTouchEvent *>(event);
   436         QTouchEvent *te = static_cast<QTouchEvent *>(event);
   434 
   437 
   435         switch(event->type())
   438         switch(event->type())
   436         {
   439         {
   437         case QEvent::TouchBegin:
   440         case QEvent::TouchBegin:
   438             return handleTouchBegin(gestureState, gesture, watched, te);
   441             return handleTouchBegin(gestureState, gesture, watched, te, currentTime);
   439             break;
       
   440         case QEvent::TouchUpdate: {
   442         case QEvent::TouchUpdate: {
   441                 gesture->d_ptr->mIgnoreMouseEvents = true;
   443                 gesture->d_ptr->mIgnoreMouseEvents = true;
   442 
   444 
   443                 if (followedTouchPoint(te, gesture).state() == Qt::TouchPointReleased) {
   445                 if (followedTouchPoint(te, gesture).state() == Qt::TouchPointReleased) {
   444                     //qDebug() << "---- Finger changed ----";
   446                     //qDebug() << "---- Finger changed ----";
   445                     return handleTouchBegin(gestureState, gesture, watched, te);
   447                     return handleTouchBegin(gestureState, gesture, watched, te, currentTime);
   446                 }
   448                 }
   447                 if (followedTouchPoint(te, gesture).state() == Qt::TouchPointMoved) {
   449                 if (followedTouchPoint(te, gesture).state() == Qt::TouchPointMoved) {
   448                     return handleTouchMove(gestureState, gesture, watched, te);
   450                     return handleTouchMove(gestureState, gesture, watched, te, currentTime);
   449                 }
   451                 }
   450                 break;
   452                 break;
   451             }
   453             }
   452         case QEvent::TouchEnd:
   454         case QEvent::TouchEnd:
   453             //qDebug() << "===== TOUCHEND ======" ;
   455             //qDebug() << "===== TOUCHEND ======" ;
   454             gesture->d_ptr->mIgnoreMouseEvents = false;
   456             gesture->d_ptr->mIgnoreMouseEvents = false;
   455             return handleTouchEnd(gestureState, gesture, watched, te);
   457             return handleTouchEnd(gestureState, gesture, watched, te, currentTime);
   456         default:
   458         default:
   457             break;
   459             break;
   458         }
   460         }
   459     }
   461     }
   460     return QGestureRecognizer::Ignore;
   462     return QGestureRecognizer::Ignore;