diff options
Diffstat (limited to 'src/mbgl/text/placement.hpp')
-rw-r--r-- | src/mbgl/text/placement.hpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/mbgl/text/placement.hpp b/src/mbgl/text/placement.hpp index 24de4c054a..8527d6df57 100644 --- a/src/mbgl/text/placement.hpp +++ b/src/mbgl/text/placement.hpp @@ -59,9 +59,27 @@ struct RetainedQueryData { , tileID(std::move(tileID_)) {} }; +class CollisionGroups { +public: + using Predicate = std::function<bool(const IndexedSubfeature&)>; + using CollisionGroup = std::pair<uint16_t, optional<Predicate>>; + + CollisionGroups(const bool crossSourceCollisions_) + : maxGroupID(0) + , crossSourceCollisions(crossSourceCollisions_) + {} + + const CollisionGroup& get(const std::string& sourceID); + +private: + std::map<std::string, CollisionGroup> collisionGroups; + uint16_t maxGroupID; + bool crossSourceCollisions; +}; + class Placement { public: - Placement(const TransformState&, MapMode mapMode); + Placement(const TransformState&, MapMode mapMode, const bool crossSourceCollisions); void placeLayer(RenderSymbolLayer&, const mat4&, bool showCollisionBoxes); void commit(const Placement& prevPlacement, TimePoint); void updateLayerOpacities(RenderSymbolLayer&); @@ -86,7 +104,8 @@ private: const float pixelRatio, const bool showCollisionBoxes, std::unordered_set<uint32_t>& seenCrossTileIDs, - const bool holdingForFade); + const bool holdingForFade, + const CollisionGroups::CollisionGroup& collisionGroup); void updateBucketOpacities(SymbolBucket&, std::set<uint32_t>&); @@ -103,6 +122,7 @@ private: bool stale = false; std::unordered_map<uint32_t, RetainedQueryData> retainedQueryData; + CollisionGroups collisionGroups; }; } // namespace mbgl |