diff options
author | zmiao <zmiao.jamie@gmail.com> | 2019-08-21 23:23:20 +0300 |
---|---|---|
committer | zmiao <zmiao.jamie@gmail.com> | 2019-08-21 23:23:20 +0300 |
commit | def9e3705c7502e79f7e69c409c56b424a178b7d (patch) | |
tree | 72f0ff9c3c3a72a1bc4a09856da6fc102a8f8974 | |
parent | 4fdf9db2a861c6ba052ce5d09790bdcc7052afc8 (diff) | |
download | qtlocation-mapboxgl-def9e3705c7502e79f7e69c409c56b424a178b7d.tar.gz |
simplify codes
-rw-r--r-- | src/mbgl/layout/symbol_instance.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_instance.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/buckets/symbol_bucket.cpp | 20 | ||||
-rw-r--r-- | src/mbgl/text/placement.cpp | 41 |
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; } } |