Fixed double tap zoom jumping when center point was shifted
authorSami Rämö <sami.ramo@ixonos.com>
Tue, 24 Aug 2010 12:42:23 +0000 (15:42 +0300)
committerSami Rämö <sami.ramo@ixonos.com>
Tue, 24 Aug 2010 12:42:23 +0000 (15:42 +0300)
src/map/mapview.cpp

index 2858739..a211e10 100644 (file)
@@ -133,21 +133,22 @@ void MapView::mouseDoubleClickEvent(QMouseEvent *event)
     if (m_zoomLevel + 1 <= OSM_MAX_ZOOM_LEVEL) {
         QPoint pressPosition = mapToScene(event->pos()).toPoint();
         QPoint viewCenterPosition = mapToScene(width() / 2 - 1, height() / 2 - 1).toPoint();
-        QPoint zoomPosition = viewCenterPosition - ((viewCenterPosition - pressPosition) / 2);
+        QPoint zoomPosition = viewCenterPosition - ((viewCenterPosition - pressPosition) / 2)
+                              - m_centerHorizontalShiftPoint.toPoint() / 2;
 
         m_scrollAndZoomAnimation->stop();
         m_doubleTapZoomRunning = true;
 
         m_scroller->setEasingCurve(QEasingCurve::Linear);
         m_scroller->setDuration(ZOOM_TIME_MS);
-        m_scroller->setStartValue(SceneCoordinate(m_internalScenePosition.x(),
-                                                  m_internalScenePosition.y()));
+        QPointF centerPoint = center();
+        m_scroller->setStartValue(SceneCoordinate(centerPoint.x(), centerPoint.y()));
         m_scroller->setEndValue(SceneCoordinate(zoomPosition.x(), zoomPosition.y()));
 
         m_zoomAnimation->setEasingCurve(QEasingCurve::InQuad);
         m_zoomAnimation->setDuration(ZOOM_TIME_MS);
         m_zoomAnimation->setStartValue(viewScale());
-        m_zoomAnimation->setEndValue(pow(2, m_zoomLevel+1 - OSM_MAX_ZOOM_LEVEL));
+        m_zoomAnimation->setEndValue(pow(2, m_zoomLevel + 1 - OSM_MAX_ZOOM_LEVEL));
 
         m_scrollAndZoomAnimation->start();
     }