[core] Fix combination of icon-text-fit with text-variable-anchors and text-writing-mode

This commit is contained in:
Alexander Shalamov
2019-08-08 13:56:22 +03:00
parent 073a243862
commit 9ba700fd47
15 changed files with 344 additions and 184 deletions

View File

@@ -16,9 +16,9 @@ SymbolInstance makeSymbolInstance(float x, float y, std::u16string key) {
style::SymbolPlacementType placementType = style::SymbolPlacementType::Point;
auto sharedData = std::make_shared<SymbolInstanceSharedData>(std::move(line),
shaping, nullopt, layout_, 0.0f, placementType,
shaping, nullopt, nullopt, layout_, placementType,
textOffset, positions, false);
return SymbolInstance(anchor, std::move(sharedData), shaping, nullopt, 0, 0, placementType, textOffset, 0, 0, iconOffset, subfeature, 0, 0, key, 0.0f, 0.0f, 0.0f, 0.0f, false);
return SymbolInstance(anchor, std::move(sharedData), shaping, nullopt, nullopt, 0, 0, placementType, textOffset, 0, 0, iconOffset, subfeature, 0, 0, key, 0.0f, 0.0f, 0.0f, 0.0f, false);
}

View File

@@ -20,10 +20,9 @@ TEST(getIconQuads, normal) {
auto shapedIcon = PositionedIcon::shapeIcon(image, {{ -6.5f, -4.5f }}, SymbolAnchorType::Center, 0);
GeometryCoordinates line;
Shaping shapedText;
SymbolQuad quad =
getIconQuad(shapedIcon, layout, 16.0f, shapedText);
getIconQuad(shapedIcon, WritingModeType::Horizontal);
EXPECT_EQ(quad.tl.x, -14);
EXPECT_EQ(quad.tl.y, -10);
@@ -42,8 +41,6 @@ TEST(getIconQuads, style) {
style::Image::Impl("test", PremultipliedImage({1,1}), 1.0)
};
auto shapedIcon = PositionedIcon::shapeIcon(image, {{ -9.5f, -9.5f }}, SymbolAnchorType::Center, 0);
GeometryCoordinates line;
Shaping shapedText;
shapedText.top = -10.0f;
@@ -54,9 +51,10 @@ TEST(getIconQuads, style) {
// none
{
auto shapedIcon = PositionedIcon::shapeIcon(image, {{ -9.5f, -9.5f }}, SymbolAnchorType::Center, 0);
SymbolLayoutProperties::Evaluated layout;
SymbolQuad quad =
getIconQuad(shapedIcon, layout, 12.0f, shapedText);
getIconQuad(shapedIcon, WritingModeType::Horizontal);
EXPECT_EQ(quad.tl.x, -19.5);
EXPECT_EQ(quad.tl.y, -19.5);
@@ -73,16 +71,18 @@ TEST(getIconQuads, style) {
SymbolLayoutProperties::Evaluated layout;
layout.get<TextSize>() = 24.0f;
layout.get<IconTextFit>() = IconTextFitType::Width;
auto shapedIcon = PositionedIcon::shapeIcon(image, {{ -9.5f, -9.5f }}, SymbolAnchorType::Center, 0);
shapedIcon.fitIconToText(layout, shapedText, 24.0f);
SymbolQuad quad =
getIconQuad(shapedIcon, layout, 24.0f, shapedText);
getIconQuad(shapedIcon, WritingModeType::Horizontal);
EXPECT_EQ(quad.tl.x, -60);
EXPECT_EQ(quad.tl.x, -61);
EXPECT_EQ(quad.tl.y, 0);
EXPECT_EQ(quad.tr.x, 20);
EXPECT_EQ(quad.tr.x, 21);
EXPECT_EQ(quad.tr.y, 0);
EXPECT_EQ(quad.bl.x, -60);
EXPECT_EQ(quad.bl.x, -61);
EXPECT_EQ(quad.bl.y, 20);
EXPECT_EQ(quad.br.x, 20);
EXPECT_EQ(quad.br.x, 21);
EXPECT_EQ(quad.br.y, 20);
}
@@ -91,16 +91,18 @@ TEST(getIconQuads, style) {
SymbolLayoutProperties::Evaluated layout;
layout.get<TextSize>() = 12.0f;
layout.get<IconTextFit>() = IconTextFitType::Width;
auto shapedIcon = PositionedIcon::shapeIcon(image, {{ -9.5f, -9.5f }}, SymbolAnchorType::Center, 0);
shapedIcon.fitIconToText(layout, shapedText, 12.0f);
SymbolQuad quad =
getIconQuad(shapedIcon, layout, 12.0f, shapedText);
getIconQuad(shapedIcon, WritingModeType::Horizontal);
EXPECT_EQ(quad.tl.x, -30);
EXPECT_EQ(quad.tl.x, -31);
EXPECT_EQ(quad.tl.y, -5);
EXPECT_EQ(quad.tr.x, 10);
EXPECT_EQ(quad.tr.x, 11);
EXPECT_EQ(quad.tr.y, -5);
EXPECT_EQ(quad.bl.x, -30);
EXPECT_EQ(quad.bl.x, -31);
EXPECT_EQ(quad.bl.y, 15);
EXPECT_EQ(quad.br.x, 10);
EXPECT_EQ(quad.br.x, 11);
EXPECT_EQ(quad.br.y, 15);
}
@@ -113,16 +115,18 @@ TEST(getIconQuads, style) {
layout.get<IconTextFitPadding>()[1] = 10.0f;
layout.get<IconTextFitPadding>()[2] = 5.0f;
layout.get<IconTextFitPadding>()[3] = 10.0f;
auto shapedIcon = PositionedIcon::shapeIcon(image, {{ -9.5f, -9.5f }}, SymbolAnchorType::Center, 0);
shapedIcon.fitIconToText(layout, shapedText, 12.0f);
SymbolQuad quad =
getIconQuad(shapedIcon, layout, 12.0f, shapedText);
getIconQuad(shapedIcon, WritingModeType::Horizontal);
EXPECT_EQ(quad.tl.x, -40);
EXPECT_EQ(quad.tl.x, -41);
EXPECT_EQ(quad.tl.y, -10);
EXPECT_EQ(quad.tr.x, 20);
EXPECT_EQ(quad.tr.x, 21);
EXPECT_EQ(quad.tr.y, -10);
EXPECT_EQ(quad.bl.x, -40);
EXPECT_EQ(quad.bl.x, -41);
EXPECT_EQ(quad.bl.y, 20);
EXPECT_EQ(quad.br.x, 20);
EXPECT_EQ(quad.br.x, 21);
EXPECT_EQ(quad.br.y, 20);
}
@@ -131,17 +135,19 @@ TEST(getIconQuads, style) {
SymbolLayoutProperties::Evaluated layout;
layout.get<TextSize>() = 24.0f;
layout.get<IconTextFit>() = IconTextFitType::Height;
auto shapedIcon = PositionedIcon::shapeIcon(image, {{ -9.5f, -9.5f }}, SymbolAnchorType::Center, 0);
shapedIcon.fitIconToText(layout, shapedText, 24.0f);
SymbolQuad quad =
getIconQuad(shapedIcon, layout, 24.0f, shapedText);
getIconQuad(shapedIcon, WritingModeType::Horizontal);
EXPECT_EQ(quad.tl.x, -30);
EXPECT_EQ(quad.tl.y, -10);
EXPECT_EQ(quad.tl.y, -11);
EXPECT_EQ(quad.tr.x, -10);
EXPECT_EQ(quad.tr.y, -10);
EXPECT_EQ(quad.tr.y, -11);
EXPECT_EQ(quad.bl.x, -30);
EXPECT_EQ(quad.bl.y, 30);
EXPECT_EQ(quad.bl.y, 31);
EXPECT_EQ(quad.br.x, -10);
EXPECT_EQ(quad.br.y, 30);
EXPECT_EQ(quad.br.y, 31);
}
// height x textSize
@@ -149,17 +155,19 @@ TEST(getIconQuads, style) {
SymbolLayoutProperties::Evaluated layout;
layout.get<TextSize>() = 12.0f;
layout.get<IconTextFit>() = IconTextFitType::Height;
auto shapedIcon = PositionedIcon::shapeIcon(image, {{ -9.5f, -9.5f }}, SymbolAnchorType::Center, 0);
shapedIcon.fitIconToText(layout, shapedText, 12.0f);
SymbolQuad quad =
getIconQuad(shapedIcon, layout, 12.0f, shapedText);
getIconQuad(shapedIcon, WritingModeType::Horizontal);
EXPECT_EQ(quad.tl.x, -20);
EXPECT_EQ(quad.tl.y, -5);
EXPECT_EQ(quad.tl.y, -6);
EXPECT_EQ(quad.tr.x, 0);
EXPECT_EQ(quad.tr.y, -5);
EXPECT_EQ(quad.tr.y, -6);
EXPECT_EQ(quad.bl.x, -20);
EXPECT_EQ(quad.bl.y, 15);
EXPECT_EQ(quad.bl.y, 16);
EXPECT_EQ(quad.br.x, 0);
EXPECT_EQ(quad.br.y, 15);
EXPECT_EQ(quad.br.y, 16);
}
// height x textSize + padding
@@ -171,17 +179,19 @@ TEST(getIconQuads, style) {
layout.get<IconTextFitPadding>()[1] = 10.0f;
layout.get<IconTextFitPadding>()[2] = 5.0f;
layout.get<IconTextFitPadding>()[3] = 10.0f;
auto shapedIcon = PositionedIcon::shapeIcon(image, {{ -9.5f, -9.5f }}, SymbolAnchorType::Center, 0);
shapedIcon.fitIconToText(layout, shapedText, 12.0f);
SymbolQuad quad =
getIconQuad(shapedIcon, layout, 12.0f, shapedText);
getIconQuad(shapedIcon, WritingModeType::Horizontal);
EXPECT_EQ(quad.tl.x, -30);
EXPECT_EQ(quad.tl.y, -10);
EXPECT_EQ(quad.tl.y, -11);
EXPECT_EQ(quad.tr.x, 10);
EXPECT_EQ(quad.tr.y, -10);
EXPECT_EQ(quad.tr.y, -11);
EXPECT_EQ(quad.bl.x, -30);
EXPECT_EQ(quad.bl.y, 20);
EXPECT_EQ(quad.bl.y, 21);
EXPECT_EQ(quad.br.x, 10);
EXPECT_EQ(quad.br.y, 20);
EXPECT_EQ(quad.br.y, 21);
}
// both
@@ -189,17 +199,19 @@ TEST(getIconQuads, style) {
SymbolLayoutProperties::Evaluated layout;
layout.get<TextSize>() = 24.0f;
layout.get<IconTextFit>() = IconTextFitType::Both;
auto shapedIcon = PositionedIcon::shapeIcon(image, {{ -9.5f, -9.5f }}, SymbolAnchorType::Center, 0);
shapedIcon.fitIconToText(layout, shapedText, 24.0f);
SymbolQuad quad =
getIconQuad(shapedIcon, layout, 24.0f, shapedText);
getIconQuad(shapedIcon, WritingModeType::Horizontal);
EXPECT_EQ(quad.tl.x, -60);
EXPECT_EQ(quad.tl.y, -10);
EXPECT_EQ(quad.tr.x, 20);
EXPECT_EQ(quad.tr.y, -10);
EXPECT_EQ(quad.bl.x, -60);
EXPECT_EQ(quad.bl.y, 30);
EXPECT_EQ(quad.br.x, 20);
EXPECT_EQ(quad.br.y, 30);
EXPECT_EQ(quad.tl.x, -61);
EXPECT_EQ(quad.tl.y, -11);
EXPECT_EQ(quad.tr.x, 21);
EXPECT_EQ(quad.tr.y, -11);
EXPECT_EQ(quad.bl.x, -61);
EXPECT_EQ(quad.bl.y, 31);
EXPECT_EQ(quad.br.x, 21);
EXPECT_EQ(quad.br.y, 31);
}
// both x textSize
@@ -207,17 +219,19 @@ TEST(getIconQuads, style) {
SymbolLayoutProperties::Evaluated layout;
layout.get<TextSize>() = 12.0f;
layout.get<IconTextFit>() = IconTextFitType::Both;
auto shapedIcon = PositionedIcon::shapeIcon(image, {{ -9.5f, -9.5f }}, SymbolAnchorType::Center, 0);
shapedIcon.fitIconToText(layout, shapedText, 12.0f);
SymbolQuad quad =
getIconQuad(shapedIcon, layout, 12.0f, shapedText);
getIconQuad(shapedIcon, WritingModeType::Horizontal);
EXPECT_EQ(quad.tl.x, -30);
EXPECT_EQ(quad.tl.y, -5);
EXPECT_EQ(quad.tr.x, 10);
EXPECT_EQ(quad.tr.y, -5);
EXPECT_EQ(quad.bl.x, -30);
EXPECT_EQ(quad.bl.y, 15);
EXPECT_EQ(quad.br.x, 10);
EXPECT_EQ(quad.br.y, 15);
EXPECT_EQ(quad.tl.x, -31);
EXPECT_EQ(quad.tl.y, -6);
EXPECT_EQ(quad.tr.x, 11);
EXPECT_EQ(quad.tr.y, -6);
EXPECT_EQ(quad.bl.x, -31);
EXPECT_EQ(quad.bl.y, 16);
EXPECT_EQ(quad.br.x, 11);
EXPECT_EQ(quad.br.y, 16);
}
// both x textSize + padding
@@ -229,17 +243,19 @@ TEST(getIconQuads, style) {
layout.get<IconTextFitPadding>()[1] = 10.0f;
layout.get<IconTextFitPadding>()[2] = 5.0f;
layout.get<IconTextFitPadding>()[3] = 10.0f;
auto shapedIcon = PositionedIcon::shapeIcon(image, {{ -9.5f, -9.5f }}, SymbolAnchorType::Center, 0);
shapedIcon.fitIconToText(layout, shapedText, 12.0f);
SymbolQuad quad =
getIconQuad(shapedIcon, layout, 12.0f, shapedText);
getIconQuad(shapedIcon, WritingModeType::Horizontal);
EXPECT_EQ(quad.tl.x, -40);
EXPECT_EQ(quad.tl.y, -10);
EXPECT_EQ(quad.tr.x, 20);
EXPECT_EQ(quad.tr.y, -10);
EXPECT_EQ(quad.bl.x, -40);
EXPECT_EQ(quad.bl.y, 20);
EXPECT_EQ(quad.br.x, 20);
EXPECT_EQ(quad.br.y, 20);
EXPECT_EQ(quad.tl.x, -41);
EXPECT_EQ(quad.tl.y, -11);
EXPECT_EQ(quad.tr.x, 21);
EXPECT_EQ(quad.tr.y, -11);
EXPECT_EQ(quad.bl.x, -41);
EXPECT_EQ(quad.bl.y, 21);
EXPECT_EQ(quad.br.x, 21);
EXPECT_EQ(quad.br.y, 21);
}
// both x textSize + padding t/r/b/l
@@ -251,17 +267,19 @@ TEST(getIconQuads, style) {
layout.get<IconTextFitPadding>()[1] = 5.0f;
layout.get<IconTextFitPadding>()[2] = 10.0f;
layout.get<IconTextFitPadding>()[3] = 15.0f;
auto shapedIcon = PositionedIcon::shapeIcon(image, {{ -9.5f, -9.5f }}, SymbolAnchorType::Center, 0);
shapedIcon.fitIconToText(layout, shapedText, 12.0f);
SymbolQuad quad =
getIconQuad(shapedIcon, layout, 12.0f, shapedText);
getIconQuad(shapedIcon, WritingModeType::Horizontal);
EXPECT_EQ(quad.tl.x, -45);
EXPECT_EQ(quad.tl.y, -5);
EXPECT_EQ(quad.tr.x, 15);
EXPECT_EQ(quad.tr.y, -5);
EXPECT_EQ(quad.bl.x, -45);
EXPECT_EQ(quad.bl.y, 25);
EXPECT_EQ(quad.br.x, 15);
EXPECT_EQ(quad.br.y, 25);
EXPECT_EQ(quad.tl.x, -46);
EXPECT_EQ(quad.tl.y, -6);
EXPECT_EQ(quad.tr.x, 16);
EXPECT_EQ(quad.tr.y, -6);
EXPECT_EQ(quad.bl.x, -46);
EXPECT_EQ(quad.bl.y, 26);
EXPECT_EQ(quad.br.x, 16);
EXPECT_EQ(quad.br.y, 26);
}
}