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/i18n/break_iterator.h" | 10 #include "base/i18n/break_iterator.h" |
(...skipping 1357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1368 render_text->SetDisplayRect(Rect(0, 0, 0, font_list.GetHeight())); | 1368 render_text->SetDisplayRect(Rect(0, 0, 0, font_list.GetHeight())); |
1369 | 1369 |
1370 // The empty string respects FontList metrics for non-zero height | 1370 // The empty string respects FontList metrics for non-zero height |
1371 // and baseline. | 1371 // and baseline. |
1372 render_text->SetText(base::string16()); | 1372 render_text->SetText(base::string16()); |
1373 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); | 1373 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); |
1374 EXPECT_EQ(0, render_text->GetStringSize().width()); | 1374 EXPECT_EQ(0, render_text->GetStringSize().width()); |
1375 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); | 1375 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); |
1376 | 1376 |
1377 render_text->SetText(UTF8ToUTF16(" ")); | 1377 render_text->SetText(UTF8ToUTF16(" ")); |
1378 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); | 1378 // If the text is not empty, |render_text|'s height could be slightly bigger |
msw
2015/02/26 00:47:21
nit: // |render_text| may be taller than the fon
| |
1379 // than the font height because the font height is calculated for the distance | |
1380 // between the ascent and descent while |render_text| height is computed from | |
1381 // the top and the bottom. | |
1382 EXPECT_LE(font_list.GetHeight(), render_text->GetStringSize().height()); | |
1379 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); | 1383 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); |
1380 } | 1384 } |
1381 #endif // !defined(OS_MACOSX) | 1385 #endif // !defined(OS_MACOSX) |
1382 | 1386 |
1383 TEST_F(RenderTextTest, StringSizeRespectsFontListMetrics) { | 1387 TEST_F(RenderTextTest, StringSizeRespectsFontListMetrics) { |
1384 // Check that Arial and Symbol have different font metrics. | 1388 // Check that Arial and Symbol have different font metrics. |
1385 Font arial_font("Arial", 16); | 1389 Font arial_font("Arial", 16); |
1386 ASSERT_EQ("arial", | 1390 ASSERT_EQ("arial", |
1387 base::StringToLowerASCII(arial_font.GetActualFontNameForTesting())); | 1391 base::StringToLowerASCII(arial_font.GetActualFontNameForTesting())); |
1388 Font symbol_font("Symbol", 16); | 1392 Font symbol_font("Symbol", 16); |
(...skipping 19 matching lines...) Expand all Loading... | |
1408 } | 1412 } |
1409 ASSERT_LT(smaller_font.GetHeight(), larger_font.GetHeight()); | 1413 ASSERT_LT(smaller_font.GetHeight(), larger_font.GetHeight()); |
1410 ASSERT_LT(smaller_font.GetBaseline(), larger_font.GetBaseline()); | 1414 ASSERT_LT(smaller_font.GetBaseline(), larger_font.GetBaseline()); |
1411 | 1415 |
1412 // Check |smaller_font_text| is rendered with the smaller font. | 1416 // Check |smaller_font_text| is rendered with the smaller font. |
1413 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1417 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1414 render_text->SetText(UTF8ToUTF16(smaller_font_text)); | 1418 render_text->SetText(UTF8ToUTF16(smaller_font_text)); |
1415 render_text->SetFontList(FontList(smaller_font)); | 1419 render_text->SetFontList(FontList(smaller_font)); |
1416 render_text->SetDisplayRect(Rect(0, 0, 0, | 1420 render_text->SetDisplayRect(Rect(0, 0, 0, |
1417 render_text->font_list().GetHeight())); | 1421 render_text->font_list().GetHeight())); |
1418 EXPECT_EQ(smaller_font.GetHeight(), render_text->GetStringSize().height()); | 1422 // |render_text| height may not be exactly same to |smaller_font|'s height |
msw
2015/02/26 00:47:21
nit: // |render_text| may be taller than the fon
| |
1423 // considering the gap between the top and the ascent. | |
1424 // See http://crbug.com/459812 | |
1425 EXPECT_LE(smaller_font.GetHeight(), render_text->GetStringSize().height()); | |
1419 EXPECT_EQ(smaller_font.GetBaseline(), render_text->GetBaseline()); | 1426 EXPECT_EQ(smaller_font.GetBaseline(), render_text->GetBaseline()); |
1420 | 1427 |
1421 // Layout the same text with mixed fonts. The text should be rendered with | 1428 // Layout the same text with mixed fonts. The text should be rendered with |
1422 // the smaller font, but the height and baseline are determined with the | 1429 // the smaller font, but the height and baseline are determined with the |
1423 // metrics of the font list, which is equal to the larger font. | 1430 // metrics of the font list, which is equal to the larger font. |
1424 std::vector<Font> fonts; | 1431 std::vector<Font> fonts; |
1425 fonts.push_back(smaller_font); // The primary font is the smaller font. | 1432 fonts.push_back(smaller_font); // The primary font is the smaller font. |
1426 fonts.push_back(larger_font); | 1433 fonts.push_back(larger_font); |
1427 const FontList font_list(fonts); | 1434 const FontList font_list(fonts); |
1428 render_text->SetFontList(font_list); | 1435 render_text->SetFontList(font_list); |
1429 render_text->SetDisplayRect(Rect(0, 0, 0, | 1436 render_text->SetDisplayRect(Rect(0, 0, 0, |
1430 render_text->font_list().GetHeight())); | 1437 render_text->font_list().GetHeight())); |
1431 EXPECT_LT(smaller_font.GetHeight(), render_text->GetStringSize().height()); | 1438 EXPECT_LT(smaller_font.GetHeight(), render_text->GetStringSize().height()); |
1432 EXPECT_LT(smaller_font.GetBaseline(), render_text->GetBaseline()); | 1439 EXPECT_LT(smaller_font.GetBaseline(), render_text->GetBaseline()); |
1433 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); | 1440 // Again, it could be slightly different from font's height, see above. |
msw
2015/02/26 00:47:21
nit: // |render_text| may be taller than the font
| |
1441 EXPECT_LE(font_list.GetHeight(), render_text->GetStringSize().height()); | |
1434 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); | 1442 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); |
1435 } | 1443 } |
1436 | 1444 |
1437 TEST_F(RenderTextTest, MinLineHeight) { | 1445 TEST_F(RenderTextTest, MinLineHeight) { |
1438 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1446 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1439 | 1447 |
1440 render_text->SetText(ASCIIToUTF16("Hello!")); | 1448 render_text->SetText(ASCIIToUTF16("Hello!")); |
1441 SizeF default_size = render_text->GetStringSizeF(); | 1449 SizeF default_size = render_text->GetStringSizeF(); |
1442 ASSERT_NE(0, default_size.height()); | 1450 ASSERT_NE(0, default_size.height()); |
1443 ASSERT_NE(0, default_size.width()); | 1451 ASSERT_NE(0, default_size.width()); |
1444 | 1452 |
1445 render_text->SetMinLineHeight(default_size.height() / 2); | 1453 render_text->SetMinLineHeight(default_size.height() / 2); |
1446 EXPECT_EQ(default_size.ToString(), render_text->GetStringSizeF().ToString()); | 1454 EXPECT_EQ(default_size.ToString(), render_text->GetStringSizeF().ToString()); |
1447 | 1455 |
1448 render_text->SetMinLineHeight(default_size.height() * 2); | 1456 render_text->SetMinLineHeight(default_size.height() * 2); |
1449 SizeF taller_size = render_text->GetStringSizeF(); | 1457 SizeF taller_size = render_text->GetStringSizeF(); |
1450 EXPECT_EQ(default_size.height() * 2, taller_size.height()); | 1458 EXPECT_LT(default_size.height(), taller_size.height()); |
1451 EXPECT_EQ(default_size.width(), taller_size.width()); | 1459 EXPECT_EQ(default_size.width(), taller_size.width()); |
1452 } | 1460 } |
1453 | 1461 |
1454 TEST_F(RenderTextTest, SetFontList) { | 1462 TEST_F(RenderTextTest, SetFontList) { |
1455 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1463 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1456 render_text->SetFontList(FontList("Arial,Symbol, 13px")); | 1464 render_text->SetFontList(FontList("Arial,Symbol, 13px")); |
1457 const std::vector<Font>& fonts = render_text->font_list().GetFonts(); | 1465 const std::vector<Font>& fonts = render_text->font_list().GetFonts(); |
1458 ASSERT_EQ(2U, fonts.size()); | 1466 ASSERT_EQ(2U, fonts.size()); |
1459 EXPECT_EQ("Arial", fonts[0].GetFontName()); | 1467 EXPECT_EQ("Arial", fonts[0].GetFontName()); |
1460 EXPECT_EQ("Symbol", fonts[1].GetFontName()); | 1468 EXPECT_EQ("Symbol", fonts[1].GetFontName()); |
(...skipping 1141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2602 EXPECT_LT(220U, color_utils::GetLuminanceForColor(color)) << string; | 2610 EXPECT_LT(220U, color_utils::GetLuminanceForColor(color)) << string; |
2603 for (int x = 1; x < kTestWidth; ++x) { | 2611 for (int x = 1; x < kTestWidth; ++x) { |
2604 color = buffer[width + x + y * kCanvasSize.width()]; | 2612 color = buffer[width + x + y * kCanvasSize.width()]; |
2605 EXPECT_EQ(SK_ColorWHITE, color) << string; | 2613 EXPECT_EQ(SK_ColorWHITE, color) << string; |
2606 } | 2614 } |
2607 } | 2615 } |
2608 } | 2616 } |
2609 } | 2617 } |
2610 | 2618 |
2611 } // namespace gfx | 2619 } // namespace gfx |
OLD | NEW |