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 } |