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();
}