summaryrefslogtreecommitdiff
path: root/src/mbgl/text/placement.hpp
diff options
context:
space:
mode:
authorChris Loer <chris.loer@gmail.com>2018-09-06 14:58:37 -0700
committerChris Loer <chris.loer@mapbox.com>2018-09-12 14:10:46 -0700
commitd735d89835fb3076e09594fce2a141fe1495e33f (patch)
tree36fb80484b3952fb730fd34a77439d303d002cdc /src/mbgl/text/placement.hpp
parent079ba0209ed383c15123902f0810e658c2b0abf4 (diff)
downloadqtlocation-mapboxgl-d735d89835fb3076e09594fce2a141fe1495e33f.tar.gz
[core] Port "collision group" plumbing to gl-native.
[node] Hook up map-wide "crossSourceCollisions" option, defaulting to true. [test] Pass "crossSourceCollisions" test option through test harness; enable cross-source-collisions tests on native.
Diffstat (limited to 'src/mbgl/text/placement.hpp')
-rw-r--r--src/mbgl/text/placement.hpp24
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