@@ -246,13 +246,15 @@ qreal DirectionalDragArea::distance() const
246246 }
247247}
248248
249+void DirectionalDragArea::updateSceneDistance()
250+{
251+ QPointF totalMovement = m_previousScenePos - m_startScenePos;
252+ m_sceneDistance = projectOntoDirectionVector(totalMovement);
253+}
254+
249255qreal DirectionalDragArea::sceneDistance() const
250256{
251− if (Direction::isHorizontal(m_direction)) {
252− return m_previousScenePos.x() - m_startScenePos.x();
253− } else {
254− return m_previousScenePos.y() - m_startScenePos.y();
255− }
257+ return m_sceneDistance;
256258}
257259
258260qreal DirectionalDragArea::touchX() const
@@ -587,18 +589,23 @@ void DirectionalDragArea::setPreviousScenePos(const QPointF &point)
587589 bool xChanged = m_previousScenePos.x() != point.x();
588590 bool yChanged = m_previousScenePos.y() != point.y();
589591
592+ if (!xChanged && !yChanged)
593+ return;
594+
595+ qreal oldSceneDistance = sceneDistance();
590596 m_previousScenePos = point;
597+ updateSceneDistance();
598+
599+ if (oldSceneDistance != sceneDistance()) {
600+ Q_EMIT sceneDistanceChanged(sceneDistance());
601+ }
591602
592603 if (xChanged) {
593604 Q_EMIT touchSceneXChanged(point.x());
594− if (Direction::isHorizontal(m_direction))
595− Q_EMIT sceneDistanceChanged(sceneDistance());
596605 }
597606
598607 if (yChanged) {
599608 Q_EMIT touchSceneYChanged(point.y());
600− if (Direction::isVertical(m_direction))
601− Q_EMIT sceneDistanceChanged(sceneDistance());
602609 }
603610}
604611