Added speed calculation from multiple mouseMoveEvents
authorSami Rämö <sami.ramo@ixonos.com>
Thu, 17 Jun 2010 05:43:51 +0000 (08:43 +0300)
committerSami Rämö <sami.ramo@ixonos.com>
Thu, 17 Jun 2010 05:43:51 +0000 (08:43 +0300)
src/map/mapscroller.cpp
src/map/mapview.cpp
src/map/mapview.h

index 49ccc9c..8094fb8 100644 (file)
 
 MapScroller::MapScroller()
 {
+    qDebug() << __PRETTY_FUNCTION__;
+
     setEasingCurve(QEasingCurve::OutCubic);
 }
 
 MapScroller& MapScroller::getInstance()
 {
+    qDebug() << __PRETTY_FUNCTION__;
+
     static MapScroller instance;
     return instance;
 }
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();
 }
 
index f936031..a20bcab 100644 (file)
 #define MAPVIEW_H
 
 #include <QGraphicsView>
+#include <QTime>
 
 class QPropertyAnimation;
 
 class MapScroller;
 
+#define VALUES 4
+
 /**
 * @brief Map view widget
 *
@@ -148,14 +151,19 @@ signals:
  * DATA MEMBERS
  ******************************************************************************/
 private:
+    int m_dragTime[VALUES];
+    int m_index;
     int m_zoomLevel;
 
-    QPoint m_dragViewSpeed;
+    QPoint m_dragMovement[VALUES];
     QPoint m_mouseLastScenePosition;               ///< Previous mouse event position
     QPoint m_mouseLastViewPosition;
     QPoint m_scenePosition;               ///< New center position
+
     QPropertyAnimation *m_zoomAnimation;  ///< Zoom animation
 
+    QTime time;
+
     MapScroller *m_scroller;
 };