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" |
11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
12 #include "base/strings/string_split.h" | |
12 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
13 #include "base/strings/stringprintf.h" | 14 #include "base/strings/stringprintf.h" |
14 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
16 #include "third_party/skia/include/core/SkSurface.h" | 17 #include "third_party/skia/include/core/SkSurface.h" |
17 #include "ui/gfx/break_list.h" | 18 #include "ui/gfx/break_list.h" |
18 #include "ui/gfx/canvas.h" | 19 #include "ui/gfx/canvas.h" |
19 #include "ui/gfx/color_utils.h" | 20 #include "ui/gfx/color_utils.h" |
20 #include "ui/gfx/font.h" | 21 #include "ui/gfx/font.h" |
21 #include "ui/gfx/range/range.h" | 22 #include "ui/gfx/range/range.h" |
(...skipping 2114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2136 // by symbols, therefore the character should be changed. | 2137 // by symbols, therefore the character should be changed. |
2137 EXPECT_NE(WideToUTF16(kTestStrings[i]), render_text.GetDisplayText()); | 2138 EXPECT_NE(WideToUTF16(kTestStrings[i]), render_text.GetDisplayText()); |
2138 | 2139 |
2139 // Setting multiline will fix this, the newline characters will be back | 2140 // Setting multiline will fix this, the newline characters will be back |
2140 // to the original text. | 2141 // to the original text. |
2141 render_text.SetMultiline(true); | 2142 render_text.SetMultiline(true); |
2142 EXPECT_EQ(WideToUTF16(kTestStrings[i]), render_text.GetDisplayText()); | 2143 EXPECT_EQ(WideToUTF16(kTestStrings[i]), render_text.GetDisplayText()); |
2143 } | 2144 } |
2144 } | 2145 } |
2145 | 2146 |
2147 // Ensure RTL alignment works. | |
msw
2015/02/23 19:30:07
nit: Is this really specific to RTL or just multi-
oshima
2015/02/23 23:06:52
I added RTL case for assertion purpose, but update
| |
2148 TEST_F(RenderTextTest, Multiline_HorizontalAlignment) { | |
2149 const struct { | |
2150 const wchar_t* const text; | |
2151 const gfx::HorizontalAlignment alignment; | |
2152 } kTestStrings[] = { | |
2153 { L"abcdefghij\nhijkl", gfx::ALIGN_LEFT}, | |
msw
2015/02/23 19:30:07
nit: add spaces before closing curly braces throug
msw
2015/02/23 19:30:07
nit: maybe add an english, 2nd line longer case?
(
oshima
2015/02/23 23:06:52
Done.
oshima
2015/02/23 23:06:52
Done.
| |
2154 // hebrew, 2nd line shorter | |
2155 { L"\x5d0\x5d1\x5d2\x5d3\x5d4\x5d5\x5d6\x5d7\n\x5d0\x5d1\x5d2\x5d3", | |
2156 gfx::ALIGN_RIGHT}, | |
2157 // hebrew, 2nd line longer | |
2158 { L"\x5d0\x5d1\x5d2\x5d3\n\x5d0\x5d1\x5d2\x5d3\x5d4\x5d5\x5d6\x5d7", | |
2159 gfx::ALIGN_RIGHT}, | |
2160 // arabic, 2nd line shorter | |
2161 { L"\x62a\x62b\x62c\x62d\x62e\x62f\x630\n\x660\x661\x662\x663\x664", | |
2162 gfx::ALIGN_RIGHT}, | |
2163 // arabic, 2nd line longer | |
2164 { L"\x660\x661\x662\x663\x664\n\x62a\x62b\x62c\x62d\x62e\x62f\x630", | |
2165 gfx::ALIGN_RIGHT}, | |
2166 }; | |
2167 const int kGlyphSize = 5; | |
2168 RenderTextHarfBuzz render_text; | |
2169 render_text.SetHorizontalAlignment(gfx::ALIGN_TO_HEAD); | |
2170 render_text.set_glyph_width_for_test(kGlyphSize); | |
2171 render_text.SetDisplayRect(Rect(100, 1000)); | |
2172 render_text.SetMultiline(true); | |
2173 | |
2174 Canvas canvas; | |
2175 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { | |
2176 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "] %ls", i, | |
2177 kTestStrings[i].text)); | |
2178 render_text.SetText(WideToUTF16(kTestStrings[i].text)); | |
2179 render_text.Draw(&canvas); | |
2180 ASSERT_LE(2u, render_text.lines().size()); | |
2181 if (kTestStrings[i].alignment == gfx::ALIGN_LEFT) { | |
2182 EXPECT_EQ(0, render_text.GetAlignmentOffset(0).x()); | |
2183 EXPECT_EQ(0, render_text.GetAlignmentOffset(1).x()); | |
2184 } else { | |
2185 std::vector<base::string16> lines; | |
2186 base::SplitString(base::WideToUTF16(kTestStrings[i].text), '\n', &lines); | |
2187 ASSERT_EQ(2u, lines.size()); | |
2188 int difference = (lines[0].length() - lines[1].length()) * kGlyphSize; | |
2189 EXPECT_EQ(render_text.GetAlignmentOffset(0).x() + difference, | |
2190 render_text.GetAlignmentOffset(1).x()); | |
2191 } | |
2192 } | |
2193 } | |
2194 | |
2146 TEST_F(RenderTextTest, NewlineWithoutMultilineFlag) { | 2195 TEST_F(RenderTextTest, NewlineWithoutMultilineFlag) { |
2147 const wchar_t* kTestStrings[] = { | 2196 const wchar_t* kTestStrings[] = { |
2148 L"abc\ndef", L"a \n b ", L"ab\n", L"a\n\nb", L"\nab", L"\n", | 2197 L"abc\ndef", L"a \n b ", L"ab\n", L"a\n\nb", L"\nab", L"\n", |
2149 }; | 2198 }; |
2150 | 2199 |
2151 RenderTextHarfBuzz render_text; | 2200 RenderTextHarfBuzz render_text; |
2152 render_text.SetDisplayRect(Rect(200, 1000)); | 2201 render_text.SetDisplayRect(Rect(200, 1000)); |
2153 Canvas canvas; | 2202 Canvas canvas; |
2154 | 2203 |
2155 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { | 2204 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2552 EXPECT_LT(220U, color_utils::GetLuminanceForColor(color)) << string; | 2601 EXPECT_LT(220U, color_utils::GetLuminanceForColor(color)) << string; |
2553 for (int x = 1; x < kTestWidth; ++x) { | 2602 for (int x = 1; x < kTestWidth; ++x) { |
2554 color = buffer[width + x + y * kCanvasSize.width()]; | 2603 color = buffer[width + x + y * kCanvasSize.width()]; |
2555 EXPECT_EQ(SK_ColorWHITE, color) << string; | 2604 EXPECT_EQ(SK_ColorWHITE, color) << string; |
2556 } | 2605 } |
2557 } | 2606 } |
2558 } | 2607 } |
2559 } | 2608 } |
2560 | 2609 |
2561 } // namespace gfx | 2610 } // namespace gfx |
OLD | NEW |