#pragma once #include #include #include #include #include namespace mbgl { class OverscaledTileID; class CanonicalTileID; template class Actor; namespace style { using TileFunction = std::function; class CustomTileLoader; class CustomGeometrySource : public Source { public: struct TileOptions { double tolerance = 0.375; uint16_t tileSize = util::tileSize; uint16_t buffer = 128; }; struct Options { TileFunction fetchTileFunction; TileFunction cancelTileFunction; Range zoomRange = { 0, 18}; TileOptions tileOptions; }; public: CustomGeometrySource(std::string id, CustomGeometrySource::Options options); ~CustomGeometrySource() final; void loadDescription(FileSource&) final; void setTileData(const CanonicalTileID&, const GeoJSON&); void invalidateTile(const CanonicalTileID&); void invalidateRegion(const LatLngBounds&); // Private implementation class Impl; const Impl& impl() const; private: std::unique_ptr> loader; }; template <> inline bool Source::is() const { return getType() == SourceType::CustomVector; } } // namespace style } // namespace mbgl