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 const int kGlyphSize = 5; | |
2302 const struct { | |
2303 const WordWrapBehavior behavior; | |
2304 const size_t num_lines; | |
2305 const Range char_ranges[4]; | |
2306 } kTestScenarios[] = { | |
2307 { IGNORE_LONG_WORDS, 3u, | |
2308 { Range(0, 4), Range(4, 11), Range(11, 14), Range::InvalidRange() } }, | |
2309 { TRUNCATE_LONG_WORDS, 3u, | |
2310 { Range(0, 4), Range(4, 8), Range(11, 14), Range::InvalidRange() } }, | |
2311 { WRAP_LONG_WORDS, 4u, | |
2312 { Range(0, 4), Range(4, 8), Range(8, 11), Range(11, 14) } }, | |
2313 // TODO(mukai): implement ELIDE_LONG_WORDS. It's not used right now. | |
2314 }; | |
2315 RenderTextHarfBuzz render_text; | |
2316 render_text.SetMultiline(true); | |
2317 render_text.SetText(ASCIIToUTF16("foo fooooo foo")); | |
2318 render_text.set_glyph_width_for_test(kGlyphSize); | |
2319 render_text.SetDisplayRect(Rect(0, 0, kGlyphSize * 4, 0)); | |
2320 | |
2321 Canvas canvas; | |
2322 | |
2323 for (size_t i = 0; i < arraysize(kTestScenarios); ++i) { | |
2324 SCOPED_TRACE(base::StringPrintf( | |
2325 "kTestStrings[%" PRIuS "] %d", i, kTestScenarios[i].behavior)); | |
msw
2015/03/26 23:05:55
nit: kTestScenarios
Jun Mukai
2015/03/27 00:31:58
Done.
| |
2326 render_text.SetWordWrapBehavior(kTestScenarios[i].behavior); | |
2327 render_text.Draw(&canvas); | |
2328 | |
2329 ASSERT_EQ(kTestScenarios[i].num_lines, render_text.lines().size()); | |
2330 for (size_t j = 0; j < render_text.lines().size(); ++j) { | |
2331 SCOPED_TRACE(base::StringPrintf("%" PRIuS "-th line", j)); | |
2332 EXPECT_EQ(kTestScenarios[i].char_ranges[j], | |
2333 render_text.lines()[j].segments[0].char_range); | |
2334 } | |
2335 } | |
2336 } | |
2337 | |
2298 TEST_F(RenderTextTest, NewlineWithoutMultilineFlag) { | 2338 TEST_F(RenderTextTest, NewlineWithoutMultilineFlag) { |
2299 const wchar_t* kTestStrings[] = { | 2339 const wchar_t* kTestStrings[] = { |
2300 L"abc\ndef", L"a \n b ", L"ab\n", L"a\n\nb", L"\nab", L"\n", | 2340 L"abc\ndef", L"a \n b ", L"ab\n", L"a\n\nb", L"\nab", L"\n", |
2301 }; | 2341 }; |
2302 | 2342 |
2303 RenderTextHarfBuzz render_text; | 2343 RenderTextHarfBuzz render_text; |
2304 render_text.SetDisplayRect(Rect(200, 1000)); | 2344 render_text.SetDisplayRect(Rect(200, 1000)); |
2305 Canvas canvas; | 2345 Canvas canvas; |
2306 | 2346 |
2307 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { | 2347 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); | 2912 string_size.set_width(string_size.width() / 2); |
2873 render_text.SetDisplayRect(gfx::Rect(string_size)); | 2913 render_text.SetDisplayRect(gfx::Rect(string_size)); |
2874 render_text.EnsureLayout(); | 2914 render_text.EnsureLayout(); |
2875 CFIndex glyph_count = CTLineGetGlyphCount(render_text.line_); | 2915 CFIndex glyph_count = CTLineGetGlyphCount(render_text.line_); |
2876 EXPECT_GT(text.size(), static_cast<size_t>(glyph_count)); | 2916 EXPECT_GT(text.size(), static_cast<size_t>(glyph_count)); |
2877 EXPECT_NE(0, glyph_count); | 2917 EXPECT_NE(0, glyph_count); |
2878 } | 2918 } |
2879 #endif | 2919 #endif |
2880 | 2920 |
2881 } // namespace gfx | 2921 } // namespace gfx |
OLD | NEW |