src/gui/kernel/qstandardgestures.cpp
changeset 33 3e2da88830cd
parent 30 5dc02b23752f
equal deleted inserted replaced
30:5dc02b23752f 33:3e2da88830cd
    43 #include "qgesture.h"
    43 #include "qgesture.h"
    44 #include "qgesture_p.h"
    44 #include "qgesture_p.h"
    45 #include "qevent.h"
    45 #include "qevent.h"
    46 #include "qwidget.h"
    46 #include "qwidget.h"
    47 #include "qabstractscrollarea.h"
    47 #include "qabstractscrollarea.h"
       
    48 #include <qgraphicssceneevent.h>
    48 #include "qdebug.h"
    49 #include "qdebug.h"
       
    50 
       
    51 #ifndef QT_NO_GESTURES
    49 
    52 
    50 QT_BEGIN_NAMESPACE
    53 QT_BEGIN_NAMESPACE
    51 
    54 
    52 QPanGestureRecognizer::QPanGestureRecognizer()
    55 QPanGestureRecognizer::QPanGestureRecognizer()
    53 {
    56 {
   108             d->offset =
   111             d->offset =
   109                     QPointF(p1.pos().x() - p1.startPos().x() + p2.pos().x() - p2.startPos().x(),
   112                     QPointF(p1.pos().x() - p1.startPos().x() + p2.pos().x() - p2.startPos().x(),
   110                           p1.pos().y() - p1.startPos().y() + p2.pos().y() - p2.startPos().y()) / 2;
   113                           p1.pos().y() - p1.startPos().y() + p2.pos().y() - p2.startPos().y()) / 2;
   111             if (d->offset.x() > 10  || d->offset.y() > 10 ||
   114             if (d->offset.x() > 10  || d->offset.y() > 10 ||
   112                 d->offset.x() < -10 || d->offset.y() < -10) {
   115                 d->offset.x() < -10 || d->offset.y() < -10) {
       
   116                 q->setHotSpot(p1.startScreenPos());
   113                 result = QGestureRecognizer::TriggerGesture;
   117                 result = QGestureRecognizer::TriggerGesture;
   114             } else {
   118             } else {
   115                 result = QGestureRecognizer::MayBeGesture;
   119                 result = QGestureRecognizer::MayBeGesture;
   116             }
   120             }
   117         }
   121         }
   437     QGestureRecognizer::Result result = QGestureRecognizer::CancelGesture;
   441     QGestureRecognizer::Result result = QGestureRecognizer::CancelGesture;
   438 
   442 
   439     switch (event->type()) {
   443     switch (event->type()) {
   440     case QEvent::TouchBegin: {
   444     case QEvent::TouchBegin: {
   441         d->position = ev->touchPoints().at(0).pos();
   445         d->position = ev->touchPoints().at(0).pos();
       
   446         q->setHotSpot(ev->touchPoints().at(0).screenPos());
   442         result = QGestureRecognizer::TriggerGesture;
   447         result = QGestureRecognizer::TriggerGesture;
   443         break;
   448         break;
   444     }
   449     }
   445     case QEvent::TouchUpdate:
   450     case QEvent::TouchUpdate:
   446     case QEvent::TouchEnd: {
   451     case QEvent::TouchEnd: {
   503     QTapAndHoldGesturePrivate *d = q->d_func();
   508     QTapAndHoldGesturePrivate *d = q->d_func();
   504 
   509 
   505     if (object == state && event->type() == QEvent::Timer) {
   510     if (object == state && event->type() == QEvent::Timer) {
   506         q->killTimer(d->timerId);
   511         q->killTimer(d->timerId);
   507         d->timerId = 0;
   512         d->timerId = 0;
   508         return QGestureRecognizer::Ignore | QGestureRecognizer::ConsumeEventHint;
   513         return QGestureRecognizer::FinishGesture | QGestureRecognizer::ConsumeEventHint;
   509     }
   514     }
   510 
   515 
   511     const QTouchEvent *ev = static_cast<const QTouchEvent *>(event);
   516     const QTouchEvent *ev = static_cast<const QTouchEvent *>(event);
   512 
   517     const QMouseEvent *me = static_cast<const QMouseEvent *>(event);
   513     QGestureRecognizer::Result result = QGestureRecognizer::CancelGesture;
   518 #ifndef QT_NO_GRAPHICSVIEW
   514 
   519     const QGraphicsSceneMouseEvent *gsme = static_cast<const QGraphicsSceneMouseEvent *>(event);
   515     enum { TimerInterval = 2000 };
   520 #endif
       
   521 
   516     enum { TapRadius = 40 };
   522     enum { TapRadius = 40 };
   517 
   523 
   518     switch (event->type()) {
   524     switch (event->type()) {
   519     case QEvent::TouchBegin:
   525 #ifndef QT_NO_GRAPHICSVIEW
   520         d->position = ev->touchPoints().at(0).pos();
   526     case QEvent::GraphicsSceneMousePress:
       
   527         d->position = gsme->screenPos();
       
   528         q->setHotSpot(d->position);
   521         if (d->timerId)
   529         if (d->timerId)
   522             q->killTimer(d->timerId);
   530             q->killTimer(d->timerId);
   523         d->timerId = q->startTimer(TimerInterval);
   531         d->timerId = q->startTimer(QTapAndHoldGesturePrivate::Timeout);
   524         result = QGestureRecognizer::TriggerGesture;
   532         return QGestureRecognizer::MayBeGesture; // we don't show a sign of life until the timeout
   525         break;
   533 #endif
       
   534     case QEvent::MouseButtonPress:
       
   535         d->position = me->globalPos();
       
   536         q->setHotSpot(d->position);
       
   537         if (d->timerId)
       
   538             q->killTimer(d->timerId);
       
   539         d->timerId = q->startTimer(QTapAndHoldGesturePrivate::Timeout);
       
   540         return QGestureRecognizer::MayBeGesture; // we don't show a sign of life until the timeout
       
   541     case QEvent::TouchBegin:
       
   542         d->position = ev->touchPoints().at(0).startScreenPos();
       
   543         q->setHotSpot(d->position);
       
   544         if (d->timerId)
       
   545             q->killTimer(d->timerId);
       
   546         d->timerId = q->startTimer(QTapAndHoldGesturePrivate::Timeout);
       
   547         return QGestureRecognizer::MayBeGesture; // we don't show a sign of life until the timeout
       
   548 #ifndef QT_NO_GRAPHICSVIEW
       
   549     case QEvent::GraphicsSceneMouseRelease:
       
   550 #endif
       
   551     case QEvent::MouseButtonRelease:
   526     case QEvent::TouchEnd:
   552     case QEvent::TouchEnd:
   527         if (d->timerId)
   553         return QGestureRecognizer::CancelGesture; // get out of the MayBeGesture state
   528             result = QGestureRecognizer::CancelGesture;
       
   529         else
       
   530             result = QGestureRecognizer::FinishGesture;
       
   531         break;
       
   532     case QEvent::TouchUpdate:
   554     case QEvent::TouchUpdate:
   533         if (q->state() != Qt::NoGesture && ev->touchPoints().size() == 1) {
   555         if (d->timerId && ev->touchPoints().size() == 1) {
   534             QTouchEvent::TouchPoint p = ev->touchPoints().at(0);
   556             QTouchEvent::TouchPoint p = ev->touchPoints().at(0);
   535             QPoint delta = p.pos().toPoint() - p.startPos().toPoint();
   557             QPoint delta = p.pos().toPoint() - p.startPos().toPoint();
   536             if (delta.manhattanLength() <= TapRadius)
   558             if (delta.manhattanLength() <= TapRadius)
   537                 result = QGestureRecognizer::TriggerGesture;
   559                 return QGestureRecognizer::MayBeGesture;
   538         }
   560         }
   539         break;
   561         return QGestureRecognizer::CancelGesture;
   540     case QEvent::MouseButtonPress:
   562     case QEvent::MouseMove: {
   541     case QEvent::MouseMove:
   563         QPoint delta = me->globalPos() - d->position.toPoint();
   542     case QEvent::MouseButtonRelease:
   564         if (d->timerId && delta.manhattanLength() <= TapRadius)
   543         result = QGestureRecognizer::Ignore;
   565             return QGestureRecognizer::MayBeGesture;
   544         break;
   566         return QGestureRecognizer::CancelGesture;
       
   567     }
       
   568 #ifndef QT_NO_GRAPHICSVIEW
       
   569     case QEvent::GraphicsSceneMouseMove: {
       
   570         QPoint delta = gsme->screenPos() - d->position.toPoint();
       
   571         if (d->timerId && delta.manhattanLength() <= TapRadius)
       
   572             return QGestureRecognizer::MayBeGesture;
       
   573         return QGestureRecognizer::CancelGesture;
       
   574     }
       
   575 #endif
   545     default:
   576     default:
   546         result = QGestureRecognizer::Ignore;
   577         return QGestureRecognizer::Ignore;
   547         break;
   578     }
   548     }
       
   549     return result;
       
   550 }
   579 }
   551 
   580 
   552 void QTapAndHoldGestureRecognizer::reset(QGesture *state)
   581 void QTapAndHoldGestureRecognizer::reset(QGesture *state)
   553 {
   582 {
   554     QTapAndHoldGesture *q = static_cast<QTapAndHoldGesture *>(state);
   583     QTapAndHoldGesture *q = static_cast<QTapAndHoldGesture *>(state);
   561 
   590 
   562     QGestureRecognizer::reset(state);
   591     QGestureRecognizer::reset(state);
   563 }
   592 }
   564 
   593 
   565 QT_END_NAMESPACE
   594 QT_END_NAMESPACE
       
   595 
       
   596 #endif // QT_NO_GESTURES