this, SIGNAL(locationItemClicked(QList<QString>)));
m_scroller = &MapScroller::getInstance();
+
+ connect(m_scroller, SIGNAL(coordinateUpdated(QPoint)),
+ this, SLOT(setLocation(QPoint)));
}
MapEngine::~MapEngine()
qDebug() << __PRETTY_FUNCTION__;
// jump to opposite side of the world if world horizontal limit is exceeded
- if (sceneCoordinate.x() < MAP_MIN_PIXEL_X)
- sceneCoordinate.setX(sceneCoordinate.x() + MAP_PIXELS_X);
- else if (sceneCoordinate.x() > MAP_MAX_PIXEL_X)
- sceneCoordinate.setX(sceneCoordinate.x() - MAP_PIXELS_X);
+ sceneCoordinate.setX(normalize(sceneCoordinate.x(), MAP_MIN_PIXEL_X, MAP_MAX_PIXEL_X));
// don't allow vertical scene coordinates go out of the map
sceneCoordinate.setY(qBound(MAP_MIN_PIXEL_Y, sceneCoordinate.y(), MAP_MAX_PIXEL_Y));
void MapView::mouseMoveEvent(QMouseEvent *event)
{
- m_scenePosition += m_mousePosition - mapToScene(event->pos());
+ m_scenePosition += m_mouseLastScenePosition - mapToScene(event->pos()).toPoint();
qDebug() << __PRETTY_FUNCTION__ << "m_scenePosition:" << m_scenePosition;
- emit viewScrolled(m_scenePosition.toPoint());
+ m_dragViewSpeed = m_mouseLastViewPosition - event->pos() ;
+// qWarning() << __PRETTY_FUNCTION__ << m_dragViewSpeed.x() << m_dragViewSpeed.y();
- m_mousePosition = mapToScene(event->pos());
+ emit viewScrolled(m_scenePosition);
+
+ m_mouseLastScenePosition = mapToScene(event->pos()).toPoint();
+ m_mouseLastViewPosition = event->pos();
}
void MapView::mousePressEvent(QMouseEvent *event)
{
qDebug() << __PRETTY_FUNCTION__;
+ m_scroller->stop();
+
QGraphicsView::mousePressEvent(event);
- m_mousePosition = mapToScene(event->pos());
- m_scenePosition = mapToScene(width() / 2 - 1, height() / 2 - 1);
+ m_mouseLastScenePosition = mapToScene(event->pos()).toPoint();
+ m_mouseLastViewPosition = event->pos();
+ m_scenePosition = mapToScene(width() / 2 - 1, height() / 2 - 1).toPoint();
+
+ m_dragViewSpeed = QPoint();
}
void MapView::mouseReleaseEvent(QMouseEvent *event)
{
+// qWarning() << __PRETTY_FUNCTION__;
+
QGraphicsView::mouseReleaseEvent(event);
+ QPoint dragSceneSpeed = m_dragViewSpeed * (1 << (MAX_MAP_ZOOM_LEVEL - m_zoomLevel));
+
m_scroller->setStartValue(m_scenePosition);
- m_scroller->setEndValue(m_scenePosition + m_scenePosition);
+ m_scroller->setEndValue(m_scenePosition + dragSceneSpeed * 5);
m_scroller->setDuration(1000);
m_scroller->start();
}
{
qDebug() << __PRETTY_FUNCTION__;
+ m_zoomLevel = zoomLevel;
+
if (m_zoomAnimation) {
m_zoomAnimation->stop();
m_zoomAnimation->setDuration(ZOOM_TIME);
* DATA MEMBERS
******************************************************************************/
private:
- QPointF m_mousePosition; ///< Previous mouse event position
- QPointF m_scenePosition; ///< New center position
+ int m_zoomLevel;
+
+ QPoint m_dragViewSpeed;
+ QPoint m_mouseLastScenePosition; ///< Previous mouse event position
+ QPoint m_mouseLastViewPosition;
+ QPoint m_scenePosition; ///< New center position
QPropertyAnimation *m_zoomAnimation; ///< Zoom animation
MapScroller *m_scroller;