@@ -246,13 +246,15 @@ qreal DirectionalDragArea::distance() const
249+void DirectionalDragArea::updateSceneDistance()
251+ QPointF totalMovement = m_previousScenePos - m_startScenePos;
252+ m_sceneDistance = projectOntoDirectionVector(totalMovement);
249qreal DirectionalDragArea::sceneDistance() const
255qreal DirectionalDragArea::sceneDistance() const
251− if (Direction::isHorizontal(m_direction)) {
257+ return m_sceneDistance;
252− return m_previousScenePos.x() - m_startScenePos.x();
254− return m_previousScenePos.y() - m_startScenePos.y();
258qreal DirectionalDragArea::touchX() const
260qreal DirectionalDragArea::touchX() const
@@ -587,18 +589,23 @@ void DirectionalDragArea::setPreviousScenePos(const QPointF &point)
587 bool xChanged = m_previousScenePos.x() != point.x();
589 bool xChanged = m_previousScenePos.x() != point.x();
588 bool yChanged = m_previousScenePos.y() != point.y();
590 bool yChanged = m_previousScenePos.y() != point.y();
592+ if (!xChanged && !yChanged)
595+ qreal oldSceneDistance = sceneDistance();
590 m_previousScenePos = point;
596 m_previousScenePos = point;
597+ updateSceneDistance();
599+ if (oldSceneDistance != sceneDistance()) {
600+ Q_EMIT sceneDistanceChanged(sceneDistance());
592 if (xChanged) {
603 if (xChanged) {
593 Q_EMIT touchSceneXChanged(point.x());
604 Q_EMIT touchSceneXChanged(point.x());
594− if (Direction::isHorizontal(m_direction))
595− Q_EMIT sceneDistanceChanged(sceneDistance());
598 if (yChanged) {
607 if (yChanged) {
599 Q_EMIT touchSceneYChanged(point.y());
608 Q_EMIT touchSceneYChanged(point.y());
600− if (Direction::isVertical(m_direction))
601− Q_EMIT sceneDistanceChanged(sceneDistance());