Added speed calculation from multiple mouseMoveEvents
[situare] / src / map / mapview.cpp
index 06d4b9c..2df48e2 100644 (file)
@@ -59,8 +59,19 @@ void MapView::mouseMoveEvent(QMouseEvent *event)
 
     qDebug() << __PRETTY_FUNCTION__ << "m_scenePosition:" << m_scenePosition;
 
-    m_dragViewSpeed = m_mouseLastViewPosition - event->pos() ;
+    if (m_index >= VALUES)
+        m_index = 0;
+
+    m_dragMovement[m_index] = m_mouseLastViewPosition - event->pos();
+    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];
+
+    m_index++;
+
 //    qWarning() << __PRETTY_FUNCTION__ << m_dragViewSpeed.x() << m_dragViewSpeed.y();
+//    qWarning() << __PRETTY_FUNCTION__  << "elapsed:" << time.elapsed() << "ms";
 
     emit viewScrolled(m_scenePosition);
 
@@ -72,6 +83,8 @@ void MapView::mousePressEvent(QMouseEvent *event)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    time.start();
+
     m_scroller->stop();
 
     QGraphicsView::mousePressEvent(event);
@@ -80,7 +93,11 @@ void MapView::mousePressEvent(QMouseEvent *event)
     m_mouseLastViewPosition = event->pos();
     m_scenePosition = mapToScene(width() / 2 - 1, height() / 2 - 1).toPoint();
 
-    m_dragViewSpeed = QPoint();
+    for (int i = 0; i < VALUES; i++) {
+        m_dragMovement[i] = QPoint();
+        m_dragTime[i] = 0;
+    }
+    m_index = 0;
 }
 
 void MapView::mouseReleaseEvent(QMouseEvent *event)
@@ -89,11 +106,21 @@ void MapView::mouseReleaseEvent(QMouseEvent *event)
 
     QGraphicsView::mouseReleaseEvent(event);
 
-    QPoint dragSceneSpeed = m_dragViewSpeed * (1 << (MAX_MAP_ZOOM_LEVEL - m_zoomLevel));
+    QPointF dragViewSpeed;
+    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];
+    }
+    dragViewSpeed /= VALUES;
+    dragViewSpeed /= 5;
+
+    qWarning() << __PRETTY_FUNCTION__ << dragViewSpeed.x() << dragViewSpeed.y();
+
+    QPointF dragSceneSpeed = dragViewSpeed * (1 << (MAX_MAP_ZOOM_LEVEL - m_zoomLevel));
 
-    m_scroller->setStartValue(m_scenePosition);
-    m_scroller->setEndValue(m_scenePosition + dragSceneSpeed * 5);
     m_scroller->setDuration(1000);
+    m_scroller->setStartValue(m_scenePosition);
+    m_scroller->setEndValue(m_scenePosition + dragSceneSpeed.toPoint());
     m_scroller->start();
 }