MapScroller::MapScroller()
{
+ qDebug() << __PRETTY_FUNCTION__;
+
setEasingCurve(QEasingCurve::OutCubic);
}
MapScroller& MapScroller::getInstance()
{
+ qDebug() << __PRETTY_FUNCTION__;
+
static MapScroller instance;
return instance;
}
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);
{
qDebug() << __PRETTY_FUNCTION__;
+ time.start();
+
m_scroller->stop();
QGraphicsView::mousePressEvent(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)
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();
}
#define MAPVIEW_H
#include <QGraphicsView>
+#include <QTime>
class QPropertyAnimation;
class MapScroller;
+#define VALUES 4
+
/**
* @brief Map view widget
*
* 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;
};