Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: ui/gfx/render_text_unittest.cc

Issue 25039002: Always aligns text at vertically center (Textfield, Label). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Synced. Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/gfx/render_text_mac.cc ('k') | ui/gfx/render_text_win.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 1121 matching lines...) Expand 10 before | Expand all | Expand 10 after
1132 } 1132 }
1133 1133
1134 // TODO(asvitkine): This test fails because PlatformFontMac uses point font 1134 // TODO(asvitkine): This test fails because PlatformFontMac uses point font
1135 // sizes instead of pixel sizes like other implementations. 1135 // sizes instead of pixel sizes like other implementations.
1136 #if !defined(OS_MACOSX) 1136 #if !defined(OS_MACOSX)
1137 TEST_F(RenderTextTest, StringSizeEmptyString) { 1137 TEST_F(RenderTextTest, StringSizeEmptyString) {
1138 // Ascent and descent of Arial and Symbol are different on most platforms. 1138 // Ascent and descent of Arial and Symbol are different on most platforms.
1139 const FontList font_list("Arial,Symbol, 16px"); 1139 const FontList font_list("Arial,Symbol, 16px");
1140 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); 1140 scoped_ptr<RenderText> render_text(RenderText::CreateInstance());
1141 render_text->SetFontList(font_list); 1141 render_text->SetFontList(font_list);
1142 render_text->SetDisplayRect(Rect(0, 0, 0, font_list.GetHeight()));
1142 1143
1143 // The empty string respects FontList metrics for non-zero height 1144 // The empty string respects FontList metrics for non-zero height
1144 // and baseline. 1145 // and baseline.
1145 render_text->SetText(base::string16()); 1146 render_text->SetText(base::string16());
1146 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); 1147 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height());
1147 EXPECT_EQ(0, render_text->GetStringSize().width()); 1148 EXPECT_EQ(0, render_text->GetStringSize().width());
1148 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); 1149 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline());
1149 1150
1150 render_text->SetText(UTF8ToUTF16(" ")); 1151 render_text->SetText(UTF8ToUTF16(" "));
1151 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); 1152 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height());
(...skipping 21 matching lines...) Expand all
1173 symbol_font.GetBaseline() < arial_font.GetBaseline()) { 1174 symbol_font.GetBaseline() < arial_font.GetBaseline()) {
1174 std::swap(smaller_font, larger_font); 1175 std::swap(smaller_font, larger_font);
1175 std::swap(smaller_font_text, larger_font_text); 1176 std::swap(smaller_font_text, larger_font_text);
1176 } 1177 }
1177 ASSERT_LT(smaller_font.GetHeight(), larger_font.GetHeight()); 1178 ASSERT_LT(smaller_font.GetHeight(), larger_font.GetHeight());
1178 ASSERT_LT(smaller_font.GetBaseline(), larger_font.GetBaseline()); 1179 ASSERT_LT(smaller_font.GetBaseline(), larger_font.GetBaseline());
1179 1180
1180 // Check |smaller_font_text| is rendered with the smaller font. 1181 // Check |smaller_font_text| is rendered with the smaller font.
1181 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); 1182 scoped_ptr<RenderText> render_text(RenderText::CreateInstance());
1182 render_text->SetText(UTF8ToUTF16(smaller_font_text)); 1183 render_text->SetText(UTF8ToUTF16(smaller_font_text));
1183 render_text->SetFont(smaller_font); 1184 render_text->SetFontList(FontList(smaller_font));
1185 render_text->SetDisplayRect(Rect(0, 0, 0,
1186 render_text->font_list().GetHeight()));
1184 EXPECT_EQ(smaller_font.GetHeight(), render_text->GetStringSize().height()); 1187 EXPECT_EQ(smaller_font.GetHeight(), render_text->GetStringSize().height());
1185 EXPECT_EQ(smaller_font.GetBaseline(), render_text->GetBaseline()); 1188 EXPECT_EQ(smaller_font.GetBaseline(), render_text->GetBaseline());
1186 1189
1187 // Layout the same text with mixed fonts. The text should be rendered with 1190 // Layout the same text with mixed fonts. The text should be rendered with
1188 // the smaller font, but the height and baseline are determined with the 1191 // the smaller font, but the height and baseline are determined with the
1189 // metrics of the font list, which is equal to the larger font. 1192 // metrics of the font list, which is equal to the larger font.
1190 std::vector<Font> fonts; 1193 std::vector<Font> fonts;
1191 fonts.push_back(smaller_font); // The primary font is the smaller font. 1194 fonts.push_back(smaller_font); // The primary font is the smaller font.
1192 fonts.push_back(larger_font); 1195 fonts.push_back(larger_font);
1193 const FontList font_list(fonts); 1196 const FontList font_list(fonts);
1194 render_text->SetFontList(font_list); 1197 render_text->SetFontList(font_list);
1198 render_text->SetDisplayRect(Rect(0, 0, 0,
1199 render_text->font_list().GetHeight()));
1195 EXPECT_LT(smaller_font.GetHeight(), render_text->GetStringSize().height()); 1200 EXPECT_LT(smaller_font.GetHeight(), render_text->GetStringSize().height());
1196 EXPECT_LT(smaller_font.GetBaseline(), render_text->GetBaseline()); 1201 EXPECT_LT(smaller_font.GetBaseline(), render_text->GetBaseline());
1197 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); 1202 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height());
1198 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); 1203 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline());
1199 } 1204 }
1200 1205
1201 TEST_F(RenderTextTest, SetFont) { 1206 TEST_F(RenderTextTest, SetFont) {
1202 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); 1207 scoped_ptr<RenderText> render_text(RenderText::CreateInstance());
1203 render_text->SetFont(Font("Arial", 12)); 1208 render_text->SetFont(Font("Arial", 12));
1204 EXPECT_EQ("Arial", render_text->GetPrimaryFont().GetFontName()); 1209 EXPECT_EQ("Arial", render_text->GetPrimaryFont().GetFontName());
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1286 // when the RenderText object is created. This test will check the default in 1291 // when the RenderText object is created. This test will check the default in
1287 // LTR mode, and the next test will check the RTL default. 1292 // LTR mode, and the next test will check the RTL default.
1288 const bool was_rtl = base::i18n::IsRTL(); 1293 const bool was_rtl = base::i18n::IsRTL();
1289 SetRTL(false); 1294 SetRTL(false);
1290 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); 1295 scoped_ptr<RenderText> render_text(RenderText::CreateInstance());
1291 render_text->SetText(ASCIIToUTF16("abcdefg")); 1296 render_text->SetText(ASCIIToUTF16("abcdefg"));
1292 render_text->SetFontList(FontList("Arial, 13px")); 1297 render_text->SetFontList(FontList("Arial, 13px"));
1293 1298
1294 // Set display area's size equal to the font size. 1299 // Set display area's size equal to the font size.
1295 const Size font_size(render_text->GetContentWidth(), 1300 const Size font_size(render_text->GetContentWidth(),
1296 render_text->GetStringSize().height()); 1301 render_text->font_list().GetHeight());
1297 Rect display_rect(font_size); 1302 Rect display_rect(font_size);
1298 render_text->SetDisplayRect(display_rect); 1303 render_text->SetDisplayRect(display_rect);
1299 1304
1300 Vector2d offset = render_text->GetLineOffset(0); 1305 Vector2d offset = render_text->GetLineOffset(0);
1301 EXPECT_TRUE(offset.IsZero()); 1306 EXPECT_TRUE(offset.IsZero());
1302 1307
1303 // Set display area's size greater than font size. 1308 const int kEnlargementX = 2;
1304 const int kEnlargement = 2; 1309 display_rect.Inset(0, 0, -kEnlargementX, 0);
1305 display_rect.Inset(0, 0, -kEnlargement, -kEnlargement);
1306 render_text->SetDisplayRect(display_rect); 1310 render_text->SetDisplayRect(display_rect);
1307 1311
1308 // Check the default horizontal and vertical alignment. 1312 // Check the default horizontal alignment.
1309 offset = render_text->GetLineOffset(0); 1313 offset = render_text->GetLineOffset(0);
1310 EXPECT_EQ(kEnlargement / 2, offset.y());
1311 EXPECT_EQ(0, offset.x()); 1314 EXPECT_EQ(0, offset.x());
1312 1315
1313 // Check explicitly setting the horizontal alignment. 1316 // Check explicitly setting the horizontal alignment.
1314 render_text->SetHorizontalAlignment(ALIGN_LEFT); 1317 render_text->SetHorizontalAlignment(ALIGN_LEFT);
1315 offset = render_text->GetLineOffset(0); 1318 offset = render_text->GetLineOffset(0);
1316 EXPECT_EQ(0, offset.x()); 1319 EXPECT_EQ(0, offset.x());
1317 render_text->SetHorizontalAlignment(ALIGN_CENTER); 1320 render_text->SetHorizontalAlignment(ALIGN_CENTER);
1318 offset = render_text->GetLineOffset(0); 1321 offset = render_text->GetLineOffset(0);
1319 EXPECT_EQ(kEnlargement / 2, offset.x()); 1322 EXPECT_EQ(kEnlargementX / 2, offset.x());
1320 render_text->SetHorizontalAlignment(ALIGN_RIGHT); 1323 render_text->SetHorizontalAlignment(ALIGN_RIGHT);
1321 offset = render_text->GetLineOffset(0); 1324 offset = render_text->GetLineOffset(0);
1322 EXPECT_EQ(kEnlargement, offset.x()); 1325 EXPECT_EQ(kEnlargementX, offset.x());
1323 1326
1324 // Check explicitly setting the vertical alignment. 1327 // Check that text is vertically centered within taller display rects.
1325 render_text->SetVerticalAlignment(ALIGN_TOP); 1328 const int kEnlargementY = display_rect.height();
1329 display_rect.Inset(0, 0, 0, -kEnlargementY);
1330 render_text->SetDisplayRect(display_rect);
1331 const Vector2d prev_offset = render_text->GetLineOffset(0);
1332 display_rect.Inset(0, 0, 0, -2 * kEnlargementY);
1333 render_text->SetDisplayRect(display_rect);
1326 offset = render_text->GetLineOffset(0); 1334 offset = render_text->GetLineOffset(0);
1327 EXPECT_EQ(0, offset.y()); 1335 EXPECT_EQ(prev_offset.y() + kEnlargementY, offset.y());
1328 render_text->SetVerticalAlignment(ALIGN_VCENTER);
1329 offset = render_text->GetLineOffset(0);
1330 EXPECT_EQ(kEnlargement / 2, offset.y());
1331 render_text->SetVerticalAlignment(ALIGN_BOTTOM);
1332 offset = render_text->GetLineOffset(0);
1333 EXPECT_EQ(kEnlargement, offset.y());
1334 1336
1335 SetRTL(was_rtl); 1337 SetRTL(was_rtl);
1336 } 1338 }
1337 1339
1338 TEST_F(RenderTextTest, GetTextOffsetHorizontalDefaultInRTL) { 1340 TEST_F(RenderTextTest, GetTextOffsetHorizontalDefaultInRTL) {
1339 // This only checks the default horizontal alignment in RTL mode; all other 1341 // This only checks the default horizontal alignment in RTL mode; all other
1340 // GetLineOffset(0) attributes are checked by the test above. 1342 // GetLineOffset(0) attributes are checked by the test above.
1341 const bool was_rtl = base::i18n::IsRTL(); 1343 const bool was_rtl = base::i18n::IsRTL();
1342 SetRTL(true); 1344 SetRTL(true);
1343 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); 1345 scoped_ptr<RenderText> render_text(RenderText::CreateInstance());
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
1722 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { 1724 for (size_t i = 0; i < arraysize(kTestStrings); ++i) {
1723 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); 1725 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i));
1724 render_text->SetText(WideToUTF16(kTestStrings[i])); 1726 render_text->SetText(WideToUTF16(kTestStrings[i]));
1725 render_text->Draw(&canvas); 1727 render_text->Draw(&canvas);
1726 EXPECT_EQ(1U, render_text->lines_.size()); 1728 EXPECT_EQ(1U, render_text->lines_.size());
1727 } 1729 }
1728 } 1730 }
1729 #endif // defined(OS_WIN) 1731 #endif // defined(OS_WIN)
1730 1732
1731 } // namespace gfx 1733 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gfx/render_text_mac.cc ('k') | ui/gfx/render_text_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698