OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/gfx/render_text.h" | 5 #include "ui/gfx/render_text.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 1121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1132 } | 1132 } |
1133 | 1133 |
1134 // TODO(asvitkine): This test fails because PlatformFontMac uses point font | 1134 // TODO(asvitkine): This test fails because PlatformFontMac uses point font |
1135 // sizes instead of pixel sizes like other implementations. | 1135 // sizes instead of pixel sizes like other implementations. |
1136 #if !defined(OS_MACOSX) | 1136 #if !defined(OS_MACOSX) |
1137 TEST_F(RenderTextTest, StringSizeEmptyString) { | 1137 TEST_F(RenderTextTest, StringSizeEmptyString) { |
1138 // Ascent and descent of Arial and Symbol are different on most platforms. | 1138 // Ascent and descent of Arial and Symbol are different on most platforms. |
1139 const FontList font_list("Arial,Symbol, 16px"); | 1139 const FontList font_list("Arial,Symbol, 16px"); |
1140 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1140 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1141 render_text->SetFontList(font_list); | 1141 render_text->SetFontList(font_list); |
| 1142 render_text->SetDisplayRect(Rect(0, 0, 0, font_list.GetHeight())); |
1142 | 1143 |
1143 // The empty string respects FontList metrics for non-zero height | 1144 // The empty string respects FontList metrics for non-zero height |
1144 // and baseline. | 1145 // and baseline. |
1145 render_text->SetText(base::string16()); | 1146 render_text->SetText(base::string16()); |
1146 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); | 1147 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); |
1147 EXPECT_EQ(0, render_text->GetStringSize().width()); | 1148 EXPECT_EQ(0, render_text->GetStringSize().width()); |
1148 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); | 1149 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); |
1149 | 1150 |
1150 render_text->SetText(UTF8ToUTF16(" ")); | 1151 render_text->SetText(UTF8ToUTF16(" ")); |
1151 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); | 1152 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); |
(...skipping 21 matching lines...) Expand all Loading... |
1173 symbol_font.GetBaseline() < arial_font.GetBaseline()) { | 1174 symbol_font.GetBaseline() < arial_font.GetBaseline()) { |
1174 std::swap(smaller_font, larger_font); | 1175 std::swap(smaller_font, larger_font); |
1175 std::swap(smaller_font_text, larger_font_text); | 1176 std::swap(smaller_font_text, larger_font_text); |
1176 } | 1177 } |
1177 ASSERT_LT(smaller_font.GetHeight(), larger_font.GetHeight()); | 1178 ASSERT_LT(smaller_font.GetHeight(), larger_font.GetHeight()); |
1178 ASSERT_LT(smaller_font.GetBaseline(), larger_font.GetBaseline()); | 1179 ASSERT_LT(smaller_font.GetBaseline(), larger_font.GetBaseline()); |
1179 | 1180 |
1180 // Check |smaller_font_text| is rendered with the smaller font. | 1181 // Check |smaller_font_text| is rendered with the smaller font. |
1181 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1182 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1182 render_text->SetText(UTF8ToUTF16(smaller_font_text)); | 1183 render_text->SetText(UTF8ToUTF16(smaller_font_text)); |
1183 render_text->SetFont(smaller_font); | 1184 render_text->SetFontList(FontList(smaller_font)); |
| 1185 render_text->SetDisplayRect(Rect(0, 0, 0, |
| 1186 render_text->font_list().GetHeight())); |
1184 EXPECT_EQ(smaller_font.GetHeight(), render_text->GetStringSize().height()); | 1187 EXPECT_EQ(smaller_font.GetHeight(), render_text->GetStringSize().height()); |
1185 EXPECT_EQ(smaller_font.GetBaseline(), render_text->GetBaseline()); | 1188 EXPECT_EQ(smaller_font.GetBaseline(), render_text->GetBaseline()); |
1186 | 1189 |
1187 // Layout the same text with mixed fonts. The text should be rendered with | 1190 // Layout the same text with mixed fonts. The text should be rendered with |
1188 // the smaller font, but the height and baseline are determined with the | 1191 // the smaller font, but the height and baseline are determined with the |
1189 // metrics of the font list, which is equal to the larger font. | 1192 // metrics of the font list, which is equal to the larger font. |
1190 std::vector<Font> fonts; | 1193 std::vector<Font> fonts; |
1191 fonts.push_back(smaller_font); // The primary font is the smaller font. | 1194 fonts.push_back(smaller_font); // The primary font is the smaller font. |
1192 fonts.push_back(larger_font); | 1195 fonts.push_back(larger_font); |
1193 const FontList font_list(fonts); | 1196 const FontList font_list(fonts); |
1194 render_text->SetFontList(font_list); | 1197 render_text->SetFontList(font_list); |
| 1198 render_text->SetDisplayRect(Rect(0, 0, 0, |
| 1199 render_text->font_list().GetHeight())); |
1195 EXPECT_LT(smaller_font.GetHeight(), render_text->GetStringSize().height()); | 1200 EXPECT_LT(smaller_font.GetHeight(), render_text->GetStringSize().height()); |
1196 EXPECT_LT(smaller_font.GetBaseline(), render_text->GetBaseline()); | 1201 EXPECT_LT(smaller_font.GetBaseline(), render_text->GetBaseline()); |
1197 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); | 1202 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); |
1198 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); | 1203 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); |
1199 } | 1204 } |
1200 | 1205 |
1201 TEST_F(RenderTextTest, SetFont) { | 1206 TEST_F(RenderTextTest, SetFont) { |
1202 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1207 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1203 render_text->SetFont(Font("Arial", 12)); | 1208 render_text->SetFont(Font("Arial", 12)); |
1204 EXPECT_EQ("Arial", render_text->GetPrimaryFont().GetFontName()); | 1209 EXPECT_EQ("Arial", render_text->GetPrimaryFont().GetFontName()); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1286 // when the RenderText object is created. This test will check the default in | 1291 // when the RenderText object is created. This test will check the default in |
1287 // LTR mode, and the next test will check the RTL default. | 1292 // LTR mode, and the next test will check the RTL default. |
1288 const bool was_rtl = base::i18n::IsRTL(); | 1293 const bool was_rtl = base::i18n::IsRTL(); |
1289 SetRTL(false); | 1294 SetRTL(false); |
1290 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1295 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1291 render_text->SetText(ASCIIToUTF16("abcdefg")); | 1296 render_text->SetText(ASCIIToUTF16("abcdefg")); |
1292 render_text->SetFontList(FontList("Arial, 13px")); | 1297 render_text->SetFontList(FontList("Arial, 13px")); |
1293 | 1298 |
1294 // Set display area's size equal to the font size. | 1299 // Set display area's size equal to the font size. |
1295 const Size font_size(render_text->GetContentWidth(), | 1300 const Size font_size(render_text->GetContentWidth(), |
1296 render_text->GetStringSize().height()); | 1301 render_text->font_list().GetHeight()); |
1297 Rect display_rect(font_size); | 1302 Rect display_rect(font_size); |
1298 render_text->SetDisplayRect(display_rect); | 1303 render_text->SetDisplayRect(display_rect); |
1299 | 1304 |
1300 Vector2d offset = render_text->GetLineOffset(0); | 1305 Vector2d offset = render_text->GetLineOffset(0); |
1301 EXPECT_TRUE(offset.IsZero()); | 1306 EXPECT_TRUE(offset.IsZero()); |
1302 | 1307 |
1303 // Set display area's size greater than font size. | 1308 const int kEnlargementX = 2; |
1304 const int kEnlargement = 2; | 1309 display_rect.Inset(0, 0, -kEnlargementX, 0); |
1305 display_rect.Inset(0, 0, -kEnlargement, -kEnlargement); | |
1306 render_text->SetDisplayRect(display_rect); | 1310 render_text->SetDisplayRect(display_rect); |
1307 | 1311 |
1308 // Check the default horizontal and vertical alignment. | 1312 // Check the default horizontal alignment. |
1309 offset = render_text->GetLineOffset(0); | 1313 offset = render_text->GetLineOffset(0); |
1310 EXPECT_EQ(kEnlargement / 2, offset.y()); | |
1311 EXPECT_EQ(0, offset.x()); | 1314 EXPECT_EQ(0, offset.x()); |
1312 | 1315 |
1313 // Check explicitly setting the horizontal alignment. | 1316 // Check explicitly setting the horizontal alignment. |
1314 render_text->SetHorizontalAlignment(ALIGN_LEFT); | 1317 render_text->SetHorizontalAlignment(ALIGN_LEFT); |
1315 offset = render_text->GetLineOffset(0); | 1318 offset = render_text->GetLineOffset(0); |
1316 EXPECT_EQ(0, offset.x()); | 1319 EXPECT_EQ(0, offset.x()); |
1317 render_text->SetHorizontalAlignment(ALIGN_CENTER); | 1320 render_text->SetHorizontalAlignment(ALIGN_CENTER); |
1318 offset = render_text->GetLineOffset(0); | 1321 offset = render_text->GetLineOffset(0); |
1319 EXPECT_EQ(kEnlargement / 2, offset.x()); | 1322 EXPECT_EQ(kEnlargementX / 2, offset.x()); |
1320 render_text->SetHorizontalAlignment(ALIGN_RIGHT); | 1323 render_text->SetHorizontalAlignment(ALIGN_RIGHT); |
1321 offset = render_text->GetLineOffset(0); | 1324 offset = render_text->GetLineOffset(0); |
1322 EXPECT_EQ(kEnlargement, offset.x()); | 1325 EXPECT_EQ(kEnlargementX, offset.x()); |
1323 | 1326 |
1324 // Check explicitly setting the vertical alignment. | 1327 // Check that text is vertically centered within taller display rects. |
1325 render_text->SetVerticalAlignment(ALIGN_TOP); | 1328 const int kEnlargementY = display_rect.height(); |
| 1329 display_rect.Inset(0, 0, 0, -kEnlargementY); |
| 1330 render_text->SetDisplayRect(display_rect); |
| 1331 const Vector2d prev_offset = render_text->GetLineOffset(0); |
| 1332 display_rect.Inset(0, 0, 0, -2 * kEnlargementY); |
| 1333 render_text->SetDisplayRect(display_rect); |
1326 offset = render_text->GetLineOffset(0); | 1334 offset = render_text->GetLineOffset(0); |
1327 EXPECT_EQ(0, offset.y()); | 1335 EXPECT_EQ(prev_offset.y() + kEnlargementY, offset.y()); |
1328 render_text->SetVerticalAlignment(ALIGN_VCENTER); | |
1329 offset = render_text->GetLineOffset(0); | |
1330 EXPECT_EQ(kEnlargement / 2, offset.y()); | |
1331 render_text->SetVerticalAlignment(ALIGN_BOTTOM); | |
1332 offset = render_text->GetLineOffset(0); | |
1333 EXPECT_EQ(kEnlargement, offset.y()); | |
1334 | 1336 |
1335 SetRTL(was_rtl); | 1337 SetRTL(was_rtl); |
1336 } | 1338 } |
1337 | 1339 |
1338 TEST_F(RenderTextTest, GetTextOffsetHorizontalDefaultInRTL) { | 1340 TEST_F(RenderTextTest, GetTextOffsetHorizontalDefaultInRTL) { |
1339 // This only checks the default horizontal alignment in RTL mode; all other | 1341 // This only checks the default horizontal alignment in RTL mode; all other |
1340 // GetLineOffset(0) attributes are checked by the test above. | 1342 // GetLineOffset(0) attributes are checked by the test above. |
1341 const bool was_rtl = base::i18n::IsRTL(); | 1343 const bool was_rtl = base::i18n::IsRTL(); |
1342 SetRTL(true); | 1344 SetRTL(true); |
1343 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1345 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1722 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { | 1724 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
1723 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); | 1725 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); |
1724 render_text->SetText(WideToUTF16(kTestStrings[i])); | 1726 render_text->SetText(WideToUTF16(kTestStrings[i])); |
1725 render_text->Draw(&canvas); | 1727 render_text->Draw(&canvas); |
1726 EXPECT_EQ(1U, render_text->lines_.size()); | 1728 EXPECT_EQ(1U, render_text->lines_.size()); |
1727 } | 1729 } |
1728 } | 1730 } |
1729 #endif // defined(OS_WIN) | 1731 #endif // defined(OS_WIN) |
1730 | 1732 |
1731 } // namespace gfx | 1733 } // namespace gfx |
OLD | NEW |