#include #include #include #include #include #include #include namespace mbgl { CustomVectorTile::CustomVectorTile(const OverscaledTileID& overscaledTileID, std::string sourceID_, const TileParameters& parameters, ActorRef loader_, TileObserver* observer_) : GeometryTile(overscaledTileID, std::move(sourceID_), parameters, observer_), necessity(TileNecessity::Optional), loader(std::move(loader_)), mailbox(std::make_shared(*Scheduler::GetCurrent())), actorRef(*this, mailbox) {} CustomVectorTile::~CustomVectorTile() { loader.invoke(&style::CustomVectorTileLoader::removeTile, id); } void CustomVectorTile::setTileData(const std::shared_ptr& data, style::TileDataFormat format) { if (obsolete) return; switch (format) { case style::TileDataFormat::MVT: GeometryTile::setData(data ? std::make_unique(data) : nullptr); break; default: assert(false && "Unhandled TileDataFormat"); GeometryTile::setData(nullptr); break; } } void CustomVectorTile::setTileError(std::exception_ptr error) { if (obsolete) return; GeometryTile::setError(std::move(error)); } void CustomVectorTile::invalidateTileData() { stale = true; observer->onTileChanged(*this); } void CustomVectorTile::setNecessity(TileNecessity newNecessity) { if (newNecessity != necessity || stale) { necessity = newNecessity; if (necessity == TileNecessity::Required) { loader.invoke(&style::CustomVectorTileLoader::fetchTile, id, actorRef); stale = false; } else if (!isRenderable()) { loader.invoke(&style::CustomVectorTileLoader::cancelTile, id); } } } } // namespace mbgl