From: Jussi Laitinen Date: Tue, 22 Jun 2010 12:38:06 +0000 (+0300) Subject: Zoom. X-Git-Tag: v1.0~8^2~3^2~4^2 X-Git-Url: http://vcs.maemo.org/git/?a=commitdiff_plain;h=ea25ea6dc3a3506d5c7c492655d967affdd01e45;p=situare Zoom. --- diff --git a/src/map/mapview.cpp b/src/map/mapview.cpp index 471e28b..256d191 100644 --- a/src/map/mapview.cpp +++ b/src/map/mapview.cpp @@ -24,6 +24,7 @@ #include #include +#include #include "mapcommon.h" #include "mapscroller.h" @@ -53,6 +54,10 @@ MapView::MapView(QWidget *parent) setOptimizationFlag(QGraphicsView::DontAdjustForAntialiasing); m_scroller = &MapScroller::getInstance(); + + m_groupAnimation = new QParallelAnimationGroup(this); + m_groupAnimation->addAnimation(m_scroller); + m_groupAnimation->addAnimation(m_zoomAnimation); } void MapView::centerToSceneCoordinates(QPoint sceneCoordinate) @@ -62,6 +67,28 @@ void MapView::centerToSceneCoordinates(QPoint sceneCoordinate) centerOn(sceneCoordinate); } +void MapView::mouseDoubleClickEvent(QMouseEvent *event) +{ + QPoint pressPos = mapToScene(event->pos()).toPoint(); + QPoint centerPos = mapToScene(width() / 2 - 1, height() / 2 - 1).toPoint(); + QPoint zoomPoint = centerPos - ((centerPos - pressPos) / 2); + + m_groupAnimation->stop(); + + m_scroller->setEasingCurve(QEasingCurve::OutCirc); + m_scroller->setDuration(KINETIC_SCROLL_TIME_MS); + m_scroller->setStartValue(m_scenePosition); + m_scroller->setEndValue(zoomPoint); + + m_zoomAnimation->setEasingCurve(QEasingCurve::OutCirc); + m_zoomAnimation->setDuration(KINETIC_SCROLL_TIME_MS); + m_zoomAnimation->setStartValue(viewScale()); + m_zoomAnimation->setEndValue(pow(2, ++m_zoomLevel - MAX_MAP_ZOOM_LEVEL)); + + + m_groupAnimation->start(); +} + void MapView::mouseMoveEvent(QMouseEvent *event) { m_scenePosition += m_mouseLastScenePosition - mapToScene(event->pos()).toPoint(); @@ -161,7 +188,7 @@ void MapView::setZoomLevel(int zoomLevel) m_zoomLevel = zoomLevel; - if (m_zoomAnimation) { + if (m_zoomAnimation && (m_zoomAnimation->state() != QPropertyAnimation::Running)) { m_zoomAnimation->stop(); m_zoomAnimation->setDuration(ZOOM_TIME); m_zoomAnimation->setStartValue(viewScale()); diff --git a/src/map/mapview.h b/src/map/mapview.h index 1322663..e53c818 100644 --- a/src/map/mapview.h +++ b/src/map/mapview.h @@ -27,6 +27,7 @@ #include class QPropertyAnimation; +class QParallelAnimationGroup; class MapScroller; @@ -69,6 +70,8 @@ protected: void resizeEvent(QResizeEvent *event); private: + void mouseDoubleClickEvent(QMouseEvent *event); + /** * @brief Event handler for mouse move events * @@ -178,6 +181,7 @@ private: QPoint m_scenePosition; ///< New center position QPropertyAnimation *m_zoomAnimation; ///< Zoom animation + QParallelAnimationGroup *m_groupAnimation; QTime m_time; ///< Elapsed times in mouse events