diff options
author | Ansis Brammanis <ansis@mapbox.com> | 2019-10-30 16:27:17 -0400 |
---|---|---|
committer | Ansis Brammanis <ansis@mapbox.com> | 2019-10-30 16:27:17 -0400 |
commit | 335aab0690634f0564e9c4c9dfd2927c316973f1 (patch) | |
tree | 1dbe694f5e2cb8da2b6a1629041c2d960219b960 | |
parent | c8576e089f12438a2384a4fe822af650e94ace74 (diff) | |
download | qtlocation-mapboxgl-335aab0690634f0564e9c4c9dfd2927c316973f1.tar.gz |
[core] fix cutoff cross-tile labels in MapMode::Tile
Increase the CollisionIndex's padding so that more of a tile's data gets
considered when checking for collisions. This should fix clipped
variable placement text labels.
-rw-r--r-- | src/mbgl/text/collision_index.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/text/collision_index.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/text/placement.cpp | 2 |
3 files changed, 8 insertions, 4 deletions
diff --git a/src/mbgl/text/collision_index.cpp b/src/mbgl/text/collision_index.cpp index c83b117b9a..30502ff7c0 100644 --- a/src/mbgl/text/collision_index.cpp +++ b/src/mbgl/text/collision_index.cpp @@ -22,10 +22,13 @@ namespace mbgl { // the viewport for collision detection so that the bulk of the changes // occur offscreen. Making this constant greater increases label // stability, but it's expensive. -static const float viewportPadding = 100; +static const float viewportPaddingDefault = 100; +// Viewport padding must be much larger for static tiles to avoid clipped labels. +static const float viewportPaddingForStaticTiles = 1024; -CollisionIndex::CollisionIndex(const TransformState& transformState_) +CollisionIndex::CollisionIndex(const TransformState& transformState_, const MapMode& mapMode) : transformState(transformState_) + , viewportPadding(mapMode == MapMode::Tile ? viewportPaddingForStaticTiles : viewportPaddingDefault) , collisionGrid(transformState.getSize().width + 2 * viewportPadding, transformState.getSize().height + 2 * viewportPadding, 25) , ignoredGrid(transformState.getSize().width + 2 * viewportPadding, transformState.getSize().height + 2 * viewportPadding, 25) , screenRightBoundary(transformState.getSize().width + viewportPadding) diff --git a/src/mbgl/text/collision_index.hpp b/src/mbgl/text/collision_index.hpp index 4e8a2fdb62..abd2c8eef6 100644 --- a/src/mbgl/text/collision_index.hpp +++ b/src/mbgl/text/collision_index.hpp @@ -20,7 +20,7 @@ class CollisionIndex { public: using CollisionGrid = GridIndex<IndexedSubfeature>; - explicit CollisionIndex(const TransformState&); + explicit CollisionIndex(const TransformState&, const MapMode&); std::pair<bool,bool> placeFeature(const CollisionFeature& feature, Point<float> shift, @@ -72,6 +72,7 @@ private: const TransformState transformState; + const float viewportPadding; CollisionGrid collisionGrid; CollisionGrid ignoredGrid; diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp index ecc8f93032..7964ad24c7 100644 --- a/src/mbgl/text/placement.cpp +++ b/src/mbgl/text/placement.cpp @@ -95,7 +95,7 @@ Placement::Placement(const TransformState& state_, style::TransitionOptions transitionOptions_, const bool crossSourceCollisions, optional<Immutable<Placement>> prevPlacement_) - : collisionIndex(state_), + : collisionIndex(state_, mapMode_), mapMode(mapMode_), transitionOptions(std::move(transitionOptions_)), placementZoom(state_.getZoom()), |