Changed deceleration curve and adjusted scroll distance calculation
authorSami Rämö <sami.ramo@ixonos.com>
Thu, 17 Jun 2010 08:41:50 +0000 (11:41 +0300)
committerSami Rämö <sami.ramo@ixonos.com>
Thu, 17 Jun 2010 08:41:50 +0000 (11:41 +0300)
src/map/mapscroller.cpp
src/map/mapview.cpp

index 8094fb8..7cb3922 100644 (file)
@@ -28,7 +28,7 @@ MapScroller::MapScroller()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    setEasingCurve(QEasingCurve::OutCubic);
+    setEasingCurve(QEasingCurve::OutCirc);
 }
 
 MapScroller& MapScroller::getInstance()
index 2df48e2..32e3554 100644 (file)
@@ -29,6 +29,8 @@
 #include "mapscroller.h"
 #include "mapview.h"
 
+const int KINETIC_SCROLL_TIME_MS = 1000;
+
 MapView::MapView(QWidget *parent)
     : QGraphicsView(parent)
 {
@@ -66,7 +68,7 @@ void MapView::mouseMoveEvent(QMouseEvent *event)
     m_dragTime[m_index] = time.elapsed();
     time.start();
 
-    qWarning() << __PRETTY_FUNCTION__ << m_index << m_dragMovement[m_index].x() << m_dragMovement[m_index].y() << m_dragTime[m_index];
+//    qWarning() << __PRETTY_FUNCTION__ << m_index << m_dragMovement[m_index].x() << m_dragMovement[m_index].y() << m_dragTime[m_index];
 
     m_index++;
 
@@ -104,21 +106,28 @@ void MapView::mouseReleaseEvent(QMouseEvent *event)
 {
 //    qWarning() << __PRETTY_FUNCTION__;
 
+    const qreal MS_PER_S = 1000;
+    const qreal SPEED_TO_DISTANCE_FACTOR = KINETIC_SCROLL_TIME_MS / MS_PER_S * 0.10;
+
     QGraphicsView::mouseReleaseEvent(event);
 
     QPointF dragViewSpeed;
+    int values = 0;
     for (int i = 0; i < VALUES; i++) {
-        dragViewSpeed += m_dragMovement[i] / (m_dragTime[i] / 1000.0);
-        qWarning() << __PRETTY_FUNCTION__ << m_dragMovement[i].x() << m_dragMovement[i].y() << m_dragTime[i];
+        if (m_dragTime > 0) {
+            dragViewSpeed += m_dragMovement[i] / (m_dragTime[i] / MS_PER_S);
+            values++;
+        }
+//        qWarning() << __PRETTY_FUNCTION__ << m_dragMovement[i].x() << m_dragMovement[i].y() << m_dragTime[i];
     }
-    dragViewSpeed /= VALUES;
-    dragViewSpeed /= 5;
+    dragViewSpeed /= values;
+    dragViewSpeed *= SPEED_TO_DISTANCE_FACTOR;
 
-    qWarning() << __PRETTY_FUNCTION__ << dragViewSpeed.x() << dragViewSpeed.y();
+//    qWarning() << __PRETTY_FUNCTION__ << dragViewSpeed.x() << dragViewSpeed.y();
 
     QPointF dragSceneSpeed = dragViewSpeed * (1 << (MAX_MAP_ZOOM_LEVEL - m_zoomLevel));
 
-    m_scroller->setDuration(1000);
+    m_scroller->setDuration(KINETIC_SCROLL_TIME_MS);
     m_scroller->setStartValue(m_scenePosition);
     m_scroller->setEndValue(m_scenePosition + dragSceneSpeed.toPoint());
     m_scroller->start();