Review fixes
authorSami Rämö <sami.ramo@ixonos.com>
Mon, 19 Apr 2010 11:48:23 +0000 (14:48 +0300)
committerSami Rämö <sami.ramo@ixonos.com>
Mon, 19 Apr 2010 11:48:23 +0000 (14:48 +0300)
src/map/mapengine.cpp
src/map/maptile.cpp
src/map/mapview.cpp
src/map/mapview.h

index 268c502..1da150e 100644 (file)
@@ -304,33 +304,33 @@ void MapEngine::zoomIn()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    if (m_zoomLevel >= MAX_MAP_ZOOM_LEVEL)
-        /// @todo Sami: return only to end
-        return;
+    if (m_zoomLevel < MAX_MAP_ZOOM_LEVEL) {
+        m_zoomLevel++;
+        emit zoomLevelChanged(m_zoomLevel);
 
-    m_zoomLevel++;
-    emit zoomLevelChanged(m_zoomLevel);
+        setTilesDrawingLevels();
 
-    setTilesDrawingLevels();
+        calculateNewTiles(m_sceneCoordinate);
 
-    calculateNewTiles(m_sceneCoordinate);
-    QTimer::singleShot(500, this, SLOT(removeOldTiles()));
+        // remove unused tiles after zooming is done
+        QTimer::singleShot(ZOOM_TIME, this, SLOT(removeOldTiles()));
+    }
+        /// @todo DONE: Sami: return only to end
 }
 
 void MapEngine::zoomOut()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    if (m_zoomLevel <= MIN_MAP_ZOOM_LEVEL)
-        /// @todo Sami: return
-        return;
+    if (m_zoomLevel > MIN_MAP_ZOOM_LEVEL) {
+        m_zoomLevel--;
+        emit zoomLevelChanged(m_zoomLevel);
 
-    m_zoomLevel--;
-    emit zoomLevelChanged(m_zoomLevel);
-
-    setTilesDrawingLevels();
+        setTilesDrawingLevels();
 
-    calculateNewTiles(m_sceneCoordinate);
+        calculateNewTiles(m_sceneCoordinate);
+    }
+    /// @todo DONE: Sami: return
 }
 
 void MapEngine::setTilesDrawingLevels()
index 8c67c40..cc68743 100644 (file)
@@ -51,10 +51,11 @@ void MapTile::setZoomLevel(int zoomLevel)
 
 void MapTile::setSceneLevel(int currentZoomLevel)
 {
-    /// @todo Sami: bbb
+    /// @todo DONE Sami: bbb
     if (currentZoomLevel < m_zoomLevel) {
-        qreal aaa = static_cast<qreal>(MIN_MAP_SCENE_NORMAL_LEVEL + currentZoomLevel - (m_zoomLevel - currentZoomLevel)) + 0.5;
-        setZValue(aaa);
+        qreal z = static_cast<qreal>(MIN_MAP_SCENE_NORMAL_LEVEL + currentZoomLevel
+                                     - (m_zoomLevel - currentZoomLevel)) + 0.5;
+        setZValue(z);
     }
     else
         setZValue(static_cast<qreal>(MIN_MAP_SCENE_NORMAL_LEVEL + m_zoomLevel));
@@ -84,11 +85,10 @@ void MapTile::setPosition()
             (m_tileNumber.y() >= 0) && (m_tileNumber.y() <= maxTileNumber)) {
         setPos(MapEngine::convertTileNumberToSceneCoordinate(m_zoomLevel, m_tileNumber));
         //qDebug() << __PRETTY_FUNCTION__ << "tile position:" << pos();
-        /// @todo Sami: return
-        return; // done
+        /// @todo DONE Sami: return
+    }
+    else {
+        setPos(UNDEFINED, UNDEFINED);
     }
-    // else
-    setPos(UNDEFINED, UNDEFINED);
-    //Q_ASSERT_X(false, __PRETTY_FUNCTION__, "m_zoomLevel and/or m_tileNumber is undefined");
 }
 
index 5a7c295..d46a889 100644 (file)
@@ -31,7 +31,9 @@
 #include "mapcommon.h"
 #include "mapview.h"
 
-MapView::MapView(QWidget *parent) : QGraphicsView(parent)
+MapView::MapView(QWidget *parent)
+    : QGraphicsView(parent)
+    , m_timerID(NULL)
 {
 /**
   * Use OpenGL for desktop to gain some performance in map view.
@@ -49,34 +51,39 @@ void MapView::setZoomLevel(int zoomLevel)
 {
     m_zoomTargetScale = pow(2, zoomLevel - MAX_MAP_ZOOM_LEVEL);
     m_zoomScaleDelta = (m_zoomTargetScale - currentScale()) / (ZOOM_FPS * ZOOM_TIME);
-/// @todo Sami: starts new timer
-    startTimer(1000/ZOOM_FPS);
+/// @todo DONE Sami: starts new timer
+    if (m_timerID)
+        killTimer(m_timerID);
+
+    m_timerID = startTimer(1000/ZOOM_FPS);
 }
 
 void MapView::timerEvent(QTimerEvent *event)
 {
-    qreal scaleFactor = currentScale();
-
-//    qDebug() << __PRETTY_FUNCTION__
-//             << "abs(m_zoomTargetScale - scaleFactor)" << fabs(m_zoomTargetScale - scaleFactor)
-//             << "abs(m_zoomScaleDelta)" << fabs(m_zoomScaleDelta);
-
-    if (fabs(m_zoomTargetScale - scaleFactor) <= fabs(m_zoomScaleDelta)) {
-        scaleFactor = m_zoomTargetScale;
-        killTimer(event->timerId());
+    if (event->timerId() == m_timerID) {
+        qreal scaleFactor = currentScale();
+
+//        qDebug() << __PRETTY_FUNCTION__
+//                 << "abs(m_zoomTargetScale - scaleFactor)" << fabs(m_zoomTargetScale - scaleFactor)
+//                 << "abs(m_zoomScaleDelta)" << fabs(m_zoomScaleDelta);
+
+        if (fabs(m_zoomTargetScale - scaleFactor) <= fabs(m_zoomScaleDelta)) {
+            scaleFactor = m_zoomTargetScale;
+            killTimer(event->timerId());
+        }
+        else {
+            scaleFactor += m_zoomScaleDelta;
+        }
+
+//        qDebug() << __PRETTY_FUNCTION__ << "currentScale:" << currentScale()
+//                                        << "m_zoomScaleDelta" << m_zoomScaleDelta
+//                                        << "scaleFactor:" << scaleFactor;
+
+        QTransform transform;
+        transform.scale(scaleFactor, scaleFactor);
+        emit scalingFactorChanged(scaleFactor);
+        setTransform(transform);
     }
-    else {
-        scaleFactor += m_zoomScaleDelta;
-    }
-
-//    qDebug() << __PRETTY_FUNCTION__ << "currentScale:" << currentScale()
-//                                    << "m_zoomScaleDelta" << m_zoomScaleDelta
-//                                    << "scaleFactor:" << scaleFactor;
-
-    QTransform transform;
-    transform.scale(scaleFactor, scaleFactor);
-    emit scalingFactorChanged(scaleFactor);
-    setTransform(transform);
 }
 
 qreal MapView::currentScale()
index b4d971a..7ad9005 100644 (file)
@@ -138,6 +138,7 @@ signals:
 private:
     QPoint m_mousePosition; ///< Previous mouse event position
     QPoint m_scenePosition; ///< New center position
+    int m_timerID; ///< ID number of the timer used for smooth zoom effect
     qreal m_zoomScaleDelta; ///< Scaling factor delta for smooth zoom transition effect
     qreal m_zoomTargetScale; ///< Scaling factor of the target zoom level
 };