From 95c7bbab46c477df4884368044fe27e71c4acbdc Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Thu, 23 Jan 2020 20:11:24 +0200 Subject: [tile mode] Fix variable symbols placement This commit allows the variable symbols to cross the tile border only if their anchor is the first anchor from the `text-variable-anchor` list. --- .../all-anchors-tile-map-mode/expected.png | Bin 162269 -> 158810 bytes src/mbgl/text/placement.cpp | 13 ++++--------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/metrics/expectations/platform-all/render-tests/text-variable-anchor/all-anchors-tile-map-mode/expected.png b/metrics/expectations/platform-all/render-tests/text-variable-anchor/all-anchors-tile-map-mode/expected.png index 4a7089b1be..8b02991f2f 100644 Binary files a/metrics/expectations/platform-all/render-tests/text-variable-anchor/all-anchors-tile-map-mode/expected.png and b/metrics/expectations/platform-all/render-tests/text-variable-anchor/all-anchors-tile-map-mode/expected.png differ diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp index 32edf679e8..8740e4b021 100644 --- a/src/mbgl/text/placement.cpp +++ b/src/mbgl/text/placement.cpp @@ -331,9 +331,6 @@ void Placement::placeBucket(const SymbolBucket& bucket, const bool doVariableIconPlacement = hasIconTextFit && !iconAllowOverlap && symbolInstance.placedIconIndex; - - bool stickToFirstAnchor = false; - const auto placeFeatureForVariableAnchors = [&](const CollisionFeature& textCollisionFeature, style::TextWritingModeType orientation, const CollisionFeature& iconCollisionFeature) { @@ -347,8 +344,6 @@ void Placement::placeBucket(const SymbolBucket& bucket, for (size_t i = 0u; i < placementAttempts; ++i) { auto anchor = variableTextAnchors[i % anchorsSize]; const bool isFirstAnchor = (anchor == variableTextAnchors.front()); - if (stickToFirstAnchor && !isFirstAnchor) continue; - const bool allowOverlap = (i >= anchorsSize); shift = calculateVariableLayoutOffset(anchor, width, @@ -360,10 +355,10 @@ void Placement::placeBucket(const SymbolBucket& bucket, state.getBearing()); textBoxes.clear(); - if (mapMode == MapMode::Tile && isFirstAnchor) { - assert(tileBorders); - stickToFirstAnchor = collisionIndex.featureIntersectsTileBorders( - textCollisionFeature, shift, posMatrix, pixelRatio, *tileBorders); + if (mapMode == MapMode::Tile && !isFirstAnchor && + collisionIndex.featureIntersectsTileBorders( + textCollisionFeature, shift, posMatrix, pixelRatio, *tileBorders)) { + continue; } placedFeature = collisionIndex.placeFeature(textCollisionFeature, -- cgit v1.2.1