Vertical world overlap
authorSami Rämö <sami.ramo@ixonos.com>
Mon, 31 May 2010 11:26:10 +0000 (14:26 +0300)
committerSami Rämö <sami.ramo@ixonos.com>
Mon, 31 May 2010 11:26:10 +0000 (14:26 +0300)
 - Minimum zoom level to 3

 - refactoring: created MapEngine::zoomed() method which is
   called every time when zoom level is changed

 - scene backgroung color to gray

 - vertical overlap of the world is now allowed. Overlap limit
   is set always when zoom level is changed so it's always
   possible to overlap only half of the screen height

src/map/mapcommon.h
src/map/mapengine.cpp
src/map/mapengine.h
src/map/mapscene.cpp
src/map/mapscene.h

index 9832afd..389594d 100644 (file)
@@ -30,7 +30,7 @@ const int TILE_SIZE_Y = 256; ///< Tile image size in y direction
 
 const int MIN_MAP_ZOOM_LEVEL = 0; ///< Minimum zoom level
 const int MAX_MAP_ZOOM_LEVEL = 18; ///< Maximum zoom level
-const int MIN_VIEW_ZOOM_LEVEL = 2; ///< Minimum zoom level for MapView
+const int MIN_VIEW_ZOOM_LEVEL = 3; ///< Minimum zoom level for MapView
 const int MIN_MAP_SCENE_NORMAL_LEVEL = MAX_MAP_ZOOM_LEVEL + 1;
 
 const int MAX_TILES_PER_SIDE = (1 << MAX_MAP_ZOOM_LEVEL);
index 34fb2b2..31c6139 100644 (file)
@@ -394,7 +394,7 @@ void MapEngine::setZoomLevel(int newZoomLevel)
     qDebug() << __PRETTY_FUNCTION__;
 
     m_zoomLevel = newZoomLevel;
-    emit zoomLevelChanged(m_zoomLevel);
+    zoomed();
 }
 
 void MapEngine::setViewLocation(QPointF latLonCoordinate)
@@ -453,6 +453,7 @@ void MapEngine::viewResized(const QSize &size)
     emit locationChanged(m_sceneCoordinate);
     getTiles(m_sceneCoordinate);
     m_mapScene->removeOutOfViewTiles();
+    m_mapScene->setSceneVerticalOverlap(m_viewSize.height(), m_zoomLevel);
 }
 
 void MapEngine::viewZoomFinished()
@@ -470,6 +471,14 @@ void MapEngine::viewZoomFinished()
         emit minZoomLevelReached();
 }
 
+void MapEngine::zoomed()
+{
+    emit zoomLevelChanged(m_zoomLevel);
+    m_mapScene->setTilesDrawingLevels(m_zoomLevel);
+    getTiles(m_sceneCoordinate);
+    m_mapScene->setSceneVerticalOverlap(m_viewSize.height(), m_zoomLevel);
+}
+
 void MapEngine::zoomIn()
 {
     qDebug() << __PRETTY_FUNCTION__;
@@ -477,11 +486,7 @@ void MapEngine::zoomIn()
     if (m_zoomLevel < MAX_MAP_ZOOM_LEVEL) {
         m_zoomLevel++;
         m_zoomedIn = true;
-        emit zoomLevelChanged(m_zoomLevel);
-
-        m_mapScene->setTilesDrawingLevels(m_zoomLevel);
-
-        getTiles(m_sceneCoordinate);
+        zoomed();
     }
 }
 
@@ -491,10 +496,6 @@ void MapEngine::zoomOut()
 
     if (m_zoomLevel > MIN_VIEW_ZOOM_LEVEL) {
         m_zoomLevel--;
-        emit zoomLevelChanged(m_zoomLevel);
-
-        m_mapScene->setTilesDrawingLevels(m_zoomLevel);
-
-        getTiles(m_sceneCoordinate);
+        zoomed();
     }
 }
index 9495ceb..cb12e08 100644 (file)
@@ -254,6 +254,8 @@ private:
     */
     QRect updateViewTilesSceneRect();
 
+    void zoomed();
+
 private slots:
     /**
       * @brief Slot for GPS position updates
index 29000aa..c788088 100644 (file)
@@ -36,7 +36,7 @@ MapScene::MapScene(QObject *parent)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-
+    setBackgroundBrush(Qt::darkGray);
     setSceneRect(-WORLD_PIXELS_X, 0, WORLD_PIXELS_X * 3 - 1, WORLD_PIXELS_Y - 1);
 }
 
@@ -135,6 +135,18 @@ void MapScene::removeTile(MapTile *tile)
 //    delete tile;
 }
 
+void MapScene::setSceneVerticalOverlap(int viewHeight, int zoomLevel)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    int overlap = viewHeight / 2 * (1 << (MAX_MAP_ZOOM_LEVEL - zoomLevel));
+
+    QRect rect = sceneRect().toRect();
+    rect.setTop(-overlap);
+    rect.setBottom(WORLD_PIXELS_Y + overlap - 1);
+    setSceneRect(rect);
+}
+
 void MapScene::setTilePosition(MapTile *tile)
 {
     qDebug() << __PRETTY_FUNCTION__;
index ff7a917..bc2dcde 100644 (file)
@@ -102,6 +102,8 @@ public:
     */
     void removeTile(MapTile *tile);
 
+    void setSceneVerticalOverlap(int viewHeight, int zoomLevel);
+
     /**
     * @brief Set position of the tile in the MapScene coordinate system
     *