summaryrefslogtreecommitdiff
path: root/include/mbgl/style/sources/custom_vector_source.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/style/sources/custom_vector_source.hpp')
-rw-r--r--include/mbgl/style/sources/custom_vector_source.hpp29
1 files changed, 23 insertions, 6 deletions
diff --git a/include/mbgl/style/sources/custom_vector_source.hpp b/include/mbgl/style/sources/custom_vector_source.hpp
index a256c8e7f7..78835f2bed 100644
--- a/include/mbgl/style/sources/custom_vector_source.hpp
+++ b/include/mbgl/style/sources/custom_vector_source.hpp
@@ -5,30 +5,47 @@
#include <mbgl/util/geo.hpp>
#include <mbgl/util/geojson.hpp>
#include <mbgl/util/variant.hpp>
+#include <mbgl/actor/actor_ref.hpp>
+#include <mbgl/util/noncopyable.hpp>
namespace mbgl {
namespace style {
struct Error { std::string message; };
-using FetchTileResult = variant<
- mapbox::geojson::geojson,
- Error>;
+using SetTileDataFunction = std::function<void(const CanonicalTileID& tileID, const mapbox::geojson::geojson&)>;
+using TileFunction = std::function<void(const CanonicalTileID&)>;
-using FetchTileCallback = std::function<void(const CanonicalTileID& tileID, const FetchTileResult&)>;
-using FetchTileFunction = std::function<void(const CanonicalTileID&, FetchTileCallback)>;
+class CustomTileLoader : private util::noncopyable {
+public:
+ CustomTileLoader(TileFunction&& fetchTileFn, TileFunction&& cancelTileFn);
+ ~CustomTileLoader();
+ void fetchTile(const CanonicalTileID& tileID, ActorRef<SetTileDataFunction> callbackRef);
+ void cancelTile(const CanonicalTileID& tileID);
+ void setTileData(const CanonicalTileID& tileID, const mapbox::geojson::geojson& data);
+ void removeTile(const CanonicalTileID& tileID);
+private:
+ class Impl;
+ Impl* impl = nullptr;
+};
class CustomVectorSource : public Source {
public:
CustomVectorSource(std::string id,
GeoJSONOptions options,
- FetchTileFunction fetchTile);
+ TileFunction fetchTile,
+ TileFunction cancelTile);
void loadDescription(FileSource&) final;
+ void setTileData(const CanonicalTileID&, const mapbox::geojson::geojson& geojson);
// Private implementation
class Impl;
const Impl& impl() const;
+private:
+ std::shared_ptr<Mailbox> mailbox;
+ CustomTileLoader loader;
+
};
template <>