Changes for setting the zValue of the MapTile
[situare] / src / map / maptile.cpp
index 7b3306a..c538f5d 100644 (file)
    USA.
 */
 
-#include <math.h>
-
 #include <QDebug>
 #include <QTransform>
 
-#include "maptile.h"
+#include "mapcommon.h"
 #include "mapengine.h"
+#include "maptile.h"
 
 MapTile::MapTile()
-{
-    m_tileNumber = QPoint(UNDEFINED, UNDEFINED);
-    m_zoomLevel = UNDEFINED;
+    : m_tileNumber(QPoint(UNDEFINED, UNDEFINED))
+    , m_zoomLevel(UNDEFINED)
+{    
     setPos(UNDEFINED, UNDEFINED);
+    setShapeMode(QGraphicsPixmapItem::BoundingRectShape);
 }
 
 int MapTile::zoomLevel()
@@ -39,15 +39,32 @@ int MapTile::zoomLevel()
     return m_zoomLevel;
 }
 
-void MapTile::setZoomLevel(int zoomLevel)
+void MapTile::setZoomLevel(int tileZoomLevel, int currentViewZoomLevel)
 {
-    m_zoomLevel = zoomLevel;
+    m_zoomLevel = tileZoomLevel;
     setPosition();
 
-    double zoomFactor = pow(2, (MapEngine::MAX_ZOOM_LEVEL - m_zoomLevel));
+    setSceneLevel(currentViewZoomLevel);
+
+    qreal zoomFactor = static_cast<qreal>(1 << (MAX_MAP_ZOOM_LEVEL - m_zoomLevel));
     setScale(zoomFactor);
 }
 
+void MapTile::setSceneLevel(int currentZoomLevel)
+{
+    if (currentZoomLevel < m_zoomLevel) {
+        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));
+
+//    qDebug() << __PRETTY_FUNCTION__ << "Tile:" << m_tileNumber
+//                                    << "m_zoomLevel" << m_zoomLevel
+//                                    << "zValue:" << zValue();
+}
+
 QPoint MapTile::tileNumber()
 {
     return m_tileNumber;
@@ -61,15 +78,17 @@ void MapTile::setTileNumber(QPoint tileNumber)
 
 void MapTile::setPosition()
 {
-    if ((m_zoomLevel >= MapEngine::MIN_ZOOM_LEVEL) && (m_zoomLevel <= MapEngine::MAX_ZOOM_LEVEL) &&
-            (m_tileNumber.x() >= 0) && (m_tileNumber.x() <= pow(2, m_zoomLevel) -1) &&
-            (m_tileNumber.y() >= 0) && (m_tileNumber.y() <= pow(2, m_zoomLevel) -1)) {
+    const int maxTileNumber = (1 << m_zoomLevel) - 1;
+
+    if ((m_zoomLevel >= MIN_MAP_ZOOM_LEVEL) && (m_zoomLevel <= MAX_MAP_ZOOM_LEVEL) &&
+        (m_tileNumber.x() >= 0) && (m_tileNumber.x() <= maxTileNumber) &&
+        (m_tileNumber.y() >= 0) && (m_tileNumber.y() <= maxTileNumber)) {
+
         setPos(MapEngine::convertTileNumberToSceneCoordinate(m_zoomLevel, m_tileNumber));
-        return; // done
+        //qDebug() << __PRETTY_FUNCTION__ << "tile position:" << pos();
+    }
+    else {
+        setPos(UNDEFINED, UNDEFINED);
     }
-    // else
-    setPos(UNDEFINED, UNDEFINED);
-    //Q_ASSERT_X(false, __PRETTY_FUNCTION__, "m_zoomLevel and/or m_tileNumber is undefined");
 }
 
-