summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnsis Brammanis <ansis@mapbox.com>2019-10-30 16:27:17 -0400
committerAnsis Brammanis <ansis@mapbox.com>2019-10-30 16:27:17 -0400
commit335aab0690634f0564e9c4c9dfd2927c316973f1 (patch)
tree1dbe694f5e2cb8da2b6a1629041c2d960219b960
parentc8576e089f12438a2384a4fe822af650e94ace74 (diff)
downloadqtlocation-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.cpp7
-rw-r--r--src/mbgl/text/collision_index.hpp3
-rw-r--r--src/mbgl/text/placement.cpp2
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()),