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 721 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); | 732 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
733 render_text->SetFontList(FontList("serif, Sans serif, 12px")); | 733 render_text->SetFontList(FontList("serif, Sans serif, 12px")); |
734 render_text->SetElideBehavior(ELIDE_TAIL); | 734 render_text->SetElideBehavior(ELIDE_TAIL); |
735 render_text->SetDisplayRect( | 735 render_text->SetDisplayRect( |
736 Rect(0, 0, expected_render_text->GetContentWidth(), 100)); | 736 Rect(0, 0, expected_render_text->GetContentWidth(), 100)); |
737 render_text->SetObscured(true); | 737 render_text->SetObscured(true); |
738 render_text->SetText(WideToUTF16(L"abcdef")); | 738 render_text->SetText(WideToUTF16(L"abcdef")); |
739 EXPECT_EQ(WideToUTF16(L"abcdef"), render_text->text()); | 739 EXPECT_EQ(WideToUTF16(L"abcdef"), render_text->text()); |
740 EXPECT_EQ(WideToUTF16(L"**\x2026"), render_text->GetDisplayText()); | 740 EXPECT_EQ(WideToUTF16(L"**\x2026"), render_text->GetDisplayText()); |
741 } | 741 } |
| 742 |
742 #endif // !defined(OS_MACOSX) | 743 #endif // !defined(OS_MACOSX) |
743 | 744 |
| 745 TEST_F(RenderTextTest, MultilineElide) { |
| 746 std::unique_ptr<RenderText> render_text(new RenderTextHarfBuzz); |
| 747 base::string16 input_text; |
| 748 // aim for 3 lines |
| 749 for (int i = 0; i < 20; ++i) |
| 750 input_text.append(ASCIIToUTF16("hello world ")); |
| 751 render_text->SetText(input_text); |
| 752 // Apply a style that tweaks the layout to make sure elision is calculated |
| 753 // with these styles. This must be done after |SetText()|. |
| 754 render_text->ApplyStyle(gfx::BOLD, true, gfx::Range(1, 20)); |
| 755 render_text->ApplyStyle(gfx::ITALIC, true, gfx::Range(1, 20)); |
| 756 render_text->ApplyStyle(gfx::DIAGONAL_STRIKE, true, gfx::Range(1, 20)); |
| 757 render_text->SetMultiline(true); |
| 758 render_text->SetElideBehavior(ELIDE_TAIL); |
| 759 render_text->SetMaxLines(3); |
| 760 const gfx::Size size = render_text->GetStringSize(); |
| 761 // Fit in 3 lines. (If we knew the width of a word, we could |
| 762 // anticipate word wrap better.) |
| 763 render_text->SetDisplayRect(gfx::Rect((size.width() + 96) / 3, 0)); |
| 764 render_text->GetStringSize(); |
| 765 EXPECT_EQ(input_text, render_text->GetDisplayText()); |
| 766 |
| 767 const base::char16 kEllipsisUTF16[] = {0x2026, 0}; |
| 768 base::string16 actual_text; |
| 769 // Try widenining the space gradually, one pixel at a time, trying |
| 770 // to trigger a failure in layout. |
| 771 for (int i = (size.width() - 12) / 3; i < (size.width() + 30) / 3; ++i) { |
| 772 render_text->SetDisplayRect(gfx::Rect(i, 0)); |
| 773 render_text->GetStringSize(); |
| 774 actual_text = render_text->GetDisplayText(); |
| 775 EXPECT_TRUE(actual_text.size() < input_text.size()); |
| 776 EXPECT_EQ(actual_text, input_text.substr(0, actual_text.size() - 1) + |
| 777 base::string16(kEllipsisUTF16)); |
| 778 EXPECT_EQ(3U, render_text->GetNumLines()); |
| 779 } |
| 780 // Now remove line restriction. |
| 781 render_text->SetMaxLines(0); |
| 782 render_text->GetStringSize(); |
| 783 EXPECT_EQ(input_text, render_text->GetDisplayText()); |
| 784 |
| 785 // And put it back. |
| 786 render_text->SetMaxLines(3); |
| 787 render_text->GetStringSize(); |
| 788 EXPECT_TRUE(actual_text.size() < input_text.size()); |
| 789 EXPECT_EQ(actual_text, input_text.substr(0, actual_text.size() - 1) + |
| 790 base::string16(kEllipsisUTF16)); |
| 791 } |
| 792 |
744 TEST_F(RenderTextTest, ElidedEmail) { | 793 TEST_F(RenderTextTest, ElidedEmail) { |
745 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); | 794 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
746 render_text->SetText(ASCIIToUTF16("test@example.com")); | 795 render_text->SetText(ASCIIToUTF16("test@example.com")); |
747 const gfx::Size size = render_text->GetStringSize(); | 796 const gfx::Size size = render_text->GetStringSize(); |
748 | 797 |
749 const base::string16 long_email = | 798 const base::string16 long_email = |
750 ASCIIToUTF16("longemailaddresstest@example.com"); | 799 ASCIIToUTF16("longemailaddresstest@example.com"); |
751 render_text->SetText(long_email); | 800 render_text->SetText(long_email); |
752 render_text->SetElideBehavior(ELIDE_EMAIL); | 801 render_text->SetElideBehavior(ELIDE_EMAIL); |
753 render_text->SetDisplayRect(gfx::Rect(size)); | 802 render_text->SetDisplayRect(gfx::Rect(size)); |
(...skipping 2573 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3327 EXPECT_FALSE(backend.paint().isLCDRenderText()); | 3376 EXPECT_FALSE(backend.paint().isLCDRenderText()); |
3328 backend.GetHarfbuzzRunList()->runs()[0]->render_params.subpixel_rendering = | 3377 backend.GetHarfbuzzRunList()->runs()[0]->render_params.subpixel_rendering = |
3329 FontRenderParams::SUBPIXEL_RENDERING_RGB; | 3378 FontRenderParams::SUBPIXEL_RENDERING_RGB; |
3330 backend.DrawVisualText(); | 3379 backend.DrawVisualText(); |
3331 #endif | 3380 #endif |
3332 EXPECT_FALSE(backend.paint().isLCDRenderText()); | 3381 EXPECT_FALSE(backend.paint().isLCDRenderText()); |
3333 } | 3382 } |
3334 } | 3383 } |
3335 | 3384 |
3336 } // namespace gfx | 3385 } // namespace gfx |
OLD | NEW |