summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnsis Brammanis <ansis@mapbox.com>2019-10-17 12:31:07 -0400
committerAnsis Brammanis <ansis@mapbox.com>2019-10-22 17:31:18 -0400
commit020473714300ebf37a3575ba677a5dc2107111a2 (patch)
tree7883c43457a3f73c6e317c5af6f2fb293564bdb6
parentb1d048217a08bf38f0c2037d56381e158da7b6bf (diff)
downloadqtlocation-mapboxgl-020473714300ebf37a3575ba677a5dc2107111a2.tar.gz
[core] consider icon-text-fit when doing variable text placement
port 61a61a1982cb8c637d467f91da5b0817a61a9de6
-rw-r--r--src/mbgl/text/placement.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp
index 8b0a3975fc..90cd5a050b 100644
--- a/src/mbgl/text/placement.cpp
+++ b/src/mbgl/text/placement.cpp
@@ -305,7 +305,9 @@ void Placement::placeBucket(
}
}
- const auto placeFeatureForVariableAnchors = [&] (const CollisionFeature& collisionFeature, style::TextWritingModeType orientation) {
+ const bool doVariableIconPlacement = hasIconTextFit && !iconAllowOverlap && symbolInstance.placedIconIndex;
+
+ const auto placeFeatureForVariableAnchors = [&] (const CollisionFeature& collisionFeature, style::TextWritingModeType orientation, const CollisionFeature& iconCollisionFeature) {
const CollisionBox& textBox = collisionFeature.boxes[0];
const float width = textBox.x2 - textBox.x1;
const float height = textBox.y2 - textBox.y1;
@@ -329,6 +331,15 @@ void Placement::placeBucket(
allowOverlap,
pitchWithMap,
params.showCollisionBoxes, avoidEdges, collisionGroup.second, textBoxes);
+
+ if (doVariableIconPlacement) {
+ auto placedIconFeature = collisionIndex.placeFeature(iconCollisionFeature, shift,
+ posMatrix, iconLabelPlaneMatrix, pixelRatio, placedSymbol, scale, fontSize, iconAllowOverlap, pitchWithMap,
+ params.showCollisionBoxes, avoidEdges, collisionGroup.second, iconBoxes);
+ iconBoxes.clear();
+ if (!placedIconFeature.first) continue;
+ }
+
if (placedFeature.first) {
assert(symbolInstance.crossTileID != 0u);
optional<style::TextVariableAnchorType> prevAnchor;
@@ -366,12 +377,13 @@ void Placement::placeBucket(
};
const auto placeHorizontal = [&] {
- return placeFeatureForVariableAnchors(symbolInstance.textCollisionFeature, style::TextWritingModeType::Horizontal);
+ return placeFeatureForVariableAnchors(symbolInstance.textCollisionFeature, style::TextWritingModeType::Horizontal, symbolInstance.iconCollisionFeature);
};
const auto placeVertical = [&] {
if (bucket.allowVerticalPlacement && !placed.first && symbolInstance.verticalTextCollisionFeature) {
- return placeFeatureForVariableAnchors(*symbolInstance.verticalTextCollisionFeature, style::TextWritingModeType::Vertical);
+ return placeFeatureForVariableAnchors(*symbolInstance.verticalTextCollisionFeature, style::TextWritingModeType::Vertical,
+ symbolInstance.verticalIconCollisionFeature ? *symbolInstance.verticalIconCollisionFeature : symbolInstance.iconCollisionFeature);
}
return std::pair<bool, bool>{false, false};
};