tests/manual/gestures/graphicsview/mousepangesturerecognizer.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
    49 
    49 
    50 MousePanGestureRecognizer::MousePanGestureRecognizer()
    50 MousePanGestureRecognizer::MousePanGestureRecognizer()
    51 {
    51 {
    52 }
    52 }
    53 
    53 
    54 QGesture* MousePanGestureRecognizer::createGesture(QObject *)
    54 QGesture* MousePanGestureRecognizer::create(QObject *)
    55 {
    55 {
    56     return new QPanGesture;
    56     return new QPanGesture;
    57 }
    57 }
    58 
    58 
    59 QGestureRecognizer::Result MousePanGestureRecognizer::filterEvent(QGesture *state, QObject *, QEvent *event)
    59 QGestureRecognizer::Result MousePanGestureRecognizer::recognize(QGesture *state, QObject *, QEvent *event)
    60 {
    60 {
    61     QPanGesture *g = static_cast<QPanGesture *>(state);
    61     QPanGesture *g = static_cast<QPanGesture *>(state);
    62     QPoint globalPos;
    62     QPoint globalPos;
    63     switch (event->type()) {
    63     switch (event->type()) {
    64     case QEvent::GraphicsSceneMousePress:
    64     case QEvent::GraphicsSceneMousePress:
    76         break;
    76         break;
    77     }
    77     }
    78     if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonDblClick
    78     if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonDblClick
    79         || event->type() == QEvent::GraphicsSceneMousePress || event->type() == QEvent::GraphicsSceneMouseDoubleClick) {
    79         || event->type() == QEvent::GraphicsSceneMousePress || event->type() == QEvent::GraphicsSceneMouseDoubleClick) {
    80         g->setHotSpot(globalPos);
    80         g->setHotSpot(globalPos);
    81         g->setProperty("lastPos", globalPos);
    81         g->setProperty("startPos", globalPos);
    82         g->setProperty("pressed", QVariant::fromValue<bool>(true));
    82         g->setProperty("pressed", QVariant::fromValue<bool>(true));
    83         return QGestureRecognizer::GestureTriggered | QGestureRecognizer::ConsumeEventHint;
    83         return QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint;
    84     } else if (event->type() == QEvent::MouseMove || event->type() == QEvent::GraphicsSceneMouseMove) {
    84     } else if (event->type() == QEvent::MouseMove || event->type() == QEvent::GraphicsSceneMouseMove) {
    85         if (g->property("pressed").toBool()) {
    85         if (g->property("pressed").toBool()) {
    86             QPoint pos = globalPos;
    86             QPoint offset = globalPos - g->property("startPos").toPoint();
    87             QPoint lastPos = g->property("lastPos").toPoint();
       
    88             g->setLastOffset(g->offset());
    87             g->setLastOffset(g->offset());
    89             lastPos = pos - lastPos;
    88             g->setOffset(QPointF(offset.x(), offset.y()));
    90             g->setOffset(QPointF(lastPos.x(), lastPos.y()));
    89             return QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint;
    91             g->setTotalOffset(g->totalOffset() + QPointF(lastPos.x(), lastPos.y()));
       
    92             g->setProperty("lastPos", pos);
       
    93             return QGestureRecognizer::GestureTriggered | QGestureRecognizer::ConsumeEventHint;
       
    94         }
    90         }
    95         return QGestureRecognizer::NotGesture;
    91         return QGestureRecognizer::CancelGesture;
    96     } else if (event->type() == QEvent::MouseButtonRelease || event->type() == QEvent::GraphicsSceneMouseRelease) {
    92     } else if (event->type() == QEvent::MouseButtonRelease || event->type() == QEvent::GraphicsSceneMouseRelease) {
    97         return QGestureRecognizer::GestureFinished | QGestureRecognizer::ConsumeEventHint;
    93         return QGestureRecognizer::FinishGesture | QGestureRecognizer::ConsumeEventHint;
    98     }
    94     }
    99     return QGestureRecognizer::Ignore;
    95     return QGestureRecognizer::Ignore;
   100 }
    96 }
   101 
    97 
   102 void MousePanGestureRecognizer::reset(QGesture *state)
    98 void MousePanGestureRecognizer::reset(QGesture *state)
   103 {
    99 {
   104     QPanGesture *g = static_cast<QPanGesture *>(state);
   100     QPanGesture *g = static_cast<QPanGesture *>(state);
   105     g->setTotalOffset(QPointF());
       
   106     g->setLastOffset(QPointF());
   101     g->setLastOffset(QPointF());
   107     g->setOffset(QPointF());
   102     g->setOffset(QPointF());
   108     g->setAcceleration(0);
   103     g->setAcceleration(0);
   109     g->setProperty("lastPos", QVariant());
   104     g->setProperty("startPos", QVariant());
   110     g->setProperty("pressed", QVariant::fromValue<bool>(false));
   105     g->setProperty("pressed", QVariant::fromValue<bool>(false));
   111     QGestureRecognizer::reset(state);
   106     QGestureRecognizer::reset(state);
   112 }
   107 }