1 #pragma once
2 
3 #include <mbgl/tile/geometry_tile.hpp>
4 #include <mbgl/style/sources/custom_geometry_source.hpp>
5 #include <mbgl/util/feature.hpp>
6 #include <mbgl/util/geojson.hpp>
7 #include <mbgl/actor/mailbox.hpp>
8 
9 namespace mbgl {
10 
11 class TileParameters;
12 
13 namespace style {
14 class CustomTileLoader;
15 } // namespace style
16 
17 class CustomGeometryTile: public GeometryTile {
18 public:
19     CustomGeometryTile(const OverscaledTileID&,
20                std::string sourceID,
21                const TileParameters&,
22                const style::CustomGeometrySource::TileOptions,
23                ActorRef<style::CustomTileLoader> loader);
24     ~CustomGeometryTile() override;
25 
26     void setTileData(const GeoJSON& data);
27     void invalidateTileData();
28 
29     void setNecessity(TileNecessity) final;
30 
31     void querySourceFeatures(
32         std::vector<Feature>& result,
33         const SourceQueryOptions&) override;
34 
35 private:
36     bool stale = true;
37     TileNecessity necessity;
38     const style::CustomGeometrySource::TileOptions options;
39     ActorRef<style::CustomTileLoader> loader;
40     std::shared_ptr<Mailbox> mailbox;
41     ActorRef<CustomGeometryTile> actorRef;
42 };
43 
44 } // namespace mbgl
45