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 2058 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2069 } | 2069 } |
2070 | 2070 |
2071 // Ensure strings wrap onto multiple lines for a small available width. | 2071 // Ensure strings wrap onto multiple lines for a small available width. |
2072 TEST_F(RenderTextTest, Multiline_MinWidth) { | 2072 TEST_F(RenderTextTest, Multiline_MinWidth) { |
2073 const wchar_t* kTestStrings[] = { kWeak, kLtr, kLtrRtl, kLtrRtlLtr, kRtl, | 2073 const wchar_t* kTestStrings[] = { kWeak, kLtr, kLtrRtl, kLtrRtlLtr, kRtl, |
2074 kRtlLtr, kRtlLtrRtl }; | 2074 kRtlLtr, kRtlLtrRtl }; |
2075 | 2075 |
2076 RenderTextHarfBuzz render_text; | 2076 RenderTextHarfBuzz render_text; |
2077 render_text.SetDisplayRect(Rect(1, 1000)); | 2077 render_text.SetDisplayRect(Rect(1, 1000)); |
2078 render_text.SetMultiline(true); | 2078 render_text.SetMultiline(true); |
2079 render_text.SetWordWrapBehavior(WRAP_LONG_WORDS); | |
2079 Canvas canvas; | 2080 Canvas canvas; |
2080 | 2081 |
2081 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { | 2082 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
2082 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); | 2083 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); |
2083 render_text.SetText(WideToUTF16(kTestStrings[i])); | 2084 render_text.SetText(WideToUTF16(kTestStrings[i])); |
2084 render_text.Draw(&canvas); | 2085 render_text.Draw(&canvas); |
2085 EXPECT_GT(render_text.lines_.size(), 1U); | 2086 EXPECT_GT(render_text.lines_.size(), 1U); |
2086 } | 2087 } |
2087 } | 2088 } |
2088 | 2089 |
(...skipping 13 matching lines...) Expand all Loading... | |
2102 { L"\x062A\x0641\x0627\x062D\x05EA\x05E4\x05D5\x05D6\x05D9" | 2103 { L"\x062A\x0641\x0627\x062D\x05EA\x05E4\x05D5\x05D6\x05D9" |
2103 L"\x05DA\x05DB\x05DD", Range(0, 4), Range(4, 12), false } | 2104 L"\x05DA\x05DB\x05DD", Range(0, 4), Range(4, 12), false } |
2104 }; | 2105 }; |
2105 | 2106 |
2106 RenderTextHarfBuzz render_text; | 2107 RenderTextHarfBuzz render_text; |
2107 // Specify the fixed width for characters to suppress the possible variations | 2108 // Specify the fixed width for characters to suppress the possible variations |
2108 // of linebreak results. | 2109 // of linebreak results. |
2109 render_text.set_glyph_width_for_test(5); | 2110 render_text.set_glyph_width_for_test(5); |
2110 render_text.SetDisplayRect(Rect(50, 1000)); | 2111 render_text.SetDisplayRect(Rect(50, 1000)); |
2111 render_text.SetMultiline(true); | 2112 render_text.SetMultiline(true); |
2113 render_text.SetWordWrapBehavior(WRAP_LONG_WORDS); | |
2112 render_text.SetHorizontalAlignment(ALIGN_TO_HEAD); | 2114 render_text.SetHorizontalAlignment(ALIGN_TO_HEAD); |
2113 | 2115 |
2114 Canvas canvas; | 2116 Canvas canvas; |
2115 TestSkiaTextRenderer renderer(&canvas); | 2117 TestSkiaTextRenderer renderer(&canvas); |
2116 | 2118 |
2117 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { | 2119 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
2118 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); | 2120 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); |
2119 render_text.SetText(WideToUTF16(kTestStrings[i].text)); | 2121 render_text.SetText(WideToUTF16(kTestStrings[i].text)); |
2120 render_text.EnsureLayout(); | 2122 render_text.EnsureLayout(); |
2121 render_text.DrawVisualTextInternal(&renderer); | 2123 render_text.DrawVisualTextInternal(&renderer); |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2288 std::vector<base::string16> lines; | 2290 std::vector<base::string16> lines; |
2289 base::SplitString(base::WideToUTF16(kTestStrings[i].text), '\n', &lines); | 2291 base::SplitString(base::WideToUTF16(kTestStrings[i].text), '\n', &lines); |
2290 ASSERT_EQ(2u, lines.size()); | 2292 ASSERT_EQ(2u, lines.size()); |
2291 int difference = (lines[0].length() - lines[1].length()) * kGlyphSize; | 2293 int difference = (lines[0].length() - lines[1].length()) * kGlyphSize; |
2292 EXPECT_EQ(render_text.GetAlignmentOffset(0).x() + difference, | 2294 EXPECT_EQ(render_text.GetAlignmentOffset(0).x() + difference, |
2293 render_text.GetAlignmentOffset(1).x()); | 2295 render_text.GetAlignmentOffset(1).x()); |
2294 } | 2296 } |
2295 } | 2297 } |
2296 } | 2298 } |
2297 | 2299 |
2300 TEST_F(RenderTextTest, Multiline_WordWrapBehavior) { | |
2301 RenderTextHarfBuzz render_text; | |
2302 render_text.SetMultiline(true); | |
2303 render_text.SetText(ASCIIToUTF16("foo ")); | |
2304 const int foo_width = render_text.GetStringSize().width(); | |
2305 | |
2306 render_text.SetText(ASCIIToUTF16("foo fooooo foo")); | |
2307 render_text.SetDisplayRect(Rect(0, 0, foo_width, 0)); | |
2308 | |
2309 Canvas canvas; | |
2310 render_text.Draw(&canvas); | |
msw
2015/03/26 19:36:30
nit: either render_text.SetWordWrapBehavior(IGNORE
Jun Mukai
2015/03/26 22:47:38
Done.
| |
2311 EXPECT_EQ(3u, render_text.lines().size()); | |
2312 EXPECT_EQ(Range(0, 4), render_text.lines()[0].segments[0].char_range); | |
msw
2015/03/26 19:36:30
I think you'll need to do render_text.set_glyph_wi
Jun Mukai
2015/03/26 22:47:38
Done, great.
| |
2313 EXPECT_EQ(Range(4, 11), render_text.lines()[1].segments[0].char_range); | |
2314 EXPECT_EQ(Range(11, 14), render_text.lines()[2].segments[0].char_range); | |
2315 | |
2316 render_text.SetWordWrapBehavior(TRUNCATE_LONG_WORDS); | |
2317 render_text.Draw(&canvas); | |
2318 EXPECT_EQ(3u, render_text.lines().size()); | |
2319 EXPECT_EQ(Range(0, 4), render_text.lines()[0].segments[0].char_range); | |
2320 EXPECT_GT(11u, render_text.lines()[1].segments[0].char_range.end()); | |
msw
2015/03/26 19:36:30
With a fixed width, you can expect this to equal (
Jun Mukai
2015/03/26 22:47:38
Done.
| |
2321 EXPECT_EQ(Range(11, 14), render_text.lines()[2].segments[0].char_range); | |
2322 | |
2323 // TODO(mukai): implement ELIDE_LONG_WORDS. It's not used right now. | |
2324 | |
2325 render_text.SetWordWrapBehavior(WRAP_LONG_WORDS); | |
2326 render_text.Draw(&canvas); | |
2327 EXPECT_LE(4u, render_text.lines().size()); | |
msw
2015/03/26 19:36:30
With a fixed width, you can expect this to equal 4
Jun Mukai
2015/03/26 22:47:38
Done.
| |
2328 EXPECT_EQ(Range(0, 4), render_text.lines()[0].segments[0].char_range); | |
2329 for (size_t i = 0; i < render_text.lines().size() - 1; ++i) { | |
2330 Range char_range = render_text.lines()[i].segments[0].char_range; | |
2331 Range next_char_range = render_text.lines()[i + 1].segments[0].char_range; | |
2332 EXPECT_EQ(char_range.end(), next_char_range.start()) | |
2333 << i << " " << char_range << " vs " << next_char_range; | |
2334 } | |
2335 EXPECT_EQ(14u, render_text.lines()[render_text.lines().size() - 1] | |
2336 .segments[0].char_range.end()); | |
2337 } | |
2338 | |
2298 TEST_F(RenderTextTest, NewlineWithoutMultilineFlag) { | 2339 TEST_F(RenderTextTest, NewlineWithoutMultilineFlag) { |
2299 const wchar_t* kTestStrings[] = { | 2340 const wchar_t* kTestStrings[] = { |
2300 L"abc\ndef", L"a \n b ", L"ab\n", L"a\n\nb", L"\nab", L"\n", | 2341 L"abc\ndef", L"a \n b ", L"ab\n", L"a\n\nb", L"\nab", L"\n", |
2301 }; | 2342 }; |
2302 | 2343 |
2303 RenderTextHarfBuzz render_text; | 2344 RenderTextHarfBuzz render_text; |
2304 render_text.SetDisplayRect(Rect(200, 1000)); | 2345 render_text.SetDisplayRect(Rect(200, 1000)); |
2305 Canvas canvas; | 2346 Canvas canvas; |
2306 | 2347 |
2307 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { | 2348 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2872 string_size.set_width(string_size.width() / 2); | 2913 string_size.set_width(string_size.width() / 2); |
2873 render_text.SetDisplayRect(gfx::Rect(string_size)); | 2914 render_text.SetDisplayRect(gfx::Rect(string_size)); |
2874 render_text.EnsureLayout(); | 2915 render_text.EnsureLayout(); |
2875 CFIndex glyph_count = CTLineGetGlyphCount(render_text.line_); | 2916 CFIndex glyph_count = CTLineGetGlyphCount(render_text.line_); |
2876 EXPECT_GT(text.size(), static_cast<size_t>(glyph_count)); | 2917 EXPECT_GT(text.size(), static_cast<size_t>(glyph_count)); |
2877 EXPECT_NE(0, glyph_count); | 2918 EXPECT_NE(0, glyph_count); |
2878 } | 2919 } |
2879 #endif | 2920 #endif |
2880 | 2921 |
2881 } // namespace gfx | 2922 } // namespace gfx |
OLD | NEW |