summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-04-08 13:55:08 +0300
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-04-08 17:00:21 +0300
commit5a9fa44d5566884a07994c7c03744239fd83b7fd (patch)
treeeeced164d0629d9627b3634a1fa7aa40a5d40adb
parentfe9ba477a8e0af29b0c44d0c50a2946bba5a6f5a (diff)
downloadqtlocation-mapboxgl-5a9fa44d5566884a07994c7c03744239fd83b7fd.tar.gz
[core][tile mode] Support variable placement + icon-text-fit
-rw-r--r--src/mbgl/text/placement.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp
index f33c6885d9..87c505f2d8 100644
--- a/src/mbgl/text/placement.cpp
+++ b/src/mbgl/text/placement.cpp
@@ -1406,6 +1406,7 @@ void TilePlacement::placeSymbolBucket(const BucketPlacementData& params, std::se
variableAnchor,
pitchTextWithMap = ctx.pitchTextWithMap,
rotateTextWithMap = ctx.rotateTextWithMap,
+ variableIconPlacement = ctx.hasIconTextFit && !ctx.iconAllowOverlap,
bearing = ctx.getTransformState().getBearing()
](const SymbolInstance& symbol) noexcept->IntersectStatus {
IntersectStatus result;
@@ -1430,7 +1431,20 @@ void TilePlacement::placeSymbolBucket(const BucketPlacementData& params, std::se
if (!symbol.iconCollisionFeature.boxes.empty()) {
const auto& iconCollisionBox = symbol.iconCollisionFeature.boxes.front();
- auto iconIntersects = collisionBoxIntersectsTileEdges(iconCollisionBox, {});
+ Point<float> offset{};
+ if (variableAnchor && variableIconPlacement) {
+ float width = iconCollisionBox.x2 - iconCollisionBox.x1;
+ float height = iconCollisionBox.y2 - iconCollisionBox.y1;
+ offset = calculateVariableLayoutOffset(*variableAnchor,
+ width,
+ height,
+ symbol.variableTextOffset,
+ symbol.textBoxScale,
+ rotateTextWithMap,
+ pitchTextWithMap,
+ bearing);
+ }
+ auto iconIntersects = collisionBoxIntersectsTileEdges(iconCollisionBox, offset);
result.flags |= iconIntersects.flags;
result.minSectionLength = std::max(result.minSectionLength, iconIntersects.minSectionLength);
}