diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2017-02-24 13:56:05 -0800 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2017-02-28 13:59:14 -0800 |
commit | e18f60229e8a8a00d6aaa617ac635a0f084465ba (patch) | |
tree | 041d25a270d06d354a36a162c74b407be3ebdcee | |
parent | 02d56488e40f1ae5d3408b3e9fe62166a27f4599 (diff) | |
download | qtlocation-mapboxgl-e18f60229e8a8a00d6aaa617ac635a0f084465ba.tar.gz |
[core] There's only ever one icon quad
-rw-r--r-- | src/mbgl/layout/symbol_instance.cpp | 10 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_instance.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_layout.cpp | 145 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_layout.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/text/quads.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/text/quads.hpp | 2 | ||||
-rw-r--r-- | test/text/quads.test.cpp | 262 |
7 files changed, 216 insertions, 213 deletions
diff --git a/src/mbgl/layout/symbol_instance.cpp b/src/mbgl/layout/symbol_instance.cpp index 2935fddd91..4f425641e7 100644 --- a/src/mbgl/layout/symbol_instance.cpp +++ b/src/mbgl/layout/symbol_instance.cpp @@ -16,17 +16,15 @@ SymbolInstance::SymbolInstance(Anchor& anchor, const GeometryCoordinates& line, hasText(shapedTextOrientations.first || shapedTextOrientations.second), hasIcon(shapedIcon), - // Create the quad used for rendering the icon. - iconQuads(addToBuffers && shapedIcon ? - getIconQuads(anchor, shapedIcon, line, layout, iconPlacement, shapedTextOrientations.first) : - SymbolQuads()), - // 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) { - // Create the quads used for rendering the glyphs. + // Create the quads used for rendering the icon and glyphs. if (addToBuffers) { + if (shapedIcon) { + iconQuad = getIconQuad(anchor, shapedIcon, line, layout, iconPlacement, shapedTextOrientations.first); + } if (shapedTextOrientations.first) { auto quads = getGlyphQuads(anchor, shapedTextOrientations.first, textBoxScale, line, layout, textPlacement, face); glyphQuads.insert(glyphQuads.end(), quads.begin(), quads.end()); diff --git a/src/mbgl/layout/symbol_instance.hpp b/src/mbgl/layout/symbol_instance.hpp index 014e34cb78..2dbb3bac23 100644 --- a/src/mbgl/layout/symbol_instance.hpp +++ b/src/mbgl/layout/symbol_instance.hpp @@ -24,7 +24,7 @@ public: bool hasText; bool hasIcon; SymbolQuads glyphQuads; - SymbolQuads iconQuads; + optional<SymbolQuad> iconQuad; CollisionFeature textCollisionFeature; CollisionFeature iconCollisionFeature; WritingModeType writingModes; diff --git a/src/mbgl/layout/symbol_layout.cpp b/src/mbgl/layout/symbol_layout.cpp index e1a4b0457f..cf9e784c26 100644 --- a/src/mbgl/layout/symbol_layout.cpp +++ b/src/mbgl/layout/symbol_layout.cpp @@ -430,6 +430,8 @@ std::unique_ptr<SymbolBucket> SymbolLayout::place(CollisionTile& collisionTile) const bool mayOverlap = layout.get<TextAllowOverlap>() || layout.get<IconAllowOverlap>() || layout.get<TextIgnorePlacement>() || layout.get<IconIgnorePlacement>(); + const bool keepUpright = layout.get<TextKeepUpright>(); + // Sort symbols by their y position on the canvas so that they lower symbols // are drawn on top of higher symbols. // Don't sort symbols that won't overlap because it isn't necessary and @@ -481,20 +483,24 @@ std::unique_ptr<SymbolBucket> SymbolLayout::place(CollisionTile& collisionTile) // Insert final placement into collision tree and add glyphs/icons to buffers if (hasText) { + const float placementZoom = util::max(util::log2(glyphScale) + zoom, 0.0f); collisionTile.insertFeature(symbolInstance.textCollisionFeature, glyphScale, layout.get<TextIgnorePlacement>()); if (glyphScale < collisionTile.maxScale) { - addSymbols( - bucket->text, symbolInstance.glyphQuads, glyphScale, - layout.get<TextKeepUpright>(), textPlacement, collisionTile.config.angle, symbolInstance.writingModes); + for (const auto& symbol : symbolInstance.glyphQuads) { + addSymbol( + bucket->text, symbol, placementZoom, + keepUpright, textPlacement, collisionTile.config.angle, symbolInstance.writingModes); + } } } if (hasIcon) { + const float placementZoom = util::max(util::log2(iconScale) + zoom, 0.0f); collisionTile.insertFeature(symbolInstance.iconCollisionFeature, iconScale, layout.get<IconIgnorePlacement>()); - if (iconScale < collisionTile.maxScale) { - addSymbols( - bucket->icon, symbolInstance.iconQuads, iconScale, - layout.get<IconKeepUpright>(), iconPlacement, collisionTile.config.angle, symbolInstance.writingModes); + if (iconScale < collisionTile.maxScale && symbolInstance.iconQuad) { + addSymbol( + bucket->icon, *symbolInstance.iconQuad, placementZoom, + keepUpright, iconPlacement, collisionTile.config.angle, symbolInstance.writingModes); } } } @@ -507,73 +513,76 @@ std::unique_ptr<SymbolBucket> SymbolLayout::place(CollisionTile& collisionTile) } template <typename Buffer> -void SymbolLayout::addSymbols(Buffer &buffer, const SymbolQuads &symbols, float scale, const bool keepUpright, const style::SymbolPlacementType placement, const float placementAngle, WritingModeType writingModes) { +void SymbolLayout::addSymbol(Buffer& buffer, + const SymbolQuad& symbol, + const float placementZoom, + const bool keepUpright, + const style::SymbolPlacementType placement, + const float placementAngle, + const WritingModeType writingModes) { constexpr const uint16_t vertexLength = 4; - const float placementZoom = util::max(util::log2(scale) + zoom, 0.0f); - - for (const auto& symbol : symbols) { - const auto &tl = symbol.tl; - const auto &tr = symbol.tr; - const auto &bl = symbol.bl; - const auto &br = symbol.br; - const auto &tex = symbol.tex; - - float minZoom = util::max(zoom + util::log2(symbol.minScale), placementZoom); - float maxZoom = util::min(zoom + util::log2(symbol.maxScale), util::MAX_ZOOM_F); - const auto &anchorPoint = symbol.anchorPoint; - - // drop incorrectly oriented glyphs - const float a = std::fmod(symbol.anchorAngle + placementAngle + M_PI, M_PI * 2); - if (writingModes & WritingModeType::Vertical) { - if (placement == style::SymbolPlacementType::Line && symbol.writingMode == WritingModeType::Vertical) { - if (keepUpright && placement == style::SymbolPlacementType::Line && (a <= (M_PI * 5 / 4) || a > (M_PI * 7 / 4))) - continue; - } else if (keepUpright && placement == style::SymbolPlacementType::Line && (a <= (M_PI * 3 / 4) || a > (M_PI * 5 / 4))) - continue; - } else if (keepUpright && placement == style::SymbolPlacementType::Line && - (a <= M_PI / 2 || a > M_PI * 3 / 2)) { - continue; - } - if (maxZoom <= minZoom) - continue; + const auto &tl = symbol.tl; + const auto &tr = symbol.tr; + const auto &bl = symbol.bl; + const auto &br = symbol.br; + const auto &tex = symbol.tex; + + float minZoom = util::max(zoom + util::log2(symbol.minScale), placementZoom); + float maxZoom = util::min(zoom + util::log2(symbol.maxScale), util::MAX_ZOOM_F); + const auto &anchorPoint = symbol.anchorPoint; + + // drop incorrectly oriented glyphs + const float a = std::fmod(symbol.anchorAngle + placementAngle + M_PI, M_PI * 2); + if (writingModes & WritingModeType::Vertical) { + if (placement == style::SymbolPlacementType::Line && symbol.writingMode == WritingModeType::Vertical) { + if (keepUpright && placement == style::SymbolPlacementType::Line && (a <= (M_PI * 5 / 4) || a > (M_PI * 7 / 4))) + return; + } else if (keepUpright && placement == style::SymbolPlacementType::Line && (a <= (M_PI * 3 / 4) || a > (M_PI * 5 / 4))) + return; + } else if (keepUpright && placement == style::SymbolPlacementType::Line && + (a <= M_PI / 2 || a > M_PI * 3 / 2)) { + return; + } - // Lower min zoom so that while fading out the label - // it can be shown outside of collision-free zoom levels - if (minZoom == placementZoom) { - minZoom = 0; - } + if (maxZoom <= minZoom) + return; - if (buffer.segments.empty() || buffer.segments.back().vertexLength + vertexLength > std::numeric_limits<uint16_t>::max()) { - buffer.segments.emplace_back(buffer.vertices.vertexSize(), buffer.triangles.indexSize()); - } + // Lower min zoom so that while fading out the label + // it can be shown outside of collision-free zoom levels + if (minZoom == placementZoom) { + minZoom = 0; + } - // We're generating triangle fans, so we always start with the first - // coordinate in this polygon. - auto& segment = buffer.segments.back(); - assert(segment.vertexLength <= std::numeric_limits<uint16_t>::max()); - uint16_t index = segment.vertexLength; - - // Encode angle of glyph - uint8_t glyphAngle = std::round((symbol.glyphAngle / (M_PI * 2)) * 256); - - // coordinates (2 triangles) - buffer.vertices.emplace_back(SymbolLayoutAttributes::vertex(anchorPoint, tl, tex.x, tex.y, - minZoom, maxZoom, placementZoom, glyphAngle)); - buffer.vertices.emplace_back(SymbolLayoutAttributes::vertex(anchorPoint, tr, tex.x + tex.w, tex.y, - minZoom, maxZoom, placementZoom, glyphAngle)); - buffer.vertices.emplace_back(SymbolLayoutAttributes::vertex(anchorPoint, bl, tex.x, tex.y + tex.h, - minZoom, maxZoom, placementZoom, glyphAngle)); - buffer.vertices.emplace_back(SymbolLayoutAttributes::vertex(anchorPoint, br, tex.x + tex.w, tex.y + tex.h, - minZoom, maxZoom, placementZoom, glyphAngle)); - - // add the two triangles, referencing the four coordinates we just inserted. - buffer.triangles.emplace_back(index + 0, index + 1, index + 2); - buffer.triangles.emplace_back(index + 1, index + 2, index + 3); - - segment.vertexLength += vertexLength; - segment.indexLength += 6; + if (buffer.segments.empty() || buffer.segments.back().vertexLength + vertexLength > std::numeric_limits<uint16_t>::max()) { + buffer.segments.emplace_back(buffer.vertices.vertexSize(), buffer.triangles.indexSize()); } + + // We're generating triangle fans, so we always start with the first + // coordinate in this polygon. + auto& segment = buffer.segments.back(); + assert(segment.vertexLength <= std::numeric_limits<uint16_t>::max()); + uint16_t index = segment.vertexLength; + + // Encode angle of glyph + uint8_t glyphAngle = std::round((symbol.glyphAngle / (M_PI * 2)) * 256); + + // coordinates (2 triangles) + buffer.vertices.emplace_back(SymbolLayoutAttributes::vertex(anchorPoint, tl, tex.x, tex.y, + minZoom, maxZoom, placementZoom, glyphAngle)); + buffer.vertices.emplace_back(SymbolLayoutAttributes::vertex(anchorPoint, tr, tex.x + tex.w, tex.y, + minZoom, maxZoom, placementZoom, glyphAngle)); + buffer.vertices.emplace_back(SymbolLayoutAttributes::vertex(anchorPoint, bl, tex.x, tex.y + tex.h, + minZoom, maxZoom, placementZoom, glyphAngle)); + buffer.vertices.emplace_back(SymbolLayoutAttributes::vertex(anchorPoint, br, tex.x + tex.w, tex.y + tex.h, + minZoom, maxZoom, placementZoom, glyphAngle)); + + // add the two triangles, referencing the four coordinates we just inserted. + buffer.triangles.emplace_back(index + 0, index + 1, index + 2); + buffer.triangles.emplace_back(index + 1, index + 2, index + 3); + + segment.vertexLength += vertexLength; + segment.indexLength += 6; } void SymbolLayout::addToDebugBuffers(CollisionTile& collisionTile, SymbolBucket& bucket) { diff --git a/src/mbgl/layout/symbol_layout.hpp b/src/mbgl/layout/symbol_layout.hpp index 0784c49614..dbfdad22d9 100644 --- a/src/mbgl/layout/symbol_layout.hpp +++ b/src/mbgl/layout/symbol_layout.hpp @@ -66,7 +66,7 @@ private: // Adds placed items to the buffer. template <typename Buffer> - void addSymbols(Buffer&, const SymbolQuads&, float scale, + void addSymbol(Buffer&, const SymbolQuad&, float scale, const bool keepUpright, const style::SymbolPlacementType, const float placementAngle, WritingModeType writingModes); diff --git a/src/mbgl/text/quads.cpp b/src/mbgl/text/quads.cpp index b4a3ea09a4..6113d1f5d4 100644 --- a/src/mbgl/text/quads.cpp +++ b/src/mbgl/text/quads.cpp @@ -13,7 +13,7 @@ using namespace style; const float globalMinScale = 0.5f; // underscale by 1 zoom level -SymbolQuads getIconQuads(Anchor& anchor, const PositionedIcon& shapedIcon, +SymbolQuad getIconQuad(Anchor& anchor, const PositionedIcon& shapedIcon, const GeometryCoordinates& line, const SymbolLayoutProperties::Evaluated& layout, const style::SymbolPlacementType placement, const Shaping& shapedText) { @@ -88,9 +88,7 @@ SymbolQuads getIconQuads(Anchor& anchor, const PositionedIcon& shapedIcon, br = util::matrixMultiply(matrix, br); } - SymbolQuads quads; - quads.emplace_back(tl, tr, bl, br, image.pos, 0, 0, anchor.point, globalMinScale, std::numeric_limits<float>::infinity(), shapedText.writingMode); - return quads; + return SymbolQuad { tl, tr, bl, br, image.pos, 0, 0, anchor.point, globalMinScale, std::numeric_limits<float>::infinity(), shapedText.writingMode }; } struct GlyphInstance { diff --git a/src/mbgl/text/quads.hpp b/src/mbgl/text/quads.hpp index 760015340e..07a94c763b 100644 --- a/src/mbgl/text/quads.hpp +++ b/src/mbgl/text/quads.hpp @@ -38,7 +38,7 @@ struct SymbolQuad { typedef std::vector<SymbolQuad> SymbolQuads; -SymbolQuads getIconQuads(Anchor& anchor, const PositionedIcon& shapedIcon, +SymbolQuad getIconQuad(Anchor& anchor, const PositionedIcon& shapedIcon, const GeometryCoordinates& line, const style::SymbolLayoutProperties::Evaluated&, style::SymbolPlacementType placement, const Shaping& shapedText); diff --git a/test/text/quads.test.cpp b/test/text/quads.test.cpp index 69aba1a86b..42bc0f2048 100644 --- a/test/text/quads.test.cpp +++ b/test/text/quads.test.cpp @@ -22,23 +22,22 @@ TEST(getIconQuads, normal) { GeometryCoordinates line; Shaping shapedText; - SymbolQuads quads = - getIconQuads(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); + SymbolQuad quad = + getIconQuad(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); - ASSERT_EQ(quads.size(), 1u); - ASSERT_EQ(quads[0].anchorPoint.x, 2); - ASSERT_EQ(quads[0].anchorPoint.y, 3); - ASSERT_EQ(quads[0].tl.x, -8); - ASSERT_EQ(quads[0].tl.y, -6); - ASSERT_EQ(quads[0].tr.x, 7); - ASSERT_EQ(quads[0].tr.y, -6); - ASSERT_EQ(quads[0].bl.x, -8); - ASSERT_EQ(quads[0].bl.y, 5); - ASSERT_EQ(quads[0].br.x, 7); - ASSERT_EQ(quads[0].br.y, 5); - ASSERT_EQ(quads[0].anchorAngle, 0.0f); - ASSERT_EQ(quads[0].glyphAngle, 0.0f); - ASSERT_EQ(quads[0].minScale, 0.5f); + ASSERT_EQ(quad.anchorPoint.x, 2); + ASSERT_EQ(quad.anchorPoint.y, 3); + ASSERT_EQ(quad.tl.x, -8); + ASSERT_EQ(quad.tl.y, -6); + ASSERT_EQ(quad.tr.x, 7); + ASSERT_EQ(quad.tr.y, -6); + ASSERT_EQ(quad.bl.x, -8); + ASSERT_EQ(quad.bl.y, 5); + ASSERT_EQ(quad.br.x, 7); + ASSERT_EQ(quad.br.y, 5); + ASSERT_EQ(quad.anchorAngle, 0.0f); + ASSERT_EQ(quad.glyphAngle, 0.0f); + ASSERT_EQ(quad.minScale, 0.5f); } TEST(getIconQuads, style) { @@ -61,23 +60,22 @@ TEST(getIconQuads, style) { // none { SymbolLayoutProperties::Evaluated layout; - SymbolQuads quads = - getIconQuads(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); + SymbolQuad quad = + getIconQuad(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); - ASSERT_EQ(quads.size(), 1u); - ASSERT_EQ(quads[0].anchorPoint.x, 0); - ASSERT_EQ(quads[0].anchorPoint.y, 0); - ASSERT_EQ(quads[0].tl.x, -11); - ASSERT_EQ(quads[0].tl.y, -11); - ASSERT_EQ(quads[0].tr.x, 9); - ASSERT_EQ(quads[0].tr.y, -11); - ASSERT_EQ(quads[0].bl.x, -11); - ASSERT_EQ(quads[0].bl.y, 9); - ASSERT_EQ(quads[0].br.x, 9); - ASSERT_EQ(quads[0].br.y, 9); - ASSERT_EQ(quads[0].anchorAngle, 0.0f); - ASSERT_EQ(quads[0].glyphAngle, 0.0f); - ASSERT_EQ(quads[0].minScale, 0.5f); + ASSERT_EQ(quad.anchorPoint.x, 0); + ASSERT_EQ(quad.anchorPoint.y, 0); + ASSERT_EQ(quad.tl.x, -11); + ASSERT_EQ(quad.tl.y, -11); + ASSERT_EQ(quad.tr.x, 9); + ASSERT_EQ(quad.tr.y, -11); + ASSERT_EQ(quad.bl.x, -11); + ASSERT_EQ(quad.bl.y, 9); + ASSERT_EQ(quad.br.x, 9); + ASSERT_EQ(quad.br.y, 9); + ASSERT_EQ(quad.anchorAngle, 0.0f); + ASSERT_EQ(quad.glyphAngle, 0.0f); + ASSERT_EQ(quad.minScale, 0.5f); } // width @@ -85,17 +83,17 @@ TEST(getIconQuads, style) { SymbolLayoutProperties::Evaluated layout; layout.get<TextSize>() = 24.0f; layout.get<IconTextFit>() = IconTextFitType::Width; - SymbolQuads quads = - getIconQuads(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); + SymbolQuad quad = + getIconQuad(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); - ASSERT_EQ(quads[0].tl.x, -60); - ASSERT_EQ(quads[0].tl.y, 0); - ASSERT_EQ(quads[0].tr.x, 20); - ASSERT_EQ(quads[0].tr.y, 0); - ASSERT_EQ(quads[0].bl.x, -60); - ASSERT_EQ(quads[0].bl.y, 20); - ASSERT_EQ(quads[0].br.x, 20); - ASSERT_EQ(quads[0].br.y, 20); + ASSERT_EQ(quad.tl.x, -60); + ASSERT_EQ(quad.tl.y, 0); + ASSERT_EQ(quad.tr.x, 20); + ASSERT_EQ(quad.tr.y, 0); + ASSERT_EQ(quad.bl.x, -60); + ASSERT_EQ(quad.bl.y, 20); + ASSERT_EQ(quad.br.x, 20); + ASSERT_EQ(quad.br.y, 20); } // width x textSize @@ -103,17 +101,17 @@ TEST(getIconQuads, style) { SymbolLayoutProperties::Evaluated layout; layout.get<TextSize>() = 12.0f; layout.get<IconTextFit>() = IconTextFitType::Width; - SymbolQuads quads = - getIconQuads(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); + SymbolQuad quad = + getIconQuad(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); - ASSERT_EQ(quads[0].tl.x, -30); - ASSERT_EQ(quads[0].tl.y, -5); - ASSERT_EQ(quads[0].tr.x, 10); - ASSERT_EQ(quads[0].tr.y, -5); - ASSERT_EQ(quads[0].bl.x, -30); - ASSERT_EQ(quads[0].bl.y, 15); - ASSERT_EQ(quads[0].br.x, 10); - ASSERT_EQ(quads[0].br.y, 15); + ASSERT_EQ(quad.tl.x, -30); + ASSERT_EQ(quad.tl.y, -5); + ASSERT_EQ(quad.tr.x, 10); + ASSERT_EQ(quad.tr.y, -5); + ASSERT_EQ(quad.bl.x, -30); + ASSERT_EQ(quad.bl.y, 15); + ASSERT_EQ(quad.br.x, 10); + ASSERT_EQ(quad.br.y, 15); } // width x textSize + padding @@ -125,17 +123,17 @@ TEST(getIconQuads, style) { layout.get<IconTextFitPadding>()[1] = 10.0f; layout.get<IconTextFitPadding>()[2] = 5.0f; layout.get<IconTextFitPadding>()[3] = 10.0f; - SymbolQuads quads = - getIconQuads(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); + SymbolQuad quad = + getIconQuad(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); - ASSERT_EQ(quads[0].tl.x, -40); - ASSERT_EQ(quads[0].tl.y, -10); - ASSERT_EQ(quads[0].tr.x, 20); - ASSERT_EQ(quads[0].tr.y, -10); - ASSERT_EQ(quads[0].bl.x, -40); - ASSERT_EQ(quads[0].bl.y, 20); - ASSERT_EQ(quads[0].br.x, 20); - ASSERT_EQ(quads[0].br.y, 20); + ASSERT_EQ(quad.tl.x, -40); + ASSERT_EQ(quad.tl.y, -10); + ASSERT_EQ(quad.tr.x, 20); + ASSERT_EQ(quad.tr.y, -10); + ASSERT_EQ(quad.bl.x, -40); + ASSERT_EQ(quad.bl.y, 20); + ASSERT_EQ(quad.br.x, 20); + ASSERT_EQ(quad.br.y, 20); } // height @@ -143,17 +141,17 @@ TEST(getIconQuads, style) { SymbolLayoutProperties::Evaluated layout; layout.get<TextSize>() = 24.0f; layout.get<IconTextFit>() = IconTextFitType::Height; - SymbolQuads quads = - getIconQuads(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); + SymbolQuad quad = + getIconQuad(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); - ASSERT_EQ(quads[0].tl.x, -30); - ASSERT_EQ(quads[0].tl.y, -10); - ASSERT_EQ(quads[0].tr.x, -10); - ASSERT_EQ(quads[0].tr.y, -10); - ASSERT_EQ(quads[0].bl.x, -30); - ASSERT_EQ(quads[0].bl.y, 30); - ASSERT_EQ(quads[0].br.x, -10); - ASSERT_EQ(quads[0].br.y, 30); + ASSERT_EQ(quad.tl.x, -30); + ASSERT_EQ(quad.tl.y, -10); + ASSERT_EQ(quad.tr.x, -10); + ASSERT_EQ(quad.tr.y, -10); + ASSERT_EQ(quad.bl.x, -30); + ASSERT_EQ(quad.bl.y, 30); + ASSERT_EQ(quad.br.x, -10); + ASSERT_EQ(quad.br.y, 30); } // height x textSize @@ -161,17 +159,17 @@ TEST(getIconQuads, style) { SymbolLayoutProperties::Evaluated layout; layout.get<TextSize>() = 12.0f; layout.get<IconTextFit>() = IconTextFitType::Height; - SymbolQuads quads = - getIconQuads(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); + SymbolQuad quad = + getIconQuad(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); - ASSERT_EQ(quads[0].tl.x, -20); - ASSERT_EQ(quads[0].tl.y, -5); - ASSERT_EQ(quads[0].tr.x, 0); - ASSERT_EQ(quads[0].tr.y, -5); - ASSERT_EQ(quads[0].bl.x, -20); - ASSERT_EQ(quads[0].bl.y, 15); - ASSERT_EQ(quads[0].br.x, 0); - ASSERT_EQ(quads[0].br.y, 15); + ASSERT_EQ(quad.tl.x, -20); + ASSERT_EQ(quad.tl.y, -5); + ASSERT_EQ(quad.tr.x, 0); + ASSERT_EQ(quad.tr.y, -5); + ASSERT_EQ(quad.bl.x, -20); + ASSERT_EQ(quad.bl.y, 15); + ASSERT_EQ(quad.br.x, 0); + ASSERT_EQ(quad.br.y, 15); } // height x textSize + padding @@ -183,17 +181,17 @@ TEST(getIconQuads, style) { layout.get<IconTextFitPadding>()[1] = 10.0f; layout.get<IconTextFitPadding>()[2] = 5.0f; layout.get<IconTextFitPadding>()[3] = 10.0f; - SymbolQuads quads = - getIconQuads(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); + SymbolQuad quad = + getIconQuad(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); - ASSERT_EQ(quads[0].tl.x, -30); - ASSERT_EQ(quads[0].tl.y, -10); - ASSERT_EQ(quads[0].tr.x, 10); - ASSERT_EQ(quads[0].tr.y, -10); - ASSERT_EQ(quads[0].bl.x, -30); - ASSERT_EQ(quads[0].bl.y, 20); - ASSERT_EQ(quads[0].br.x, 10); - ASSERT_EQ(quads[0].br.y, 20); + ASSERT_EQ(quad.tl.x, -30); + ASSERT_EQ(quad.tl.y, -10); + ASSERT_EQ(quad.tr.x, 10); + ASSERT_EQ(quad.tr.y, -10); + ASSERT_EQ(quad.bl.x, -30); + ASSERT_EQ(quad.bl.y, 20); + ASSERT_EQ(quad.br.x, 10); + ASSERT_EQ(quad.br.y, 20); } // both @@ -201,17 +199,17 @@ TEST(getIconQuads, style) { SymbolLayoutProperties::Evaluated layout; layout.get<TextSize>() = 24.0f; layout.get<IconTextFit>() = IconTextFitType::Both; - SymbolQuads quads = - getIconQuads(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); + SymbolQuad quad = + getIconQuad(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); - ASSERT_EQ(quads[0].tl.x, -60); - ASSERT_EQ(quads[0].tl.y, -10); - ASSERT_EQ(quads[0].tr.x, 20); - ASSERT_EQ(quads[0].tr.y, -10); - ASSERT_EQ(quads[0].bl.x, -60); - ASSERT_EQ(quads[0].bl.y, 30); - ASSERT_EQ(quads[0].br.x, 20); - ASSERT_EQ(quads[0].br.y, 30); + ASSERT_EQ(quad.tl.x, -60); + ASSERT_EQ(quad.tl.y, -10); + ASSERT_EQ(quad.tr.x, 20); + ASSERT_EQ(quad.tr.y, -10); + ASSERT_EQ(quad.bl.x, -60); + ASSERT_EQ(quad.bl.y, 30); + ASSERT_EQ(quad.br.x, 20); + ASSERT_EQ(quad.br.y, 30); } // both x textSize @@ -219,17 +217,17 @@ TEST(getIconQuads, style) { SymbolLayoutProperties::Evaluated layout; layout.get<TextSize>() = 12.0f; layout.get<IconTextFit>() = IconTextFitType::Both; - SymbolQuads quads = - getIconQuads(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); + SymbolQuad quad = + getIconQuad(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); - ASSERT_EQ(quads[0].tl.x, -30); - ASSERT_EQ(quads[0].tl.y, -5); - ASSERT_EQ(quads[0].tr.x, 10); - ASSERT_EQ(quads[0].tr.y, -5); - ASSERT_EQ(quads[0].bl.x, -30); - ASSERT_EQ(quads[0].bl.y, 15); - ASSERT_EQ(quads[0].br.x, 10); - ASSERT_EQ(quads[0].br.y, 15); + ASSERT_EQ(quad.tl.x, -30); + ASSERT_EQ(quad.tl.y, -5); + ASSERT_EQ(quad.tr.x, 10); + ASSERT_EQ(quad.tr.y, -5); + ASSERT_EQ(quad.bl.x, -30); + ASSERT_EQ(quad.bl.y, 15); + ASSERT_EQ(quad.br.x, 10); + ASSERT_EQ(quad.br.y, 15); } // both x textSize + padding @@ -241,17 +239,17 @@ TEST(getIconQuads, style) { layout.get<IconTextFitPadding>()[1] = 10.0f; layout.get<IconTextFitPadding>()[2] = 5.0f; layout.get<IconTextFitPadding>()[3] = 10.0f; - SymbolQuads quads = - getIconQuads(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); + SymbolQuad quad = + getIconQuad(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); - ASSERT_EQ(quads[0].tl.x, -40); - ASSERT_EQ(quads[0].tl.y, -10); - ASSERT_EQ(quads[0].tr.x, 20); - ASSERT_EQ(quads[0].tr.y, -10); - ASSERT_EQ(quads[0].bl.x, -40); - ASSERT_EQ(quads[0].bl.y, 20); - ASSERT_EQ(quads[0].br.x, 20); - ASSERT_EQ(quads[0].br.y, 20); + ASSERT_EQ(quad.tl.x, -40); + ASSERT_EQ(quad.tl.y, -10); + ASSERT_EQ(quad.tr.x, 20); + ASSERT_EQ(quad.tr.y, -10); + ASSERT_EQ(quad.bl.x, -40); + ASSERT_EQ(quad.bl.y, 20); + ASSERT_EQ(quad.br.x, 20); + ASSERT_EQ(quad.br.y, 20); } // both x textSize + padding t/r/b/l @@ -263,17 +261,17 @@ TEST(getIconQuads, style) { layout.get<IconTextFitPadding>()[1] = 5.0f; layout.get<IconTextFitPadding>()[2] = 10.0f; layout.get<IconTextFitPadding>()[3] = 15.0f; - SymbolQuads quads = - getIconQuads(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); + SymbolQuad quad = + getIconQuad(anchor, shapedIcon, line, layout, SymbolPlacementType::Point, shapedText); - ASSERT_EQ(quads[0].tl.x, -45); - ASSERT_EQ(quads[0].tl.y, -5); - ASSERT_EQ(quads[0].tr.x, 15); - ASSERT_EQ(quads[0].tr.y, -5); - ASSERT_EQ(quads[0].bl.x, -45); - ASSERT_EQ(quads[0].bl.y, 25); - ASSERT_EQ(quads[0].br.x, 15); - ASSERT_EQ(quads[0].br.y, 25); + ASSERT_EQ(quad.tl.x, -45); + ASSERT_EQ(quad.tl.y, -5); + ASSERT_EQ(quad.tr.x, 15); + ASSERT_EQ(quad.tr.y, -5); + ASSERT_EQ(quad.bl.x, -45); + ASSERT_EQ(quad.bl.y, 25); + ASSERT_EQ(quad.br.x, 15); + ASSERT_EQ(quad.br.y, 25); } } |