@@ -155,6 +155,15 @@ qreal DirectionalDragArea::distance() const
158+qreal DirectionalDragArea::sceneDistance() const
160+ if (Direction::isHorizontal(m_direction)) {
161+ return m_previousScenePos.x() - m_startScenePos.x();
163+ return m_previousScenePos.y() - m_startScenePos.y();
158qreal DirectionalDragArea::touchX() const
167qreal DirectionalDragArea::touchX() const
160 return m_previousPos.x();
169 return m_previousPos.x();
@@ -165,6 +174,16 @@ qreal DirectionalDragArea::touchY() const
165 return m_previousPos.y();
174 return m_previousPos.y();
177+qreal DirectionalDragArea::touchSceneX() const
179+ return m_previousScenePos.x();
182+qreal DirectionalDragArea::touchSceneY() const
184+ return m_previousScenePos.y();
168void DirectionalDragArea::touchEvent(QTouchEvent *event)
187void DirectionalDragArea::touchEvent(QTouchEvent *event)
170 if (!isEnabled() || !isVisible()) {
189 if (!isEnabled() || !isVisible()) {
@@ -192,14 +211,17 @@ void DirectionalDragArea::touchEvent_absent(QTouchEvent *event)
193 if ((event->touchPointStates() && (Qt::TouchPointPressed || Qt::TouchPointMoved))
212 if ((event->touchPointStates() && (Qt::TouchPointPressed || Qt::TouchPointMoved))
194 && event->touchPoints().count() == 1) {
213 && event->touchPoints().count() == 1) {
214+ const QTouchEvent::TouchPoint &touchPoint = event->touchPoints()[0];
195− m_startPos = event->touchPoints()[0].pos();
215+ m_startPos = touchPoint.pos();
216+ m_startScenePos = touchPoint.scenePos();
196− m_touchId = event->touchPoints()[0].id();
217+ m_touchId = touchPoint.id();
197 m_dampedPos.reset(m_startPos);
218 m_dampedPos.reset(m_startPos);
198 updateVelocityCalculator(m_startPos);
219 updateVelocityCalculator(m_startPos);
199 m_velocityCalculator->reset();
220 m_velocityCalculator->reset();
200 m_numSamplesOnLastSpeedCheck = 0;
221 m_numSamplesOnLastSpeedCheck = 0;
201 m_silenceTime = 0;
222 m_silenceTime = 0;
202 setPreviousPos(m_startPos);
223 setPreviousPos(m_startPos);
224+ setPreviousScenePos(m_startScenePos);
204 if (m_distanceThreshold > 0)
226 if (m_distanceThreshold > 0)
205 setStatus(Undecided);
227 setStatus(Undecided);
@@ -242,6 +264,7 @@ void DirectionalDragArea::touchEvent_undecided(QTouchEvent *event)
244 setPreviousPos(touchPos);
266 setPreviousPos(touchPos);
267+ setPreviousScenePos(touchPoint->scenePos());
246 if (movedFarEnough(touchPos)) {
269 if (movedFarEnough(touchPos)) {
247 setStatus(Recognized);
270 setStatus(Recognized);
@@ -253,6 +276,7 @@ void DirectionalDragArea::touchEvent_recognized(QTouchEvent *event)
253 const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(event);
276 const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(event);
255 setPreviousPos(touchPoint->pos());
278 setPreviousPos(touchPoint->pos());
279+ setPreviousScenePos(touchPoint->scenePos());
257 if (touchPoint->state() == Qt::TouchPointReleased) {
281 if (touchPoint->state() == Qt::TouchPointReleased) {
258 setStatus(WaitingForTouch);
282 setStatus(WaitingForTouch);
@@ -398,6 +422,28 @@ void DirectionalDragArea::setPreviousPos(QPointF point)
425+void DirectionalDragArea::setPreviousScenePos(QPointF point)
427+ Q_ASSERT(m_status != Rejected);
429+ bool xChanged = m_previousScenePos.x() != point.x();
430+ bool yChanged = m_previousScenePos.y() != point.y();
432+ m_previousScenePos = point;
435+ Q_EMIT touchSceneXChanged(point.x());
436+ if (Direction::isHorizontal(m_direction))
437+ Q_EMIT sceneDistanceChanged(sceneDistance());
441+ Q_EMIT touchSceneYChanged(point.y());
442+ if (Direction::isVertical(m_direction))
443+ Q_EMIT sceneDistanceChanged(sceneDistance());
401void DirectionalDragArea::updateVelocityCalculator(QPointF point)
447void DirectionalDragArea::updateVelocityCalculator(QPointF point)
403 if (Direction::isHorizontal(m_direction)) {
449 if (Direction::isHorizontal(m_direction)) {