Added stacked tiles removal method.
authorJussi Laitinen <jupe@l3l7588.ixonos.local>
Thu, 15 Apr 2010 05:25:50 +0000 (08:25 +0300)
committerJussi Laitinen <jupe@l3l7588.ixonos.local>
Thu, 15 Apr 2010 05:25:50 +0000 (08:25 +0300)
src/map/mapengine.cpp
src/map/mapengine.h

index f759384..61bbf49 100644 (file)
@@ -112,6 +112,8 @@ void MapEngine::mapImageReceived(const QUrl &url, const QPixmap &pixmap)
 
         mapTilesInScene.insert(url.toString(), mapTile);
         m_mapScene->addMapTile(mapTile);
+
+        removeStackedTiles(mapTile);
     }
 }
 
@@ -145,7 +147,7 @@ void MapEngine::setLocation(QPointF sceneCoordinate)
 
     if (centerTileChanged(sceneCoordinate)) {
         calculateNewTiles(sceneCoordinate);
-        removeOldTiles();
+        //removeOldTiles();
     }
 }
 
@@ -229,6 +231,22 @@ void MapEngine::removeOldTiles()
      }
 }
 
+void MapEngine::removeStackedTiles(MapTile *tile)
+{
+    QList<QGraphicsItem *> collidingItems = tile->collidingItems(Qt::ContainsItemBoundingRect);
+
+    qDebug() << "Colliding items: " << collidingItems.count();
+
+    foreach (QGraphicsItem *item, collidingItems) {
+        if (item->isObscured()) {
+            qDebug() << "Deleted:" << item->boundingRect();
+            MapTile *tmp = dynamic_cast<MapTile *>(item);
+            m_mapScene->removeItem(tmp);
+            mapTilesInScene.remove(buildURL(tmp->zoomLevel(), tmp->tileNumber()).toString());
+        }
+    }
+}
+
 void MapEngine::viewResized(const QSize &size)
 {
     m_viewSize = size;
index 0d982ce..9ee0a12 100644 (file)
@@ -192,6 +192,8 @@ private:
     */
     void removeOldTiles();
 
+    void removeStackedTiles(MapTile *tile);
+
     /**
     * @brief Checks if center tile has changed.
     *