diff options
Diffstat (limited to 'src/mbgl/tile/custom_geometry_tile.cpp')
-rw-r--r-- | src/mbgl/tile/custom_geometry_tile.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/mbgl/tile/custom_geometry_tile.cpp b/src/mbgl/tile/custom_geometry_tile.cpp index b608d90d83..7c8a85c4a4 100644 --- a/src/mbgl/tile/custom_geometry_tile.cpp +++ b/src/mbgl/tile/custom_geometry_tile.cpp @@ -5,6 +5,8 @@ #include <mbgl/actor/scheduler.hpp> #include <mbgl/style/filter_evaluator.hpp> #include <mbgl/util/string.hpp> +#include <mbgl/tile/tile_observer.hpp> +#include <mbgl/style/custom_tile_loader.hpp> #include <mapbox/geojsonvt.hpp> @@ -19,7 +21,8 @@ CustomGeometryTile::CustomGeometryTile(const OverscaledTileID& overscaledTileID, necessity(TileNecessity::Optional), options(options_), loader(loader_), - actor(*Scheduler::GetCurrent(), std::bind(&CustomGeometryTile::setTileData, this, std::placeholders::_1)) { + mailbox(std::make_shared<Mailbox>(*Scheduler::GetCurrent())), + actorRef(*this, mailbox) { } CustomGeometryTile::~CustomGeometryTile() { @@ -43,14 +46,20 @@ void CustomGeometryTile::setTileData(const GeoJSON& geoJSON) { setData(std::make_unique<GeoJSONTileData>(std::move(featureData))); } +void CustomGeometryTile::invalidateTileData() { + stale = true; + observer->onTileChanged(*this); +} + //Fetching tile data for custom sources is assumed to be an expensive operation. // Only required tiles make fetchTile requests. Attempt to cancel a tile // that is no longer required. void CustomGeometryTile::setNecessity(TileNecessity newNecessity) { - if (newNecessity != necessity) { + if (newNecessity != necessity || stale ) { necessity = newNecessity; if (necessity == TileNecessity::Required) { - loader.invoke(&style::CustomTileLoader::fetchTile, id, actor.self()); + loader.invoke(&style::CustomTileLoader::fetchTile, id, actorRef); + stale = false; } else if (!isRenderable()) { loader.invoke(&style::CustomTileLoader::cancelTile, id); } |