diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2017-04-11 20:31:18 +0300 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2017-04-14 12:33:13 -0700 |
commit | 98e2e59e5e963dbc5451a19233d942b429a74855 (patch) | |
tree | 2eb68e34823d07a7402e0c633e4c3e9510b76b4c /src/mbgl/layout | |
parent | 2f4d162debd7e4accfc0b20360058304dce40801 (diff) | |
download | qtlocation-mapboxgl-98e2e59e5e963dbc5451a19233d942b429a74855.tar.gz |
[core] Safeguard PositionedIcon usage via optional
Diffstat (limited to 'src/mbgl/layout')
-rw-r--r-- | src/mbgl/layout/symbol_instance.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_instance.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_layout.cpp | 10 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_layout.hpp | 2 |
4 files changed, 9 insertions, 14 deletions
diff --git a/src/mbgl/layout/symbol_instance.cpp b/src/mbgl/layout/symbol_instance.cpp index 2a3bf068c1..8816f4c95c 100644 --- a/src/mbgl/layout/symbol_instance.cpp +++ b/src/mbgl/layout/symbol_instance.cpp @@ -8,7 +8,7 @@ using namespace style; SymbolInstance::SymbolInstance(Anchor& anchor, const GeometryCoordinates& line, const std::pair<Shaping, Shaping>& shapedTextOrientations, - const PositionedIcon& shapedIcon, + optional<PositionedIcon> shapedIcon, const SymbolLayoutProperties::Evaluated& layout, const float layoutTextSize, const bool addToBuffers, @@ -27,18 +27,15 @@ SymbolInstance::SymbolInstance(Anchor& anchor, hasText(shapedTextOrientations.first || shapedTextOrientations.second), hasIcon(shapedIcon), - // Create the collision features that will be used to check whether this symbol instance can be placed textCollisionFeature(line, anchor, shapedTextOrientations.second ?: shapedTextOrientations.first, textBoxScale, textPadding, textPlacement, indexedFeature), iconCollisionFeature(line, anchor, shapedIcon, iconBoxScale, iconPadding, iconPlacement, indexedFeature), featureIndex(featureIndex_) { - - // Create the quads used for rendering the icon and glyphs. if (addToBuffers) { if (shapedIcon) { - iconQuad = getIconQuad(anchor, shapedIcon, line, layout, layoutTextSize, iconPlacement, shapedTextOrientations.first); + iconQuad = getIconQuad(anchor, *shapedIcon, line, layout, layoutTextSize, iconPlacement, shapedTextOrientations.first); } if (shapedTextOrientations.first) { auto quads = getGlyphQuads(anchor, shapedTextOrientations.first, textBoxScale, line, layout, textPlacement, face); @@ -59,8 +56,6 @@ SymbolInstance::SymbolInstance(Anchor& anchor, } else { writingModes = WritingModeType::None; } - - } } // namespace mbgl diff --git a/src/mbgl/layout/symbol_instance.hpp b/src/mbgl/layout/symbol_instance.hpp index efe6cb05aa..eadbf67475 100644 --- a/src/mbgl/layout/symbol_instance.hpp +++ b/src/mbgl/layout/symbol_instance.hpp @@ -15,7 +15,7 @@ public: SymbolInstance(Anchor& anchor, const GeometryCoordinates& line, const std::pair<Shaping, Shaping>& shapedTextOrientations, - const PositionedIcon& shapedIcon, + optional<PositionedIcon> shapedIcon, const style::SymbolLayoutProperties::Evaluated&, const float layoutTextSize, const bool inside, diff --git a/src/mbgl/layout/symbol_layout.cpp b/src/mbgl/layout/symbol_layout.cpp index 907e60a598..0b05d4f5e1 100644 --- a/src/mbgl/layout/symbol_layout.cpp +++ b/src/mbgl/layout/symbol_layout.cpp @@ -221,7 +221,7 @@ void SymbolLayout::prepare(const GlyphPositionMap& glyphs, const IconAtlasMap& i if (feature.geometry.empty()) continue; std::pair<Shaping, Shaping> shapedTextOrientations; - PositionedIcon shapedIcon; + optional<PositionedIcon> shapedIcon; GlyphPositions face; // if feature has text, shape the text @@ -262,7 +262,7 @@ void SymbolLayout::prepare(const GlyphPositionMap& glyphs, const IconAtlasMap& i if (icons != iconMap.end()) { auto image = icons->second.find(*feature.icon); if (image != icons->second.end()) { - shapedIcon = shapeIcon(image->second, + shapedIcon = PositionedIcon::shapeIcon(image->second, layout.evaluate<IconOffset>(zoom, feature), layout.evaluate<IconRotate>(zoom, feature) * util::DEG2RAD); if (image->second.sdf) { @@ -292,7 +292,7 @@ void SymbolLayout::prepare(const GlyphPositionMap& glyphs, const IconAtlasMap& i void SymbolLayout::addFeature(const std::size_t index, const SymbolFeature& feature, const std::pair<Shaping, Shaping>& shapedTextOrientations, - const PositionedIcon& shapedIcon, + optional<PositionedIcon> shapedIcon, const GlyphPositions& glyphs) { const float minScale = 0.5f; const float glyphSize = 24.0f; @@ -363,8 +363,8 @@ void SymbolLayout::addFeature(const std::size_t index, textMaxAngle, (shapedTextOrientations.second ?: shapedTextOrientations.first).left, (shapedTextOrientations.second ?: shapedTextOrientations.first).right, - shapedIcon.left, - shapedIcon.right, + (shapedIcon ? shapedIcon->left() : 0), + (shapedIcon ? shapedIcon->right() : 0), glyphSize, textMaxBoxScale, overscaling); diff --git a/src/mbgl/layout/symbol_layout.hpp b/src/mbgl/layout/symbol_layout.hpp index 4ec84f0f58..f49f93eaf1 100644 --- a/src/mbgl/layout/symbol_layout.hpp +++ b/src/mbgl/layout/symbol_layout.hpp @@ -55,7 +55,7 @@ private: void addFeature(const size_t, const SymbolFeature&, const std::pair<Shaping, Shaping>& shapedTextOrientations, - const PositionedIcon& shapedIcon, + optional<PositionedIcon> shapedIcon, const GlyphPositions& face); bool anchorIsTooClose(const std::u16string& text, const float repeatDistance, const Anchor&); |