summaryrefslogtreecommitdiff
path: root/src/mbgl/style/custom_tile_loader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/custom_tile_loader.cpp')
-rw-r--r--src/mbgl/style/custom_tile_loader.cpp20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/mbgl/style/custom_tile_loader.cpp b/src/mbgl/style/custom_tile_loader.cpp
index d5bebf0086..af091be5cf 100644
--- a/src/mbgl/style/custom_tile_loader.cpp
+++ b/src/mbgl/style/custom_tile_loader.cpp
@@ -1,4 +1,5 @@
#include <mbgl/style/custom_tile_loader.hpp>
+#include <mbgl/tile/custom_geometry_tile.hpp>
namespace mbgl {
namespace style {
@@ -8,23 +9,23 @@ CustomTileLoader::CustomTileLoader(const TileFunction& fetchTileFn, const TileFu
cancelTileFunction = cancelTileFn;
}
-void CustomTileLoader::fetchTile(const OverscaledTileID& tileID, ActorRef<SetTileDataFunction> callbackRef) {
+void CustomTileLoader::fetchTile(const OverscaledTileID& tileID, ActorRef<CustomGeometryTile> tileRef) {
auto cachedTileData = dataCache.find(tileID.canonical);
if (cachedTileData != dataCache.end()) {
- callbackRef.invoke(&SetTileDataFunction::operator(), *(cachedTileData->second));
+ tileRef.invoke(&CustomGeometryTile::setTileData, *(cachedTileData->second));
}
auto tileCallbacks = tileCallbackMap.find(tileID.canonical);
if (tileCallbacks == tileCallbackMap.end()) {
- auto tuple = std::make_tuple(tileID.overscaledZ, tileID.wrap, callbackRef);
+ auto tuple = std::make_tuple(tileID.overscaledZ, tileID.wrap, tileRef);
tileCallbackMap.insert({ tileID.canonical, std::vector<OverscaledIDFunctionTuple>(1, tuple) });
} else {
for (auto iter = tileCallbacks->second.begin(); iter != tileCallbacks->second.end(); iter++) {
if (std::get<0>(*iter) == tileID.overscaledZ && std::get<1>(*iter) == tileID.wrap ) {
- std::get<2>(*iter) = callbackRef;
+ std::get<2>(*iter) = tileRef;
return;
}
}
- tileCallbacks->second.emplace_back(std::make_tuple(tileID.overscaledZ, tileID.wrap, callbackRef));
+ tileCallbacks->second.emplace_back(std::make_tuple(tileID.overscaledZ, tileID.wrap, tileRef));
}
if (cachedTileData == dataCache.end()) {
invokeTileFetch(tileID.canonical);
@@ -57,11 +58,12 @@ void CustomTileLoader::setTileData(const CanonicalTileID& tileID, const GeoJSON&
auto iter = tileCallbackMap.find(tileID);
if (iter == tileCallbackMap.end()) return;
- dataCache[tileID] = std::make_unique<mapbox::geojson::geojson>(std::move(data));;
+ auto dataPtr = std::make_unique<mapbox::geojson::geojson>(std::move(data));
for (auto tuple : iter->second) {
auto actor = std::get<2>(tuple);
- actor.invoke(&SetTileDataFunction::operator(), data);
+ actor.invoke(&CustomGeometryTile::setTileData, *dataPtr);
}
+ dataCache[tileID] = std::move(dataPtr);
}
void CustomTileLoader::invalidateTile(const CanonicalTileID& tileID) {
@@ -69,7 +71,7 @@ void CustomTileLoader::invalidateTile(const CanonicalTileID& tileID) {
if (tileCallbacks == tileCallbackMap.end()) { return; }
for (auto iter = tileCallbacks->second.begin(); iter != tileCallbacks->second.end(); iter++) {
auto actor = std::get<2>(*iter);
- actor.invoke(&SetTileDataFunction::operator(), mapbox::geojson::feature_collection());
+ actor.invoke(&CustomGeometryTile::invalidateTileData);
invokeTileCancel(tileID);
}
tileCallbackMap.erase(tileCallbacks);
@@ -82,7 +84,7 @@ void CustomTileLoader::invalidateRegion(const LatLngBounds& bounds, Range<uint8_
if (tileBounds.intersects(bounds) || bounds.contains(tileBounds) || tileBounds.contains(bounds)) {
for (auto iter = idtuple->second.begin(); iter != idtuple->second.end(); iter++) {
auto actor = std::get<2>(*iter);
- actor.invoke(&SetTileDataFunction::operator(), mapbox::geojson::feature_collection());
+ actor.invoke(&CustomGeometryTile::invalidateTileData);
invokeTileCancel(idtuple->first);
dataCache.erase(idtuple->first);
}