summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzmiao <zmiao.jamie@gmail.com>2019-08-21 23:23:20 +0300
committerzmiao <zmiao.jamie@gmail.com>2019-08-21 23:23:20 +0300
commitdef9e3705c7502e79f7e69c409c56b424a178b7d (patch)
tree72f0ff9c3c3a72a1bc4a09856da6fc102a8f8974
parent4fdf9db2a861c6ba052ce5d09790bdcc7052afc8 (diff)
downloadqtlocation-mapboxgl-def9e3705c7502e79f7e69c409c56b424a178b7d.tar.gz
simplify codes
-rw-r--r--src/mbgl/layout/symbol_instance.cpp2
-rw-r--r--src/mbgl/layout/symbol_instance.hpp2
-rw-r--r--src/mbgl/renderer/buckets/symbol_bucket.cpp20
-rw-r--r--src/mbgl/text/placement.cpp41
4 files changed, 27 insertions, 38 deletions
diff --git a/src/mbgl/layout/symbol_instance.cpp b/src/mbgl/layout/symbol_instance.cpp
index badafc4704..620921699d 100644
--- a/src/mbgl/layout/symbol_instance.cpp
+++ b/src/mbgl/layout/symbol_instance.cpp
@@ -94,6 +94,7 @@ SymbolInstance::SymbolInstance(Anchor& anchor_,
anchor(anchor_),
// 'hasText' depends on finding at least one glyph in the shaping that's also in the GlyphPositionMap
hasText(!sharedData->empty()),
+ iconStatus(iconFlag),
// Create the collision features that will be used to check whether this symbol instance can be placed
// As a collision approximation, we can use either the vertical or any of the horizontal versions of the feature
textCollisionFeature(sharedData->line, anchor, getAnyShaping(shapedTextOrientations), textBoxScale_, textPadding, textPlacement, indexedFeature, overscaling, textRotation),
@@ -108,7 +109,6 @@ SymbolInstance::SymbolInstance(Anchor& anchor_,
radialTextOffset(radialTextOffset_),
singleLine(shapedTextOrientations.singleLine) {
- iconStatus |= iconFlag;
if (allowVerticalPlacement && shapedTextOrientations.vertical) {
const float verticalPointLabelAngle = 90.0f;
verticalTextCollisionFeature = CollisionFeature(line(), anchor, shapedTextOrientations.vertical, textBoxScale_, textPadding, textPlacement, indexedFeature, overscaling, textRotation + verticalPointLabelAngle);
diff --git a/src/mbgl/layout/symbol_instance.hpp b/src/mbgl/layout/symbol_instance.hpp
index a768b5b41d..3514178fa0 100644
--- a/src/mbgl/layout/symbol_instance.hpp
+++ b/src/mbgl/layout/symbol_instance.hpp
@@ -65,7 +65,7 @@ public:
const float textRotation,
float radialTextOffset,
bool allowVerticalPlacement,
- const uint8_t iconFlags = 0x00);
+ const uint8_t iconFlags);
optional<size_t> getDefaultHorizontalPlacedTextIndex() const;
const GeometryCoordinates& line() const;
diff --git a/src/mbgl/renderer/buckets/symbol_bucket.cpp b/src/mbgl/renderer/buckets/symbol_bucket.cpp
index 8bdba85115..fa1c55a9d3 100644
--- a/src/mbgl/renderer/buckets/symbol_bucket.cpp
+++ b/src/mbgl/renderer/buckets/symbol_bucket.cpp
@@ -235,24 +235,16 @@ void SymbolBucket::sortFeatures(const float angle) {
addPlacedSymbol(text.triangles, text.placedSymbols[*symbolInstance.placedVerticalTextIndex]);
}
+ auto& iconBuffer = symbolInstance.hasSdfIcon() ? sdfIcon : icon;
if (symbolInstance.placedIconIndex) {
- if (symbolInstance.hasSdfIcon()) {
- addPlacedSymbol(sdfIcon.triangles,
- sdfIcon.placedSymbols[*symbolInstance.placedIconIndex]);
- } else {
- addPlacedSymbol(icon.triangles,
- icon.placedSymbols[*symbolInstance.placedIconIndex]);
- }
+ addPlacedSymbol(iconBuffer.triangles,
+ iconBuffer.placedSymbols[*symbolInstance.placedIconIndex]);
}
if (symbolInstance.placedVerticalIconIndex) {
- if (symbolInstance.hasSdfIcon()) {
- addPlacedSymbol(sdfIcon.triangles,
- sdfIcon.placedSymbols[*symbolInstance.placedVerticalIconIndex]);
- } else {
- addPlacedSymbol(icon.triangles,
- icon.placedSymbols[*symbolInstance.placedVerticalIconIndex]);
- }
+ addPlacedSymbol(iconBuffer.triangles,
+ iconBuffer.placedSymbols[*symbolInstance.placedVerticalIconIndex]);
+
}
}
}
diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp
index ce2b9734ac..8fc4633fd0 100644
--- a/src/mbgl/text/placement.cpp
+++ b/src/mbgl/text/placement.cpp
@@ -642,22 +642,26 @@ bool Placement::updateBucketDynamicVertices(SymbolBucket& bucket, const Transfor
}
if (updateTextFitIcon && bucket.hasVariablePlacement) {
- bucket.icon.dynamicVertices.clear();
- for (std::size_t i = 0; i < bucket.icon.placedSymbols.size(); ++i) {
- const PlacedSymbol& placedIcon = bucket.icon.placedSymbols[i];
- if (placedIcon.hidden || (!placedIcon.placedOrientation && bucket.allowVerticalPlacement)) {
- hideGlyphs(placedIcon.glyphOffsets.size(), bucket.icon.dynamicVertices);
- } else {
- const auto& pair = placedTextShifts.find(i);
- if (pair == placedTextShifts.end()) {
- hideGlyphs(placedIcon.glyphOffsets.size(), bucket.icon.dynamicVertices);
+ auto updateIcon = [&](SymbolBucket::Buffer& iconBuffer) {
+ iconBuffer.dynamicVertices.clear();
+ for (std::size_t i = 0; i < iconBuffer.placedSymbols.size(); ++i) {
+ const PlacedSymbol& placedIcon = iconBuffer.placedSymbols[i];
+ if (placedIcon.hidden || (!placedIcon.placedOrientation && bucket.allowVerticalPlacement)) {
+ hideGlyphs(placedIcon.glyphOffsets.size(), iconBuffer.dynamicVertices);
} else {
- for (std::size_t j = 0; j < placedIcon.glyphOffsets.size(); ++j) {
- addDynamicAttributes(pair->second.second, placedIcon.angle, bucket.icon.dynamicVertices);
+ const auto& pair = placedTextShifts.find(i);
+ if (pair == placedTextShifts.end()) {
+ hideGlyphs(placedIcon.glyphOffsets.size(), iconBuffer.dynamicVertices);
+ } else {
+ for (std::size_t j = 0; j < placedIcon.glyphOffsets.size(); ++j) {
+ addDynamicAttributes(pair->second.second, placedIcon.angle, iconBuffer.dynamicVertices);
+ }
}
}
}
- }
+ };
+ updateIcon(bucket.icon);
+ updateIcon(bucket.sdfIcon);
}
result = true;
@@ -931,20 +935,13 @@ void Placement::markUsedOrientation(SymbolBucket& bucket, style::TextWritingMode
bucket.text.placedSymbols.at(*symbolInstance.placedVerticalTextIndex).placedOrientation = vertical;
}
+ auto& iconBuffer = symbolInstance.hasSdfIcon() ? bucket.sdfIcon : bucket.icon;
if (symbolInstance.placedIconIndex) {
- if (symbolInstance.hasSdfIcon()) {
- bucket.sdfIcon.placedSymbols.at(*symbolInstance.placedIconIndex).placedOrientation = horizontal;
- } else {
- bucket.icon.placedSymbols.at(*symbolInstance.placedIconIndex).placedOrientation = horizontal;
- }
+ iconBuffer.placedSymbols.at(*symbolInstance.placedIconIndex).placedOrientation = horizontal;
}
if (symbolInstance.placedVerticalIconIndex) {
- if (symbolInstance.hasSdfIcon()) {
- bucket.sdfIcon.placedSymbols.at(*symbolInstance.placedVerticalIconIndex).placedOrientation = vertical;
- } else {
- bucket.icon.placedSymbols.at(*symbolInstance.placedVerticalIconIndex).placedOrientation = vertical;
- }
+ iconBuffer.placedSymbols.at(*symbolInstance.placedVerticalIconIndex).placedOrientation = vertical;
}
}