| 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 <limits.h> | 7 #include <limits.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 render_text->SetText(WideToUTF16(cases[i])); | 319 render_text->SetText(WideToUTF16(cases[i])); |
| 320 } | 320 } |
| 321 } | 321 } |
| 322 | 322 |
| 323 TEST_F(RenderTextTest, SetStyles) { | 323 TEST_F(RenderTextTest, SetStyles) { |
| 324 // Ensure custom default styles persist across setting and clearing text. | 324 // Ensure custom default styles persist across setting and clearing text. |
| 325 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); | 325 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| 326 const SkColor color = SK_ColorRED; | 326 const SkColor color = SK_ColorRED; |
| 327 render_text->SetColor(color); | 327 render_text->SetColor(color); |
| 328 render_text->SetBaselineStyle(SUPERSCRIPT); | 328 render_text->SetBaselineStyle(SUPERSCRIPT); |
| 329 render_text->SetStyle(BOLD, true); | 329 render_text->SetWeight(Font::Weight::BOLD); |
| 330 render_text->SetStyle(UNDERLINE, false); | 330 render_text->SetStyle(UNDERLINE, false); |
| 331 const wchar_t* const cases[] = { kWeak, kLtr, L"Hello", kRtl, L"", L"" }; | 331 const wchar_t* const cases[] = { kWeak, kLtr, L"Hello", kRtl, L"", L"" }; |
| 332 for (size_t i = 0; i < arraysize(cases); ++i) { | 332 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 333 EXPECT_TRUE(render_text->colors().EqualsValueForTesting(color)); | 333 EXPECT_TRUE(render_text->colors().EqualsValueForTesting(color)); |
| 334 EXPECT_TRUE(render_text->baselines().EqualsValueForTesting(SUPERSCRIPT)); | 334 EXPECT_TRUE(render_text->baselines().EqualsValueForTesting(SUPERSCRIPT)); |
| 335 EXPECT_TRUE(render_text->styles()[BOLD].EqualsValueForTesting(true)); | 335 EXPECT_TRUE( |
| 336 render_text->weights().EqualsValueForTesting(Font::Weight::BOLD)); |
| 336 EXPECT_TRUE(render_text->styles()[UNDERLINE].EqualsValueForTesting(false)); | 337 EXPECT_TRUE(render_text->styles()[UNDERLINE].EqualsValueForTesting(false)); |
| 337 render_text->SetText(WideToUTF16(cases[i])); | 338 render_text->SetText(WideToUTF16(cases[i])); |
| 338 | 339 |
| 339 // Ensure custom default styles can be applied after text has been set. | 340 // Ensure custom default styles can be applied after text has been set. |
| 340 if (i == 1) | 341 if (i == 1) |
| 341 render_text->SetStyle(STRIKE, true); | 342 render_text->SetStyle(STRIKE, true); |
| 342 if (i >= 1) | 343 if (i >= 1) |
| 343 EXPECT_TRUE(render_text->styles()[STRIKE].EqualsValueForTesting(true)); | 344 EXPECT_TRUE(render_text->styles()[STRIKE].EqualsValueForTesting(true)); |
| 344 } | 345 } |
| 345 } | 346 } |
| 346 | 347 |
| 347 TEST_F(RenderTextTest, ApplyStyles) { | 348 TEST_F(RenderTextTest, ApplyStyles) { |
| 348 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); | 349 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| 349 render_text->SetText(ASCIIToUTF16("012345678")); | 350 render_text->SetText(ASCIIToUTF16("012345678")); |
| 350 | 351 |
| 351 // Apply a ranged color and style and check the resulting breaks. | 352 // Apply a ranged color and style and check the resulting breaks. |
| 352 render_text->ApplyColor(SK_ColorRED, Range(1, 4)); | 353 render_text->ApplyColor(SK_ColorRED, Range(1, 4)); |
| 353 render_text->ApplyBaselineStyle(SUPERIOR, Range(2, 4)); | 354 render_text->ApplyBaselineStyle(SUPERIOR, Range(2, 4)); |
| 354 render_text->ApplyStyle(BOLD, true, Range(2, 5)); | 355 render_text->ApplyWeight(Font::Weight::BOLD, Range(2, 5)); |
| 355 std::vector<std::pair<size_t, SkColor> > expected_color; | 356 std::vector<std::pair<size_t, SkColor> > expected_color; |
| 356 expected_color.push_back(std::pair<size_t, SkColor>(0, SK_ColorBLACK)); | 357 expected_color.push_back(std::pair<size_t, SkColor>(0, SK_ColorBLACK)); |
| 357 expected_color.push_back(std::pair<size_t, SkColor>(1, SK_ColorRED)); | 358 expected_color.push_back(std::pair<size_t, SkColor>(1, SK_ColorRED)); |
| 358 expected_color.push_back(std::pair<size_t, SkColor>(4, SK_ColorBLACK)); | 359 expected_color.push_back(std::pair<size_t, SkColor>(4, SK_ColorBLACK)); |
| 359 EXPECT_TRUE(render_text->colors().EqualsForTesting(expected_color)); | 360 EXPECT_TRUE(render_text->colors().EqualsForTesting(expected_color)); |
| 360 std::vector<std::pair<size_t, BaselineStyle>> expected_baseline_style; | 361 std::vector<std::pair<size_t, BaselineStyle>> expected_baseline_style; |
| 361 expected_baseline_style.push_back( | 362 expected_baseline_style.push_back( |
| 362 std::pair<size_t, BaselineStyle>(0, NORMAL_BASELINE)); | 363 std::pair<size_t, BaselineStyle>(0, NORMAL_BASELINE)); |
| 363 expected_baseline_style.push_back( | 364 expected_baseline_style.push_back( |
| 364 std::pair<size_t, BaselineStyle>(2, SUPERIOR)); | 365 std::pair<size_t, BaselineStyle>(2, SUPERIOR)); |
| 365 expected_baseline_style.push_back( | 366 expected_baseline_style.push_back( |
| 366 std::pair<size_t, BaselineStyle>(4, NORMAL_BASELINE)); | 367 std::pair<size_t, BaselineStyle>(4, NORMAL_BASELINE)); |
| 367 EXPECT_TRUE( | 368 EXPECT_TRUE( |
| 368 render_text->baselines().EqualsForTesting(expected_baseline_style)); | 369 render_text->baselines().EqualsForTesting(expected_baseline_style)); |
| 369 std::vector<std::pair<size_t, bool> > expected_style; | 370 std::vector<std::pair<size_t, Font::Weight>> expected_weight; |
| 370 expected_style.push_back(std::pair<size_t, bool>(0, false)); | 371 expected_weight.push_back( |
| 371 expected_style.push_back(std::pair<size_t, bool>(2, true)); | 372 std::pair<size_t, Font::Weight>(0, Font::Weight::NORMAL)); |
| 372 expected_style.push_back(std::pair<size_t, bool>(5, false)); | 373 expected_weight.push_back( |
| 373 EXPECT_TRUE(render_text->styles()[BOLD].EqualsForTesting(expected_style)); | 374 std::pair<size_t, Font::Weight>(2, Font::Weight::BOLD)); |
| 375 expected_weight.push_back( |
| 376 std::pair<size_t, Font::Weight>(5, Font::Weight::NORMAL)); |
| 377 EXPECT_TRUE(render_text->weights().EqualsForTesting(expected_weight)); |
| 374 | 378 |
| 375 // Ensure that setting a value overrides the ranged values. | 379 // Ensure that setting a value overrides the ranged values. |
| 376 render_text->SetColor(SK_ColorBLUE); | 380 render_text->SetColor(SK_ColorBLUE); |
| 377 EXPECT_TRUE(render_text->colors().EqualsValueForTesting(SK_ColorBLUE)); | 381 EXPECT_TRUE(render_text->colors().EqualsValueForTesting(SK_ColorBLUE)); |
| 378 render_text->SetBaselineStyle(SUBSCRIPT); | 382 render_text->SetBaselineStyle(SUBSCRIPT); |
| 379 EXPECT_TRUE(render_text->baselines().EqualsValueForTesting(SUBSCRIPT)); | 383 EXPECT_TRUE(render_text->baselines().EqualsValueForTesting(SUBSCRIPT)); |
| 380 render_text->SetStyle(BOLD, false); | 384 render_text->SetWeight(Font::Weight::NORMAL); |
| 381 EXPECT_TRUE(render_text->styles()[BOLD].EqualsValueForTesting(false)); | 385 EXPECT_TRUE( |
| 386 render_text->weights().EqualsValueForTesting(Font::Weight::NORMAL)); |
| 382 | 387 |
| 383 // Apply a value over the text end and check the resulting breaks (INT_MAX | 388 // Apply a value over the text end and check the resulting breaks (INT_MAX |
| 384 // should be used instead of the text length for the range end) | 389 // should be used instead of the text length for the range end) |
| 385 const size_t text_length = render_text->text().length(); | 390 const size_t text_length = render_text->text().length(); |
| 386 render_text->ApplyColor(SK_ColorRED, Range(0, text_length)); | 391 render_text->ApplyColor(SK_ColorRED, Range(0, text_length)); |
| 387 render_text->ApplyBaselineStyle(SUPERIOR, Range(0, text_length)); | 392 render_text->ApplyBaselineStyle(SUPERIOR, Range(0, text_length)); |
| 388 render_text->ApplyStyle(BOLD, true, Range(2, text_length)); | 393 render_text->ApplyWeight(Font::Weight::BOLD, Range(2, text_length)); |
| 389 std::vector<std::pair<size_t, SkColor> > expected_color_end; | 394 std::vector<std::pair<size_t, SkColor> > expected_color_end; |
| 390 expected_color_end.push_back(std::pair<size_t, SkColor>(0, SK_ColorRED)); | 395 expected_color_end.push_back(std::pair<size_t, SkColor>(0, SK_ColorRED)); |
| 391 EXPECT_TRUE(render_text->colors().EqualsForTesting(expected_color_end)); | 396 EXPECT_TRUE(render_text->colors().EqualsForTesting(expected_color_end)); |
| 392 std::vector<std::pair<size_t, BaselineStyle>> expected_baseline_end; | 397 std::vector<std::pair<size_t, BaselineStyle>> expected_baseline_end; |
| 393 expected_baseline_end.push_back( | 398 expected_baseline_end.push_back( |
| 394 std::pair<size_t, BaselineStyle>(0, SUPERIOR)); | 399 std::pair<size_t, BaselineStyle>(0, SUPERIOR)); |
| 395 EXPECT_TRUE(render_text->baselines().EqualsForTesting(expected_baseline_end)); | 400 EXPECT_TRUE(render_text->baselines().EqualsForTesting(expected_baseline_end)); |
| 396 std::vector<std::pair<size_t, bool> > expected_style_end; | 401 std::vector<std::pair<size_t, Font::Weight>> expected_weight_end; |
| 397 expected_style_end.push_back(std::pair<size_t, bool>(0, false)); | 402 expected_weight_end.push_back( |
| 398 expected_style_end.push_back(std::pair<size_t, bool>(2, true)); | 403 std::pair<size_t, Font::Weight>(0, Font::Weight::NORMAL)); |
| 399 EXPECT_TRUE(render_text->styles()[BOLD].EqualsForTesting(expected_style_end)); | 404 expected_weight_end.push_back( |
| 405 std::pair<size_t, Font::Weight>(2, Font::Weight::BOLD)); |
| 406 EXPECT_TRUE(render_text->weights().EqualsForTesting(expected_weight_end)); |
| 400 | 407 |
| 401 // Ensure ranged values adjust to accommodate text length changes. | 408 // Ensure ranged values adjust to accommodate text length changes. |
| 402 render_text->ApplyStyle(ITALIC, true, Range(0, 2)); | 409 render_text->ApplyStyle(ITALIC, true, Range(0, 2)); |
| 403 render_text->ApplyStyle(ITALIC, true, Range(3, 6)); | 410 render_text->ApplyStyle(ITALIC, true, Range(3, 6)); |
| 404 render_text->ApplyStyle(ITALIC, true, Range(7, text_length)); | 411 render_text->ApplyStyle(ITALIC, true, Range(7, text_length)); |
| 405 std::vector<std::pair<size_t, bool> > expected_italic; | 412 std::vector<std::pair<size_t, bool> > expected_italic; |
| 406 expected_italic.push_back(std::pair<size_t, bool>(0, true)); | 413 expected_italic.push_back(std::pair<size_t, bool>(0, true)); |
| 407 expected_italic.push_back(std::pair<size_t, bool>(2, false)); | 414 expected_italic.push_back(std::pair<size_t, bool>(2, false)); |
| 408 expected_italic.push_back(std::pair<size_t, bool>(3, true)); | 415 expected_italic.push_back(std::pair<size_t, bool>(3, true)); |
| 409 expected_italic.push_back(std::pair<size_t, bool>(6, false)); | 416 expected_italic.push_back(std::pair<size_t, bool>(6, false)); |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 746 TEST_F(RenderTextTest, MultilineElide) { | 753 TEST_F(RenderTextTest, MultilineElide) { |
| 747 std::unique_ptr<RenderText> render_text(new RenderTextHarfBuzz); | 754 std::unique_ptr<RenderText> render_text(new RenderTextHarfBuzz); |
| 748 base::string16 input_text; | 755 base::string16 input_text; |
| 749 // Aim for 3 lines of text. | 756 // Aim for 3 lines of text. |
| 750 for (int i = 0; i < 20; ++i) | 757 for (int i = 0; i < 20; ++i) |
| 751 input_text.append(ASCIIToUTF16("hello world ")); | 758 input_text.append(ASCIIToUTF16("hello world ")); |
| 752 render_text->SetText(input_text); | 759 render_text->SetText(input_text); |
| 753 // Apply a style that tweaks the layout to make sure elision is calculated | 760 // Apply a style that tweaks the layout to make sure elision is calculated |
| 754 // with these styles. This can expose a behavior in layout where text is | 761 // with these styles. This can expose a behavior in layout where text is |
| 755 // slightly different width. This must be done after |SetText()|. | 762 // slightly different width. This must be done after |SetText()|. |
| 756 render_text->ApplyStyle(gfx::BOLD, true, gfx::Range(1, 20)); | 763 render_text->ApplyWeight(Font::Weight::BOLD, Range(1, 20)); |
| 757 render_text->ApplyStyle(gfx::ITALIC, true, gfx::Range(1, 20)); | 764 render_text->ApplyStyle(ITALIC, true, Range(1, 20)); |
| 758 render_text->ApplyStyle(gfx::DIAGONAL_STRIKE, true, gfx::Range(1, 20)); | 765 render_text->ApplyStyle(DIAGONAL_STRIKE, true, Range(1, 20)); |
| 759 render_text->SetMultiline(true); | 766 render_text->SetMultiline(true); |
| 760 render_text->SetElideBehavior(ELIDE_TAIL); | 767 render_text->SetElideBehavior(ELIDE_TAIL); |
| 761 render_text->SetMaxLines(3); | 768 render_text->SetMaxLines(3); |
| 762 const gfx::Size size = render_text->GetStringSize(); | 769 const Size size = render_text->GetStringSize(); |
| 763 // Fit in 3 lines. (If we knew the width of a word, we could | 770 // Fit in 3 lines. (If we knew the width of a word, we could |
| 764 // anticipate word wrap better.) | 771 // anticipate word wrap better.) |
| 765 render_text->SetDisplayRect(gfx::Rect((size.width() + 96) / 3, 0)); | 772 render_text->SetDisplayRect(Rect((size.width() + 96) / 3, 0)); |
| 766 // Trigger rendering. | 773 // Trigger rendering. |
| 767 render_text->GetStringSize(); | 774 render_text->GetStringSize(); |
| 768 EXPECT_EQ(input_text, render_text->GetDisplayText()); | 775 EXPECT_EQ(input_text, render_text->GetDisplayText()); |
| 769 | 776 |
| 770 const base::char16 kEllipsisUTF16[] = {0x2026, 0}; | 777 const base::char16 kEllipsisUTF16[] = {0x2026, 0}; |
| 771 base::string16 actual_text; | 778 base::string16 actual_text; |
| 772 // Try widening the space gradually, one pixel at a time, trying | 779 // Try widening the space gradually, one pixel at a time, trying |
| 773 // to trigger a failure in layout. There was an issue where, right at | 780 // to trigger a failure in layout. There was an issue where, right at |
| 774 // the edge of a word getting truncated, the estimate would be wrong | 781 // the edge of a word getting truncated, the estimate would be wrong |
| 775 // and it would wrap instead. | 782 // and it would wrap instead. |
| 776 for (int i = (size.width() - 12) / 3; i < (size.width() + 30) / 3; ++i) { | 783 for (int i = (size.width() - 12) / 3; i < (size.width() + 30) / 3; ++i) { |
| 777 render_text->SetDisplayRect(gfx::Rect(i, 0)); | 784 render_text->SetDisplayRect(Rect(i, 0)); |
| 778 // Trigger rendering. | 785 // Trigger rendering. |
| 779 render_text->GetStringSize(); | 786 render_text->GetStringSize(); |
| 780 actual_text = render_text->GetDisplayText(); | 787 actual_text = render_text->GetDisplayText(); |
| 781 EXPECT_LT(actual_text.size(), input_text.size()); | 788 EXPECT_LT(actual_text.size(), input_text.size()); |
| 782 EXPECT_EQ(actual_text, input_text.substr(0, actual_text.size() - 1) + | 789 EXPECT_EQ(actual_text, input_text.substr(0, actual_text.size() - 1) + |
| 783 base::string16(kEllipsisUTF16)); | 790 base::string16(kEllipsisUTF16)); |
| 784 EXPECT_EQ(3U, render_text->GetNumLines()); | 791 EXPECT_EQ(3U, render_text->GetNumLines()); |
| 785 } | 792 } |
| 786 // Now remove line restriction. | 793 // Now remove line restriction. |
| 787 render_text->SetMaxLines(0); | 794 render_text->SetMaxLines(0); |
| 788 render_text->GetStringSize(); | 795 render_text->GetStringSize(); |
| 789 EXPECT_EQ(input_text, render_text->GetDisplayText()); | 796 EXPECT_EQ(input_text, render_text->GetDisplayText()); |
| 790 | 797 |
| 791 // And put it back. | 798 // And put it back. |
| 792 render_text->SetMaxLines(3); | 799 render_text->SetMaxLines(3); |
| 793 render_text->GetStringSize(); | 800 render_text->GetStringSize(); |
| 794 EXPECT_LT(actual_text.size(), input_text.size()); | 801 EXPECT_LT(actual_text.size(), input_text.size()); |
| 795 EXPECT_EQ(actual_text, input_text.substr(0, actual_text.size() - 1) + | 802 EXPECT_EQ(actual_text, input_text.substr(0, actual_text.size() - 1) + |
| 796 base::string16(kEllipsisUTF16)); | 803 base::string16(kEllipsisUTF16)); |
| 797 } | 804 } |
| 798 | 805 |
| 799 #endif // !defined(OS_MACOSX) | 806 #endif // !defined(OS_MACOSX) |
| 800 | 807 |
| 801 TEST_F(RenderTextTest, ElidedEmail) { | 808 TEST_F(RenderTextTest, ElidedEmail) { |
| 802 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); | 809 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| 803 render_text->SetText(ASCIIToUTF16("test@example.com")); | 810 render_text->SetText(ASCIIToUTF16("test@example.com")); |
| 804 const gfx::Size size = render_text->GetStringSize(); | 811 const Size size = render_text->GetStringSize(); |
| 805 | 812 |
| 806 const base::string16 long_email = | 813 const base::string16 long_email = |
| 807 ASCIIToUTF16("longemailaddresstest@example.com"); | 814 ASCIIToUTF16("longemailaddresstest@example.com"); |
| 808 render_text->SetText(long_email); | 815 render_text->SetText(long_email); |
| 809 render_text->SetElideBehavior(ELIDE_EMAIL); | 816 render_text->SetElideBehavior(ELIDE_EMAIL); |
| 810 render_text->SetDisplayRect(gfx::Rect(size)); | 817 render_text->SetDisplayRect(Rect(size)); |
| 811 EXPECT_GE(size.width(), render_text->GetStringSize().width()); | 818 EXPECT_GE(size.width(), render_text->GetStringSize().width()); |
| 812 EXPECT_GT(long_email.size(), render_text->GetDisplayText().size()); | 819 EXPECT_GT(long_email.size(), render_text->GetDisplayText().size()); |
| 813 } | 820 } |
| 814 | 821 |
| 815 TEST_F(RenderTextTest, TruncatedText) { | 822 TEST_F(RenderTextTest, TruncatedText) { |
| 816 struct { | 823 struct { |
| 817 const wchar_t* text; | 824 const wchar_t* text; |
| 818 const wchar_t* display_text; | 825 const wchar_t* display_text; |
| 819 } cases[] = { | 826 } cases[] = { |
| 820 // Strings shorter than the truncation length should be laid out in full. | 827 // Strings shorter than the truncation length should be laid out in full. |
| (...skipping 909 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1730 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1737 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| 1731 render_text->SetFontList(FontList("Arial,Symbol, 13px")); | 1738 render_text->SetFontList(FontList("Arial,Symbol, 13px")); |
| 1732 const std::vector<Font>& fonts = render_text->font_list().GetFonts(); | 1739 const std::vector<Font>& fonts = render_text->font_list().GetFonts(); |
| 1733 ASSERT_EQ(2U, fonts.size()); | 1740 ASSERT_EQ(2U, fonts.size()); |
| 1734 EXPECT_EQ("Arial", fonts[0].GetFontName()); | 1741 EXPECT_EQ("Arial", fonts[0].GetFontName()); |
| 1735 EXPECT_EQ("Symbol", fonts[1].GetFontName()); | 1742 EXPECT_EQ("Symbol", fonts[1].GetFontName()); |
| 1736 EXPECT_EQ(13, render_text->font_list().GetFontSize()); | 1743 EXPECT_EQ(13, render_text->font_list().GetFontSize()); |
| 1737 } | 1744 } |
| 1738 | 1745 |
| 1739 TEST_F(RenderTextTest, StringSizeBoldWidth) { | 1746 TEST_F(RenderTextTest, StringSizeBoldWidth) { |
| 1747 // TODO(mboc): Add some unittests for other weights (currently not |
| 1748 // implemented because of test system font configuration). |
| 1740 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1749 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| 1741 render_text->SetText(UTF8ToUTF16("Hello World")); | 1750 render_text->SetText(UTF8ToUTF16("Hello World")); |
| 1742 | 1751 |
| 1743 const int plain_width = render_text->GetStringSize().width(); | 1752 const int plain_width = render_text->GetStringSize().width(); |
| 1744 EXPECT_GT(plain_width, 0); | 1753 EXPECT_GT(plain_width, 0); |
| 1745 | 1754 |
| 1746 // Apply a bold style and check that the new width is greater. | 1755 // Apply a bold style and check that the new width is greater. |
| 1747 render_text->SetStyle(BOLD, true); | 1756 render_text->SetWeight(Font::Weight::BOLD); |
| 1748 const int bold_width = render_text->GetStringSize().width(); | 1757 const int bold_width = render_text->GetStringSize().width(); |
| 1749 EXPECT_GT(bold_width, plain_width); | 1758 EXPECT_GT(bold_width, plain_width); |
| 1750 | 1759 |
| 1760 #if defined(OS_WIN) |
| 1761 render_text->SetWeight(Font::Weight::SEMIBOLD); |
| 1762 const int semibold_width = render_text->GetStringSize().width(); |
| 1763 EXPECT_GT(bold_width, semibold_width); |
| 1764 #endif |
| 1765 |
| 1751 // Now, apply a plain style over the first word only. | 1766 // Now, apply a plain style over the first word only. |
| 1752 render_text->ApplyStyle(BOLD, false, Range(0, 5)); | 1767 render_text->ApplyWeight(Font::Weight::NORMAL, Range(0, 5)); |
| 1753 const int plain_bold_width = render_text->GetStringSize().width(); | 1768 const int plain_bold_width = render_text->GetStringSize().width(); |
| 1754 EXPECT_GT(plain_bold_width, plain_width); | 1769 EXPECT_GT(plain_bold_width, plain_width); |
| 1755 EXPECT_LT(plain_bold_width, bold_width); | 1770 EXPECT_LT(plain_bold_width, bold_width); |
| 1756 } | 1771 } |
| 1757 | 1772 |
| 1758 TEST_F(RenderTextTest, StringSizeHeight) { | 1773 TEST_F(RenderTextTest, StringSizeHeight) { |
| 1759 base::string16 cases[] = { | 1774 base::string16 cases[] = { |
| 1760 WideToUTF16(L"Hello World!"), // English | 1775 WideToUTF16(L"Hello World!"), // English |
| 1761 WideToUTF16(L"\x6328\x62f6"), // Japanese | 1776 WideToUTF16(L"\x6328\x62f6"), // Japanese |
| 1762 WideToUTF16(L"\x0915\x093f"), // Hindi | 1777 WideToUTF16(L"\x0915\x093f"), // Hindi |
| (...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2424 // to the original text. | 2439 // to the original text. |
| 2425 render_text.SetMultiline(true); | 2440 render_text.SetMultiline(true); |
| 2426 EXPECT_EQ(WideToUTF16(kTestStrings[i]), render_text.GetDisplayText()); | 2441 EXPECT_EQ(WideToUTF16(kTestStrings[i]), render_text.GetDisplayText()); |
| 2427 } | 2442 } |
| 2428 } | 2443 } |
| 2429 | 2444 |
| 2430 // Ensure horizontal alignment works in multiline mode. | 2445 // Ensure horizontal alignment works in multiline mode. |
| 2431 TEST_F(RenderTextTest, Multiline_HorizontalAlignment) { | 2446 TEST_F(RenderTextTest, Multiline_HorizontalAlignment) { |
| 2432 const struct { | 2447 const struct { |
| 2433 const wchar_t* const text; | 2448 const wchar_t* const text; |
| 2434 const gfx::HorizontalAlignment alignment; | 2449 const HorizontalAlignment alignment; |
| 2435 } kTestStrings[] = { | 2450 } kTestStrings[] = { |
| 2436 { L"abcdefghij\nhijkl", gfx::ALIGN_LEFT }, | 2451 { L"abcdefghij\nhijkl", ALIGN_LEFT }, |
| 2437 { L"nhijkl\nabcdefghij", gfx::ALIGN_LEFT }, | 2452 { L"nhijkl\nabcdefghij", ALIGN_LEFT }, |
| 2438 // hebrew, 2nd line shorter | 2453 // hebrew, 2nd line shorter |
| 2439 { L"\x5d0\x5d1\x5d2\x5d3\x5d4\x5d5\x5d6\x5d7\n\x5d0\x5d1\x5d2\x5d3", | 2454 { L"\x5d0\x5d1\x5d2\x5d3\x5d4\x5d5\x5d6\x5d7\n\x5d0\x5d1\x5d2\x5d3", |
| 2440 gfx::ALIGN_RIGHT }, | 2455 ALIGN_RIGHT }, |
| 2441 // hebrew, 2nd line longer | 2456 // hebrew, 2nd line longer |
| 2442 { L"\x5d0\x5d1\x5d2\x5d3\n\x5d0\x5d1\x5d2\x5d3\x5d4\x5d5\x5d6\x5d7", | 2457 { L"\x5d0\x5d1\x5d2\x5d3\n\x5d0\x5d1\x5d2\x5d3\x5d4\x5d5\x5d6\x5d7", |
| 2443 gfx::ALIGN_RIGHT }, | 2458 ALIGN_RIGHT }, |
| 2444 // arabic, 2nd line shorter | 2459 // arabic, 2nd line shorter |
| 2445 { L"\x62a\x62b\x62c\x62d\x62e\x62f\x630\n\x660\x661\x662\x663\x664", | 2460 { L"\x62a\x62b\x62c\x62d\x62e\x62f\x630\n\x660\x661\x662\x663\x664", |
| 2446 gfx::ALIGN_RIGHT }, | 2461 ALIGN_RIGHT }, |
| 2447 // arabic, 2nd line longer | 2462 // arabic, 2nd line longer |
| 2448 { L"\x660\x661\x662\x663\x664\n\x62a\x62b\x62c\x62d\x62e\x62f\x630", | 2463 { L"\x660\x661\x662\x663\x664\n\x62a\x62b\x62c\x62d\x62e\x62f\x630", |
| 2449 gfx::ALIGN_RIGHT }, | 2464 ALIGN_RIGHT }, |
| 2450 }; | 2465 }; |
| 2451 const int kGlyphSize = 5; | 2466 const int kGlyphSize = 5; |
| 2452 RenderTextHarfBuzz render_text; | 2467 RenderTextHarfBuzz render_text; |
| 2453 render_text.SetHorizontalAlignment(gfx::ALIGN_TO_HEAD); | 2468 render_text.SetHorizontalAlignment(ALIGN_TO_HEAD); |
| 2454 render_text.set_glyph_width_for_test(kGlyphSize); | 2469 render_text.set_glyph_width_for_test(kGlyphSize); |
| 2455 render_text.SetDisplayRect(Rect(100, 1000)); | 2470 render_text.SetDisplayRect(Rect(100, 1000)); |
| 2456 render_text.SetMultiline(true); | 2471 render_text.SetMultiline(true); |
| 2457 | 2472 |
| 2458 Canvas canvas; | 2473 Canvas canvas; |
| 2459 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { | 2474 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
| 2460 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "] %ls", i, | 2475 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "] %ls", i, |
| 2461 kTestStrings[i].text)); | 2476 kTestStrings[i].text)); |
| 2462 render_text.SetText(WideToUTF16(kTestStrings[i].text)); | 2477 render_text.SetText(WideToUTF16(kTestStrings[i].text)); |
| 2463 render_text.Draw(&canvas); | 2478 render_text.Draw(&canvas); |
| 2464 ASSERT_LE(2u, render_text.lines().size()); | 2479 ASSERT_LE(2u, render_text.lines().size()); |
| 2465 if (kTestStrings[i].alignment == gfx::ALIGN_LEFT) { | 2480 if (kTestStrings[i].alignment == ALIGN_LEFT) { |
| 2466 EXPECT_EQ(0, render_text.GetAlignmentOffset(0).x()); | 2481 EXPECT_EQ(0, render_text.GetAlignmentOffset(0).x()); |
| 2467 EXPECT_EQ(0, render_text.GetAlignmentOffset(1).x()); | 2482 EXPECT_EQ(0, render_text.GetAlignmentOffset(1).x()); |
| 2468 } else { | 2483 } else { |
| 2469 std::vector<base::string16> lines = base::SplitString( | 2484 std::vector<base::string16> lines = base::SplitString( |
| 2470 base::WideToUTF16(kTestStrings[i].text), | 2485 base::WideToUTF16(kTestStrings[i].text), |
| 2471 base::string16(1, '\n'), base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); | 2486 base::string16(1, '\n'), base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
| 2472 ASSERT_EQ(2u, lines.size()); | 2487 ASSERT_EQ(2u, lines.size()); |
| 2473 int difference = (lines[0].length() - lines[1].length()) * kGlyphSize; | 2488 int difference = (lines[0].length() - lines[1].length()) * kGlyphSize; |
| 2474 EXPECT_EQ(render_text.GetAlignmentOffset(0).x() + difference, | 2489 EXPECT_EQ(render_text.GetAlignmentOffset(0).x() + difference, |
| 2475 render_text.GetAlignmentOffset(1).x()); | 2490 render_text.GetAlignmentOffset(1).x()); |
| (...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3022 EXPECT_EQ(Range(3, 8), chars); | 3037 EXPECT_EQ(Range(3, 8), chars); |
| 3023 EXPECT_EQ(Range(0, 0), glyphs); | 3038 EXPECT_EQ(Range(0, 0), glyphs); |
| 3024 } | 3039 } |
| 3025 | 3040 |
| 3026 // Ensure the line breaker doesn't compute the word's width bigger than the | 3041 // Ensure the line breaker doesn't compute the word's width bigger than the |
| 3027 // actual size. See http://crbug.com/470073 | 3042 // actual size. See http://crbug.com/470073 |
| 3028 TEST_F(RenderTextTest, HarfBuzz_WordWidthWithDiacritics) { | 3043 TEST_F(RenderTextTest, HarfBuzz_WordWidthWithDiacritics) { |
| 3029 RenderTextHarfBuzz render_text; | 3044 RenderTextHarfBuzz render_text; |
| 3030 const base::string16 kWord = WideToUTF16(L"\u0906\u092A\u0915\u0947 "); | 3045 const base::string16 kWord = WideToUTF16(L"\u0906\u092A\u0915\u0947 "); |
| 3031 render_text.SetText(kWord); | 3046 render_text.SetText(kWord); |
| 3032 const gfx::SizeF text_size = render_text.GetStringSizeF(); | 3047 const SizeF text_size = render_text.GetStringSizeF(); |
| 3033 | 3048 |
| 3034 render_text.SetText(kWord + kWord); | 3049 render_text.SetText(kWord + kWord); |
| 3035 render_text.SetMultiline(true); | 3050 render_text.SetMultiline(true); |
| 3036 EXPECT_EQ(text_size.width() * 2, render_text.GetStringSizeF().width()); | 3051 EXPECT_EQ(text_size.width() * 2, render_text.GetStringSizeF().width()); |
| 3037 EXPECT_EQ(text_size.height(), render_text.GetStringSizeF().height()); | 3052 EXPECT_EQ(text_size.height(), render_text.GetStringSizeF().height()); |
| 3038 render_text.SetDisplayRect(gfx::Rect(0, 0, std::ceil(text_size.width()), 0)); | 3053 render_text.SetDisplayRect(Rect(0, 0, std::ceil(text_size.width()), 0)); |
| 3039 EXPECT_NEAR(text_size.width(), render_text.GetStringSizeF().width(), 1.0f); | 3054 EXPECT_NEAR(text_size.width(), render_text.GetStringSizeF().width(), 1.0f); |
| 3040 EXPECT_EQ(text_size.height() * 2, render_text.GetStringSizeF().height()); | 3055 EXPECT_EQ(text_size.height() * 2, render_text.GetStringSizeF().height()); |
| 3041 } | 3056 } |
| 3042 | 3057 |
| 3043 // Ensure a string fits in a display rect with a width equal to the string's. | 3058 // Ensure a string fits in a display rect with a width equal to the string's. |
| 3044 TEST_F(RenderTextTest, StringFitsOwnWidth) { | 3059 TEST_F(RenderTextTest, StringFitsOwnWidth) { |
| 3045 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); | 3060 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| 3046 const base::string16 kString = ASCIIToUTF16("www.example.com"); | 3061 const base::string16 kString = ASCIIToUTF16("www.example.com"); |
| 3047 | 3062 |
| 3048 render_text->SetText(kString); | 3063 render_text->SetText(kString); |
| 3049 render_text->ApplyStyle(BOLD, true, Range(0, 3)); | 3064 render_text->ApplyWeight(Font::Weight::BOLD, Range(0, 3)); |
| 3050 render_text->SetElideBehavior(ELIDE_TAIL); | 3065 render_text->SetElideBehavior(ELIDE_TAIL); |
| 3051 | 3066 |
| 3052 render_text->SetDisplayRect(Rect(0, 0, 500, 100)); | 3067 render_text->SetDisplayRect(Rect(0, 0, 500, 100)); |
| 3053 EXPECT_EQ(kString, render_text->GetDisplayText()); | 3068 EXPECT_EQ(kString, render_text->GetDisplayText()); |
| 3054 render_text->SetDisplayRect(Rect(0, 0, render_text->GetContentWidth(), 100)); | 3069 render_text->SetDisplayRect(Rect(0, 0, render_text->GetContentWidth(), 100)); |
| 3055 EXPECT_EQ(kString, render_text->GetDisplayText()); | 3070 EXPECT_EQ(kString, render_text->GetDisplayText()); |
| 3056 } | 3071 } |
| 3057 | 3072 |
| 3058 // TODO(derat): Figure out why this fails on Windows: http://crbug.com/427184 | 3073 // TODO(derat): Figure out why this fails on Windows: http://crbug.com/427184 |
| 3059 #if !defined(OS_WIN) | 3074 #if !defined(OS_WIN) |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3147 render_text->SetColor(SK_ColorBLACK); | 3162 render_text->SetColor(SK_ColorBLACK); |
| 3148 | 3163 |
| 3149 for (auto string : kTestStrings) { | 3164 for (auto string : kTestStrings) { |
| 3150 surface->getCanvas()->clear(SK_ColorWHITE); | 3165 surface->getCanvas()->clear(SK_ColorWHITE); |
| 3151 render_text->SetText(WideToUTF16(string)); | 3166 render_text->SetText(WideToUTF16(string)); |
| 3152 const Size string_size = render_text->GetStringSize(); | 3167 const Size string_size = render_text->GetStringSize(); |
| 3153 render_text->ApplyBaselineStyle(SUPERSCRIPT, Range(1, 2)); | 3168 render_text->ApplyBaselineStyle(SUPERSCRIPT, Range(1, 2)); |
| 3154 render_text->ApplyBaselineStyle(SUPERIOR, Range(3, 4)); | 3169 render_text->ApplyBaselineStyle(SUPERIOR, Range(3, 4)); |
| 3155 render_text->ApplyBaselineStyle(INFERIOR, Range(5, 6)); | 3170 render_text->ApplyBaselineStyle(INFERIOR, Range(5, 6)); |
| 3156 render_text->ApplyBaselineStyle(SUBSCRIPT, Range(7, 8)); | 3171 render_text->ApplyBaselineStyle(SUBSCRIPT, Range(7, 8)); |
| 3157 render_text->SetStyle(BOLD, true); | 3172 render_text->SetWeight(Font::Weight::BOLD); |
| 3158 render_text->SetDisplayRect( | 3173 render_text->SetDisplayRect( |
| 3159 Rect(kTestSize, kTestSize, string_size.width(), string_size.height())); | 3174 Rect(kTestSize, kTestSize, string_size.width(), string_size.height())); |
| 3160 // Allow the RenderText to paint outside of its display rect. | 3175 // Allow the RenderText to paint outside of its display rect. |
| 3161 render_text->set_clip_to_display_rect(false); | 3176 render_text->set_clip_to_display_rect(false); |
| 3162 ASSERT_LE(string_size.width() + kTestSize * 2, kCanvasSize.width()); | 3177 ASSERT_LE(string_size.width() + kTestSize * 2, kCanvasSize.width()); |
| 3163 | 3178 |
| 3164 render_text->Draw(&canvas); | 3179 render_text->Draw(&canvas); |
| 3165 ASSERT_LT(string_size.width() + kTestSize, kCanvasSize.width()); | 3180 ASSERT_LT(string_size.width() + kTestSize, kCanvasSize.width()); |
| 3166 SkPixmap pixmap; | 3181 SkPixmap pixmap; |
| 3167 surface->peekPixels(&pixmap); | 3182 surface->peekPixels(&pixmap); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3277 kTestSize, kTestSize, fake_height); | 3292 kTestSize, kTestSize, fake_height); |
| 3278 } | 3293 } |
| 3279 } | 3294 } |
| 3280 } | 3295 } |
| 3281 | 3296 |
| 3282 #if defined(OS_MACOSX) | 3297 #if defined(OS_MACOSX) |
| 3283 TEST_F(RenderTextTest, Mac_ElidedText) { | 3298 TEST_F(RenderTextTest, Mac_ElidedText) { |
| 3284 RenderTextMac render_text; | 3299 RenderTextMac render_text; |
| 3285 base::string16 text(ASCIIToUTF16("This is an example.")); | 3300 base::string16 text(ASCIIToUTF16("This is an example.")); |
| 3286 render_text.SetText(text); | 3301 render_text.SetText(text); |
| 3287 gfx::Size string_size = render_text.GetStringSize(); | 3302 Size string_size = render_text.GetStringSize(); |
| 3288 render_text.SetDisplayRect(gfx::Rect(string_size)); | 3303 render_text.SetDisplayRect(Rect(string_size)); |
| 3289 render_text.EnsureLayout(); | 3304 render_text.EnsureLayout(); |
| 3290 // NOTE: Character and glyph counts are only comparable for simple text. | 3305 // NOTE: Character and glyph counts are only comparable for simple text. |
| 3291 EXPECT_EQ(text.size(), | 3306 EXPECT_EQ(text.size(), |
| 3292 static_cast<size_t>(CTLineGetGlyphCount(render_text.line_))); | 3307 static_cast<size_t>(CTLineGetGlyphCount(render_text.line_))); |
| 3293 | 3308 |
| 3294 render_text.SetElideBehavior(ELIDE_TAIL); | 3309 render_text.SetElideBehavior(ELIDE_TAIL); |
| 3295 string_size.set_width(string_size.width() / 2); | 3310 string_size.set_width(string_size.width() / 2); |
| 3296 render_text.SetDisplayRect(gfx::Rect(string_size)); | 3311 render_text.SetDisplayRect(Rect(string_size)); |
| 3297 render_text.EnsureLayout(); | 3312 render_text.EnsureLayout(); |
| 3298 CFIndex glyph_count = CTLineGetGlyphCount(render_text.line_); | 3313 CFIndex glyph_count = CTLineGetGlyphCount(render_text.line_); |
| 3299 EXPECT_GT(text.size(), static_cast<size_t>(glyph_count)); | 3314 EXPECT_GT(text.size(), static_cast<size_t>(glyph_count)); |
| 3300 EXPECT_NE(0, glyph_count); | 3315 EXPECT_NE(0, glyph_count); |
| 3301 } | 3316 } |
| 3302 #endif | 3317 #endif |
| 3303 | 3318 |
| 3304 // Ensure color changes are picked up by the RenderText implementation. | 3319 // Ensure color changes are picked up by the RenderText implementation. |
| 3305 TEST_F(RenderTextTest, ColorChange) { | 3320 TEST_F(RenderTextTest, ColorChange) { |
| 3306 RenderTextAllBackends backend; | 3321 RenderTextAllBackends backend; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3325 } | 3340 } |
| 3326 | 3341 |
| 3327 // Ensure style information propagates to the typeface on the text renderer. | 3342 // Ensure style information propagates to the typeface on the text renderer. |
| 3328 TEST_F(RenderTextTest, StylePropagated) { | 3343 TEST_F(RenderTextTest, StylePropagated) { |
| 3329 RenderTextAllBackends backend; | 3344 RenderTextAllBackends backend; |
| 3330 | 3345 |
| 3331 // Default-constructed fonts on Mac are system fonts. These can have all kinds | 3346 // Default-constructed fonts on Mac are system fonts. These can have all kinds |
| 3332 // of weird weights and style, which are preserved by PlatformFontMac, but do | 3347 // of weird weights and style, which are preserved by PlatformFontMac, but do |
| 3333 // not map simply to a SkTypeface::Style (the full details in SkFontStyle is | 3348 // not map simply to a SkTypeface::Style (the full details in SkFontStyle is |
| 3334 // needed). They also vary depending on the OS version, so set a known font. | 3349 // needed). They also vary depending on the OS version, so set a known font. |
| 3335 gfx::FontList font_list(gfx::Font("Arial", 10)); | 3350 FontList font_list(Font("Arial", 10)); |
| 3336 | 3351 |
| 3337 while (backend.Advance()) { | 3352 while (backend.Advance()) { |
| 3338 SCOPED_TRACE(testing::Message() << "backend: " << backend.GetName()); | 3353 SCOPED_TRACE(testing::Message() << "backend: " << backend.GetName()); |
| 3339 backend->SetText(ASCIIToUTF16("x")); | 3354 backend->SetText(ASCIIToUTF16("x")); |
| 3340 backend->SetFontList(font_list); | 3355 backend->SetFontList(font_list); |
| 3341 | 3356 |
| 3342 backend.DrawVisualText(); | 3357 backend.DrawVisualText(); |
| 3343 EXPECT_EQ(SkTypeface::kNormal, backend.paint().getTypeface()->style()); | 3358 EXPECT_EQ(SkTypeface::kNormal, backend.paint().getTypeface()->style()); |
| 3344 | 3359 |
| 3345 backend->SetStyle(TextStyle::BOLD, true); | 3360 backend->SetWeight(Font::Weight::BOLD); |
| 3346 backend.DrawVisualText(); | 3361 backend.DrawVisualText(); |
| 3347 EXPECT_EQ(SkTypeface::kBold, backend.paint().getTypeface()->style()); | 3362 EXPECT_EQ(SkTypeface::kBold, backend.paint().getTypeface()->style()); |
| 3348 | 3363 |
| 3349 backend->SetStyle(TextStyle::ITALIC, true); | 3364 backend->SetStyle(TextStyle::ITALIC, true); |
| 3350 backend.DrawVisualText(); | 3365 backend.DrawVisualText(); |
| 3351 EXPECT_EQ(SkTypeface::kBoldItalic, backend.paint().getTypeface()->style()); | 3366 EXPECT_EQ(SkTypeface::kBoldItalic, backend.paint().getTypeface()->style()); |
| 3352 | 3367 |
| 3353 backend->SetStyle(TextStyle::BOLD, false); | 3368 backend->SetWeight(Font::Weight::NORMAL); |
| 3354 backend.DrawVisualText(); | 3369 backend.DrawVisualText(); |
| 3355 EXPECT_EQ(SkTypeface::kItalic, backend.paint().getTypeface()->style()); | 3370 EXPECT_EQ(SkTypeface::kItalic, backend.paint().getTypeface()->style()); |
| 3356 } | 3371 } |
| 3357 } | 3372 } |
| 3358 | 3373 |
| 3359 // Ensure the painter adheres to RenderText::subpixel_rendering_suppressed(). | 3374 // Ensure the painter adheres to RenderText::subpixel_rendering_suppressed(). |
| 3360 TEST_F(RenderTextTest, SubpixelRenderingSuppressed) { | 3375 TEST_F(RenderTextTest, SubpixelRenderingSuppressed) { |
| 3361 RenderTextAllBackends backend; | 3376 RenderTextAllBackends backend; |
| 3362 | 3377 |
| 3363 while (backend.Advance()) { | 3378 while (backend.Advance()) { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3384 EXPECT_FALSE(backend.paint().isLCDRenderText()); | 3399 EXPECT_FALSE(backend.paint().isLCDRenderText()); |
| 3385 backend.GetHarfbuzzRunList()->runs()[0]->render_params.subpixel_rendering = | 3400 backend.GetHarfbuzzRunList()->runs()[0]->render_params.subpixel_rendering = |
| 3386 FontRenderParams::SUBPIXEL_RENDERING_RGB; | 3401 FontRenderParams::SUBPIXEL_RENDERING_RGB; |
| 3387 backend.DrawVisualText(); | 3402 backend.DrawVisualText(); |
| 3388 #endif | 3403 #endif |
| 3389 EXPECT_FALSE(backend.paint().isLCDRenderText()); | 3404 EXPECT_FALSE(backend.paint().isLCDRenderText()); |
| 3390 } | 3405 } |
| 3391 } | 3406 } |
| 3392 | 3407 |
| 3393 } // namespace gfx | 3408 } // namespace gfx |
| OLD | NEW |