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

Side by Side Diff: ui/views/controls/label_unittest.cc

Issue 851853002: It is time. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Trying to reup because the last upload failed. Created 5 years, 11 months 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
« no previous file with comments | « ui/views/controls/label.cc ('k') | ui/views/controls/link.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "ui/views/controls/label.h"
6
7 #include "base/i18n/rtl.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "ui/accessibility/ax_view_state.h"
11 #include "ui/base/l10n/l10n_util.h"
12 #include "ui/gfx/canvas.h"
13 #include "ui/views/border.h"
14 #include "ui/views/test/views_test_base.h"
15 #include "ui/views/widget/widget.h"
16
17 using base::ASCIIToUTF16;
18
19 namespace views {
20
21 typedef ViewsTestBase LabelTest;
22
23 // All text sizing measurements (width and height) should be greater than this.
24 const int kMinTextDimension = 4;
25
26 // A test utility function to set the application default text direction.
27 void SetRTL(bool rtl) {
28 // Override the current locale/direction.
29 base::i18n::SetICUDefaultLocale(rtl ? "he" : "en");
30 EXPECT_EQ(rtl, base::i18n::IsRTL());
31 }
32
33 TEST_F(LabelTest, FontPropertySymbol) {
34 Label label;
35 std::string font_name("symbol");
36 gfx::Font font(font_name, 26);
37 label.SetFontList(gfx::FontList(font));
38 gfx::Font font_used = label.font_list().GetPrimaryFont();
39 EXPECT_EQ(font_name, font_used.GetFontName());
40 EXPECT_EQ(26, font_used.GetFontSize());
41 }
42
43 TEST_F(LabelTest, FontPropertyArial) {
44 Label label;
45 std::string font_name("arial");
46 gfx::Font font(font_name, 30);
47 label.SetFontList(gfx::FontList(font));
48 gfx::Font font_used = label.font_list().GetPrimaryFont();
49 EXPECT_EQ(font_name, font_used.GetFontName());
50 EXPECT_EQ(30, font_used.GetFontSize());
51 }
52
53 TEST_F(LabelTest, TextProperty) {
54 Label label;
55 base::string16 test_text(ASCIIToUTF16("A random string."));
56 label.SetText(test_text);
57 EXPECT_EQ(test_text, label.text());
58 }
59
60 TEST_F(LabelTest, ColorProperty) {
61 Label label;
62 SkColor color = SkColorSetARGB(20, 40, 10, 5);
63 label.SetAutoColorReadabilityEnabled(false);
64 label.SetEnabledColor(color);
65 EXPECT_EQ(color, label.enabled_color());
66 }
67
68 TEST_F(LabelTest, AlignmentProperty) {
69 const bool was_rtl = base::i18n::IsRTL();
70
71 Label label;
72 for (size_t i = 0; i < 2; ++i) {
73 // Toggle the application default text direction (to try each direction).
74 SetRTL(!base::i18n::IsRTL());
75 bool reverse_alignment = base::i18n::IsRTL();
76
77 // The alignment should be flipped in RTL UI.
78 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT);
79 EXPECT_EQ(reverse_alignment ? gfx::ALIGN_LEFT : gfx::ALIGN_RIGHT,
80 label.GetHorizontalAlignment());
81 label.SetHorizontalAlignment(gfx::ALIGN_LEFT);
82 EXPECT_EQ(reverse_alignment ? gfx::ALIGN_RIGHT : gfx::ALIGN_LEFT,
83 label.GetHorizontalAlignment());
84 label.SetHorizontalAlignment(gfx::ALIGN_CENTER);
85 EXPECT_EQ(gfx::ALIGN_CENTER, label.GetHorizontalAlignment());
86
87 for (size_t j = 0; j < 2; ++j) {
88 label.SetHorizontalAlignment(gfx::ALIGN_TO_HEAD);
89 const bool rtl = j == 0;
90 label.SetText(rtl ? base::WideToUTF16(L"\x5d0") : ASCIIToUTF16("A"));
91 EXPECT_EQ(rtl ? gfx::ALIGN_RIGHT : gfx::ALIGN_LEFT,
92 label.GetHorizontalAlignment());
93 }
94 }
95
96 EXPECT_EQ(was_rtl, base::i18n::IsRTL());
97 }
98
99 TEST_F(LabelTest, MultiLineProperty) {
100 Label label;
101 EXPECT_FALSE(label.multi_line());
102 label.SetMultiLine(true);
103 EXPECT_TRUE(label.multi_line());
104 label.SetMultiLine(false);
105 EXPECT_FALSE(label.multi_line());
106 }
107
108 TEST_F(LabelTest, ObscuredProperty) {
109 Label label;
110 base::string16 test_text(ASCIIToUTF16("Password!"));
111 label.SetText(test_text);
112
113 // The text should be unobscured by default.
114 EXPECT_FALSE(label.obscured());
115 EXPECT_EQ(test_text, label.GetLayoutTextForTesting());
116 EXPECT_EQ(test_text, label.text());
117
118 label.SetObscured(true);
119 EXPECT_TRUE(label.obscured());
120 EXPECT_EQ(ASCIIToUTF16("*********"), label.GetLayoutTextForTesting());
121 EXPECT_EQ(test_text, label.text());
122
123 label.SetText(test_text + test_text);
124 EXPECT_EQ(ASCIIToUTF16("******************"),
125 label.GetLayoutTextForTesting());
126 EXPECT_EQ(test_text + test_text, label.text());
127
128 label.SetObscured(false);
129 EXPECT_FALSE(label.obscured());
130 EXPECT_EQ(test_text + test_text, label.GetLayoutTextForTesting());
131 EXPECT_EQ(test_text + test_text, label.text());
132 }
133
134 TEST_F(LabelTest, ObscuredSurrogatePair) {
135 // 'MUSICAL SYMBOL G CLEF': represented in UTF-16 as two characters
136 // forming the surrogate pair 0x0001D11E.
137 Label label;
138 base::string16 test_text = base::UTF8ToUTF16("\xF0\x9D\x84\x9E");
139 label.SetText(test_text);
140
141 label.SetObscured(true);
142 EXPECT_EQ(ASCIIToUTF16("*"), label.GetLayoutTextForTesting());
143 EXPECT_EQ(test_text, label.text());
144 }
145
146 TEST_F(LabelTest, TooltipProperty) {
147 Label label;
148 label.SetText(ASCIIToUTF16("My cool string."));
149
150 // Initially, label has no bounds, its text does not fit, and therefore its
151 // text should be returned as the tooltip text.
152 base::string16 tooltip;
153 EXPECT_TRUE(label.GetTooltipText(gfx::Point(), &tooltip));
154 EXPECT_EQ(label.text(), tooltip);
155
156 // While tooltip handling is disabled, GetTooltipText() should fail.
157 label.SetHandlesTooltips(false);
158 EXPECT_FALSE(label.GetTooltipText(gfx::Point(), &tooltip));
159 label.SetHandlesTooltips(true);
160
161 // When set, custom tooltip text should be returned instead of the label's
162 // text.
163 base::string16 tooltip_text(ASCIIToUTF16("The tooltip!"));
164 label.SetTooltipText(tooltip_text);
165 EXPECT_TRUE(label.GetTooltipText(gfx::Point(), &tooltip));
166 EXPECT_EQ(tooltip_text, tooltip);
167
168 // While tooltip handling is disabled, GetTooltipText() should fail.
169 label.SetHandlesTooltips(false);
170 EXPECT_FALSE(label.GetTooltipText(gfx::Point(), &tooltip));
171 label.SetHandlesTooltips(true);
172
173 // When the tooltip text is set to an empty string, the original behavior is
174 // restored.
175 label.SetTooltipText(base::string16());
176 EXPECT_TRUE(label.GetTooltipText(gfx::Point(), &tooltip));
177 EXPECT_EQ(label.text(), tooltip);
178
179 // While tooltip handling is disabled, GetTooltipText() should fail.
180 label.SetHandlesTooltips(false);
181 EXPECT_FALSE(label.GetTooltipText(gfx::Point(), &tooltip));
182 label.SetHandlesTooltips(true);
183
184 // Make the label big enough to hold the text
185 // and expect there to be no tooltip.
186 label.SetBounds(0, 0, 1000, 40);
187 EXPECT_FALSE(label.GetTooltipText(gfx::Point(), &tooltip));
188
189 // Shrinking the single-line label's height shouldn't trigger a tooltip.
190 label.SetBounds(0, 0, 1000, label.GetPreferredSize().height() / 2);
191 EXPECT_FALSE(label.GetTooltipText(gfx::Point(), &tooltip));
192
193 // Verify that explicitly set tooltip text is shown, regardless of size.
194 label.SetTooltipText(tooltip_text);
195 EXPECT_TRUE(label.GetTooltipText(gfx::Point(), &tooltip));
196 EXPECT_EQ(tooltip_text, tooltip);
197 // Clear out the explicitly set tooltip text.
198 label.SetTooltipText(base::string16());
199
200 // Shrink the bounds and the tooltip should come back.
201 label.SetBounds(0, 0, 10, 10);
202 EXPECT_TRUE(label.GetTooltipText(gfx::Point(), &tooltip));
203
204 // Make the label obscured and there is no tooltip.
205 label.SetObscured(true);
206 EXPECT_FALSE(label.GetTooltipText(gfx::Point(), &tooltip));
207
208 // Obscuring the text shouldn't permanently clobber the tooltip.
209 label.SetObscured(false);
210 EXPECT_TRUE(label.GetTooltipText(gfx::Point(), &tooltip));
211
212 // Making the label multiline shouldn't eliminate the tooltip.
213 label.SetMultiLine(true);
214 EXPECT_TRUE(label.GetTooltipText(gfx::Point(), &tooltip));
215 // Expanding the multiline label bounds should eliminate the tooltip.
216 label.SetBounds(0, 0, 1000, 1000);
217 EXPECT_FALSE(label.GetTooltipText(gfx::Point(), &tooltip));
218
219 // Verify that setting the tooltip still shows it.
220 label.SetTooltipText(tooltip_text);
221 EXPECT_TRUE(label.GetTooltipText(gfx::Point(), &tooltip));
222 EXPECT_EQ(tooltip_text, tooltip);
223 // Clear out the tooltip.
224 label.SetTooltipText(base::string16());
225 }
226
227 TEST_F(LabelTest, Accessibility) {
228 Label label;
229 label.SetText(ASCIIToUTF16("My special text."));
230
231 ui::AXViewState state;
232 label.GetAccessibleState(&state);
233 EXPECT_EQ(ui::AX_ROLE_STATIC_TEXT, state.role);
234 EXPECT_EQ(label.text(), state.name);
235 EXPECT_TRUE(state.HasStateFlag(ui::AX_STATE_READ_ONLY));
236 }
237
238 TEST_F(LabelTest, EmptyLabelSizing) {
239 Label label;
240 const gfx::Size expected_size(0, gfx::FontList().GetHeight());
241 EXPECT_EQ(expected_size, label.GetPreferredSize());
242 label.SetMultiLine(!label.multi_line());
243 EXPECT_EQ(expected_size, label.GetPreferredSize());
244 }
245
246 TEST_F(LabelTest, SingleLineSizing) {
247 Label label;
248 label.SetText(ASCIIToUTF16("A not so random string in one line."));
249 const gfx::Size size = label.GetPreferredSize();
250 EXPECT_GT(size.height(), kMinTextDimension);
251 EXPECT_GT(size.width(), kMinTextDimension);
252
253 // Setting a size smaller than preferred should not change the preferred size.
254 label.SetSize(gfx::Size(size.width() / 2, size.height() / 2));
255 EXPECT_EQ(size, label.GetPreferredSize());
256
257 const gfx::Insets border(10, 20, 30, 40);
258 label.SetBorder(Border::CreateEmptyBorder(
259 border.top(), border.left(), border.bottom(), border.right()));
260 const gfx::Size size_with_border = label.GetPreferredSize();
261 EXPECT_EQ(size_with_border.height(), size.height() + border.height());
262 EXPECT_EQ(size_with_border.width(), size.width() + border.width());
263 }
264
265 TEST_F(LabelTest, MultilineSmallAvailableWidthSizing) {
266 Label label;
267 label.SetMultiLine(true);
268 label.SetAllowCharacterBreak(true);
269 label.SetText(ASCIIToUTF16("Too Wide."));
270
271 // Check that Label can be laid out at a variety of small sizes,
272 // splitting the words into up to one character per line if necessary.
273 // Incorrect word splitting may cause infinite loops in text layout.
274 gfx::Size required_size = label.GetPreferredSize();
275 for (int i = 1; i < required_size.width(); ++i)
276 EXPECT_GT(label.GetHeightForWidth(i), 0);
277 }
278
279 TEST_F(LabelTest, MultiLineSizing) {
280 Label label;
281 label.SetFocusable(false);
282 label.SetText(
283 ASCIIToUTF16("A random string\nwith multiple lines\nand returns!"));
284 label.SetMultiLine(true);
285
286 // GetPreferredSize
287 gfx::Size required_size = label.GetPreferredSize();
288 EXPECT_GT(required_size.height(), kMinTextDimension);
289 EXPECT_GT(required_size.width(), kMinTextDimension);
290
291 // SizeToFit with unlimited width.
292 label.SizeToFit(0);
293 int required_width = label.GetLocalBounds().width();
294 EXPECT_GT(required_width, kMinTextDimension);
295
296 // SizeToFit with limited width.
297 label.SizeToFit(required_width - 1);
298 int constrained_width = label.GetLocalBounds().width();
299 #if defined(OS_WIN)
300 // Canvas::SizeStringInt (in ui/gfx/canvas_linux.cc)
301 // has to be fixed to return the size that fits to given width/height.
302 EXPECT_LT(constrained_width, required_width);
303 #endif
304 EXPECT_GT(constrained_width, kMinTextDimension);
305
306 // Change the width back to the desire width.
307 label.SizeToFit(required_width);
308 EXPECT_EQ(required_width, label.GetLocalBounds().width());
309
310 // General tests for GetHeightForWidth.
311 int required_height = label.GetHeightForWidth(required_width);
312 EXPECT_GT(required_height, kMinTextDimension);
313 int height_for_constrained_width = label.GetHeightForWidth(constrained_width);
314 #if defined(OS_WIN)
315 // Canvas::SizeStringInt (in ui/gfx/canvas_linux.cc)
316 // has to be fixed to return the size that fits to given width/height.
317 EXPECT_GT(height_for_constrained_width, required_height);
318 #endif
319 // Using the constrained width or the required_width - 1 should give the
320 // same result for the height because the constrainted width is the tight
321 // width when given "required_width - 1" as the max width.
322 EXPECT_EQ(height_for_constrained_width,
323 label.GetHeightForWidth(required_width - 1));
324
325 // Test everything with borders.
326 gfx::Insets border(10, 20, 30, 40);
327 label.SetBorder(Border::CreateEmptyBorder(
328 border.top(), border.left(), border.bottom(), border.right()));
329
330 // SizeToFit and borders.
331 label.SizeToFit(0);
332 int required_width_with_border = label.GetLocalBounds().width();
333 EXPECT_EQ(required_width_with_border, required_width + border.width());
334
335 // GetHeightForWidth and borders.
336 int required_height_with_border =
337 label.GetHeightForWidth(required_width_with_border);
338 EXPECT_EQ(required_height_with_border, required_height + border.height());
339
340 // Test that the border width is subtracted before doing the height
341 // calculation. If it is, then the height will grow when width
342 // is shrunk.
343 int height1 = label.GetHeightForWidth(required_width_with_border - 1);
344 #if defined(OS_WIN)
345 // Canvas::SizeStringInt (in ui/gfx/canvas_linux.cc)
346 // has to be fixed to return the size that fits to given width/height.
347 EXPECT_GT(height1, required_height_with_border);
348 #endif
349 EXPECT_EQ(height1, height_for_constrained_width + border.height());
350
351 // GetPreferredSize and borders.
352 label.SetBounds(0, 0, 0, 0);
353 gfx::Size required_size_with_border = label.GetPreferredSize();
354 EXPECT_EQ(required_size_with_border.height(),
355 required_size.height() + border.height());
356 EXPECT_EQ(required_size_with_border.width(),
357 required_size.width() + border.width());
358 }
359
360 TEST_F(LabelTest, DirectionalityFromText) {
361 Label label;
362 label.SetBounds(0, 0, 1000, 1000);
363 base::string16 paint_text;
364 gfx::Rect text_bounds;
365 int flags = -1;
366
367 // Test text starts with RTL character.
368 label.SetText(base::WideToUTF16(L" \x5d0\x5d1\x5d2 abc"));
369 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
370 EXPECT_EQ(gfx::Canvas::FORCE_RTL_DIRECTIONALITY,
371 flags & (gfx::Canvas::FORCE_RTL_DIRECTIONALITY |
372 gfx::Canvas::FORCE_LTR_DIRECTIONALITY));
373
374 // Test text starts with LTR character.
375 label.SetText(base::WideToUTF16(L"ltr \x5d0\x5d1\x5d2 abc"));
376 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
377 EXPECT_EQ(gfx::Canvas::FORCE_LTR_DIRECTIONALITY,
378 flags & (gfx::Canvas::FORCE_RTL_DIRECTIONALITY |
379 gfx::Canvas::FORCE_LTR_DIRECTIONALITY));
380 }
381
382 TEST_F(LabelTest, DrawSingleLineString) {
383 Label label;
384 label.SetFocusable(false);
385
386 label.SetText(ASCIIToUTF16("Here's a string with no returns."));
387 gfx::Size required_size(label.GetPreferredSize());
388 gfx::Size extra(22, 8);
389 label.SetBounds(0, 0, required_size.width() + extra.width(),
390 required_size.height() + extra.height());
391
392 // Do some basic verifications for all three alignments.
393 base::string16 paint_text;
394 gfx::Rect text_bounds;
395 int flags = -1;
396
397 // Centered text.
398 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
399 EXPECT_EQ(label.text(), paint_text);
400 // The text should be centered horizontally and vertically.
401 EXPECT_EQ(extra.width() / 2, text_bounds.x());
402 EXPECT_EQ(0, text_bounds.y());
403 EXPECT_EQ(required_size.width(), text_bounds.width());
404 EXPECT_EQ(label.height(), text_bounds.height());
405 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_CENTER,
406 flags & (gfx::Canvas::TEXT_ALIGN_LEFT |
407 gfx::Canvas::TEXT_ALIGN_CENTER |
408 gfx::Canvas::TEXT_ALIGN_RIGHT));
409
410 // Left aligned text.
411 label.SetHorizontalAlignment(gfx::ALIGN_LEFT);
412 paint_text.clear();
413 text_bounds.SetRect(0, 0, 0, 0);
414 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
415 EXPECT_EQ(label.text(), paint_text);
416 // The text should be left aligned horizontally and centered vertically.
417 EXPECT_EQ(0, text_bounds.x());
418 EXPECT_EQ(0, text_bounds.y());
419 EXPECT_EQ(required_size.width(), text_bounds.width());
420 EXPECT_EQ(label.height(), text_bounds.height());
421 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_LEFT,
422 flags & (gfx::Canvas::TEXT_ALIGN_LEFT |
423 gfx::Canvas::TEXT_ALIGN_CENTER |
424 gfx::Canvas::TEXT_ALIGN_RIGHT));
425
426 // Right aligned text.
427 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT);
428 paint_text.clear();
429 text_bounds.SetRect(0, 0, 0, 0);
430 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
431 EXPECT_EQ(label.text(), paint_text);
432 // The text should be right aligned horizontally and centered vertically.
433 EXPECT_EQ(extra.width(), text_bounds.x());
434 EXPECT_EQ(0, text_bounds.y());
435 EXPECT_EQ(required_size.width(), text_bounds.width());
436 EXPECT_EQ(label.height(), text_bounds.height());
437 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_RIGHT,
438 flags & (gfx::Canvas::TEXT_ALIGN_LEFT |
439 gfx::Canvas::TEXT_ALIGN_CENTER |
440 gfx::Canvas::TEXT_ALIGN_RIGHT));
441
442 // Test single line drawing with a border.
443 gfx::Insets border(39, 34, 8, 96);
444 label.SetBorder(Border::CreateEmptyBorder(
445 border.top(), border.left(), border.bottom(), border.right()));
446
447 gfx::Size required_size_with_border(label.GetPreferredSize());
448 EXPECT_EQ(required_size.width() + border.width(),
449 required_size_with_border.width());
450 EXPECT_EQ(required_size.height() + border.height(),
451 required_size_with_border.height());
452 label.SetBounds(0, 0, required_size_with_border.width() + extra.width(),
453 required_size_with_border.height() + extra.height());
454
455 // Centered text with border.
456 label.SetHorizontalAlignment(gfx::ALIGN_CENTER);
457 paint_text.clear();
458 text_bounds.SetRect(0, 0, 0, 0);
459 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
460 EXPECT_EQ(label.text(), paint_text);
461 // The text should be centered horizontally and vertically within the border.
462 EXPECT_EQ(border.left() + extra.width() / 2, text_bounds.x());
463 EXPECT_EQ(border.top(), text_bounds.y());
464 EXPECT_EQ(required_size.width(), text_bounds.width());
465 EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
466 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_CENTER,
467 flags & (gfx::Canvas::TEXT_ALIGN_LEFT |
468 gfx::Canvas::TEXT_ALIGN_CENTER |
469 gfx::Canvas::TEXT_ALIGN_RIGHT));
470
471 // Left aligned text with border.
472 label.SetHorizontalAlignment(gfx::ALIGN_LEFT);
473 paint_text.clear();
474 text_bounds.SetRect(0, 0, 0, 0);
475 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
476 EXPECT_EQ(label.text(), paint_text);
477 // The text should be left aligned horizontally and centered vertically.
478 EXPECT_EQ(border.left(), text_bounds.x());
479 EXPECT_EQ(border.top(), text_bounds.y());
480 EXPECT_EQ(required_size.width(), text_bounds.width());
481 EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
482 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_LEFT,
483 flags & (gfx::Canvas::TEXT_ALIGN_LEFT |
484 gfx::Canvas::TEXT_ALIGN_CENTER |
485 gfx::Canvas::TEXT_ALIGN_RIGHT));
486
487 // Right aligned text.
488 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT);
489 paint_text.clear();
490 text_bounds.SetRect(0, 0, 0, 0);
491 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
492 EXPECT_EQ(label.text(), paint_text);
493 // The text should be right aligned horizontally and centered vertically.
494 EXPECT_EQ(border.left() + extra.width(), text_bounds.x());
495 EXPECT_EQ(border.top(), text_bounds.y());
496 EXPECT_EQ(required_size.width(), text_bounds.width());
497 EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
498 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_RIGHT,
499 flags & (gfx::Canvas::TEXT_ALIGN_LEFT |
500 gfx::Canvas::TEXT_ALIGN_CENTER |
501 gfx::Canvas::TEXT_ALIGN_RIGHT));
502 }
503
504 // Pango needs a max height to elide multiline text; that is not supported here.
505 TEST_F(LabelTest, DrawMultiLineString) {
506 Label label;
507 label.SetFocusable(false);
508 // Set a background color to prevent gfx::Canvas::NO_SUBPIXEL_RENDERING flags.
509 label.SetBackgroundColor(SK_ColorWHITE);
510
511 label.SetText(ASCIIToUTF16("Another string\nwith returns\n\n!"));
512 label.SetMultiLine(true);
513 label.SizeToFit(0);
514 gfx::Size extra(50, 10);
515 label.SetBounds(label.x(), label.y(),
516 label.width() + extra.width(),
517 label.height() + extra.height());
518
519 // Do some basic verifications for all three alignments.
520 base::string16 paint_text;
521 gfx::Rect text_bounds;
522 int flags = -1;
523 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
524 EXPECT_EQ(label.text(), paint_text);
525 EXPECT_EQ(extra.width() / 2, text_bounds.x());
526 EXPECT_EQ(0, text_bounds.y());
527 EXPECT_GT(text_bounds.width(), kMinTextDimension);
528 EXPECT_EQ(text_bounds.height(), label.height());
529 int expected_flags = gfx::Canvas::MULTI_LINE |
530 gfx::Canvas::TEXT_ALIGN_CENTER |
531 gfx::Canvas::FORCE_LTR_DIRECTIONALITY;
532 #if !defined(OS_WIN)
533 expected_flags |= gfx::Canvas::NO_ELLIPSIS;
534 #endif
535 EXPECT_EQ(expected_flags, expected_flags);
536 gfx::Rect center_bounds(text_bounds);
537
538 label.SetHorizontalAlignment(gfx::ALIGN_LEFT);
539 paint_text.clear();
540 text_bounds.SetRect(0, 0, 0, 0);
541 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
542 EXPECT_EQ(label.text(), paint_text);
543 EXPECT_EQ(0, text_bounds.x());
544 EXPECT_EQ(0, text_bounds.y());
545 EXPECT_GT(text_bounds.width(), kMinTextDimension);
546 EXPECT_EQ(text_bounds.height(), label.height());
547 expected_flags = gfx::Canvas::MULTI_LINE |
548 gfx::Canvas::TEXT_ALIGN_LEFT |
549 gfx::Canvas::FORCE_LTR_DIRECTIONALITY;
550 #if !defined(OS_WIN)
551 expected_flags |= gfx::Canvas::NO_ELLIPSIS;
552 #endif
553 EXPECT_EQ(expected_flags, expected_flags);
554
555 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT);
556 paint_text.clear();
557 text_bounds.SetRect(0, 0, 0, 0);
558 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
559 EXPECT_EQ(label.text(), paint_text);
560 EXPECT_EQ(extra.width(), text_bounds.x());
561 EXPECT_EQ(0, text_bounds.y());
562 EXPECT_GT(text_bounds.width(), kMinTextDimension);
563 EXPECT_EQ(text_bounds.height(), label.height());
564 expected_flags = gfx::Canvas::MULTI_LINE |
565 gfx::Canvas::TEXT_ALIGN_RIGHT |
566 gfx::Canvas::FORCE_LTR_DIRECTIONALITY;
567 #if !defined(OS_WIN)
568 expected_flags |= gfx::Canvas::NO_ELLIPSIS;
569 #endif
570 EXPECT_EQ(expected_flags, expected_flags);
571
572 // Test multiline drawing with a border.
573 gfx::Insets border(19, 92, 23, 2);
574 label.SetBorder(Border::CreateEmptyBorder(
575 border.top(), border.left(), border.bottom(), border.right()));
576 label.SizeToFit(0);
577 label.SetBounds(label.x(), label.y(),
578 label.width() + extra.width(),
579 label.height() + extra.height());
580
581 label.SetHorizontalAlignment(gfx::ALIGN_CENTER);
582 paint_text.clear();
583 text_bounds.SetRect(0, 0, 0, 0);
584 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
585 EXPECT_EQ(label.text(), paint_text);
586 EXPECT_EQ(border.left() + extra.width() / 2, text_bounds.x());
587 EXPECT_EQ(border.top(), text_bounds.y());
588 EXPECT_EQ(center_bounds.width(), text_bounds.width());
589 EXPECT_EQ(center_bounds.height(), text_bounds.height());
590 expected_flags = gfx::Canvas::MULTI_LINE |
591 gfx::Canvas::TEXT_ALIGN_CENTER |
592 gfx::Canvas::FORCE_LTR_DIRECTIONALITY;
593 #if !defined(OS_WIN)
594 expected_flags |= gfx::Canvas::NO_ELLIPSIS;
595 #endif
596 EXPECT_EQ(expected_flags, expected_flags);
597
598 label.SetHorizontalAlignment(gfx::ALIGN_LEFT);
599 paint_text.clear();
600 text_bounds.SetRect(0, 0, 0, 0);
601 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
602 EXPECT_EQ(label.text(), paint_text);
603 EXPECT_EQ(border.left(), text_bounds.x());
604 EXPECT_EQ(border.top(), text_bounds.y());
605 EXPECT_EQ(center_bounds.width(), text_bounds.width());
606 EXPECT_EQ(center_bounds.height(), text_bounds.height());
607 expected_flags = gfx::Canvas::MULTI_LINE |
608 gfx::Canvas::TEXT_ALIGN_LEFT |
609 gfx::Canvas::FORCE_LTR_DIRECTIONALITY;
610 #if !defined(OS_WIN)
611 expected_flags |= gfx::Canvas::NO_ELLIPSIS;
612 #endif
613 EXPECT_EQ(expected_flags, expected_flags);
614
615 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT);
616 paint_text.clear();
617 text_bounds.SetRect(0, 0, 0, 0);
618 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
619 EXPECT_EQ(label.text(), paint_text);
620 EXPECT_EQ(extra.width() + border.left(), text_bounds.x());
621 EXPECT_EQ(border.top(), text_bounds.y());
622 EXPECT_EQ(center_bounds.width(), text_bounds.width());
623 EXPECT_EQ(center_bounds.height(), text_bounds.height());
624 expected_flags = gfx::Canvas::MULTI_LINE |
625 gfx::Canvas::TEXT_ALIGN_RIGHT |
626 gfx::Canvas::FORCE_LTR_DIRECTIONALITY;
627 #if !defined(OS_WIN)
628 expected_flags |= gfx::Canvas::NO_ELLIPSIS;
629 #endif
630 EXPECT_EQ(expected_flags, expected_flags);
631 }
632
633 TEST_F(LabelTest, DrawSingleLineStringInRTL) {
634 Label label;
635 label.SetFocusable(false);
636
637 std::string locale = l10n_util::GetApplicationLocale("");
638 base::i18n::SetICUDefaultLocale("he");
639
640 label.SetText(ASCIIToUTF16("Here's a string with no returns."));
641 gfx::Size required_size(label.GetPreferredSize());
642 gfx::Size extra(22, 8);
643 label.SetBounds(0, 0, required_size.width() + extra.width(),
644 required_size.height() + extra.height());
645
646 // Do some basic verifications for all three alignments.
647 base::string16 paint_text;
648 gfx::Rect text_bounds;
649 int flags = -1;
650
651 // Centered text.
652 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
653 EXPECT_EQ(label.text(), paint_text);
654 // The text should be centered horizontally and vertically.
655 EXPECT_EQ(extra.width() / 2, text_bounds.x());
656 EXPECT_EQ(0, text_bounds.y());
657 EXPECT_EQ(required_size.width(), text_bounds.width());
658 EXPECT_EQ(label.height(), text_bounds.height());
659 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_CENTER,
660 flags & (gfx::Canvas::TEXT_ALIGN_LEFT |
661 gfx::Canvas::TEXT_ALIGN_CENTER |
662 gfx::Canvas::TEXT_ALIGN_RIGHT));
663
664 // ALIGN_LEFT label.
665 label.SetHorizontalAlignment(gfx::ALIGN_LEFT);
666 paint_text.clear();
667 text_bounds.SetRect(0, 0, 0, 0);
668 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
669 EXPECT_EQ(label.text(), paint_text);
670 // The text should be right aligned horizontally and centered vertically.
671 EXPECT_EQ(extra.width(), text_bounds.x());
672 EXPECT_EQ(0, text_bounds.y());
673 EXPECT_EQ(required_size.width(), text_bounds.width());
674 EXPECT_EQ(label.height(), text_bounds.height());
675 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_RIGHT,
676 flags & (gfx::Canvas::TEXT_ALIGN_LEFT |
677 gfx::Canvas::TEXT_ALIGN_CENTER |
678 gfx::Canvas::TEXT_ALIGN_RIGHT));
679
680 // ALIGN_RIGHT label.
681 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT);
682 paint_text.clear();
683 text_bounds.SetRect(0, 0, 0, 0);
684 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
685 EXPECT_EQ(label.text(), paint_text);
686 // The text should be left aligned horizontally and centered vertically.
687 EXPECT_EQ(0, text_bounds.x());
688 EXPECT_EQ(0, text_bounds.y());
689 EXPECT_EQ(required_size.width(), text_bounds.width());
690 EXPECT_EQ(label.height(), text_bounds.height());
691 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_LEFT,
692 flags & (gfx::Canvas::TEXT_ALIGN_LEFT |
693 gfx::Canvas::TEXT_ALIGN_CENTER |
694 gfx::Canvas::TEXT_ALIGN_RIGHT));
695
696
697 // Test single line drawing with a border.
698 gfx::Insets border(39, 34, 8, 96);
699 label.SetBorder(Border::CreateEmptyBorder(
700 border.top(), border.left(), border.bottom(), border.right()));
701
702 gfx::Size required_size_with_border(label.GetPreferredSize());
703 EXPECT_EQ(required_size.width() + border.width(),
704 required_size_with_border.width());
705 EXPECT_EQ(required_size.height() + border.height(),
706 required_size_with_border.height());
707 label.SetBounds(0, 0, required_size_with_border.width() + extra.width(),
708 required_size_with_border.height() + extra.height());
709
710 // Centered text with border.
711 label.SetHorizontalAlignment(gfx::ALIGN_CENTER);
712 paint_text.clear();
713 text_bounds.SetRect(0, 0, 0, 0);
714 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
715 EXPECT_EQ(label.text(), paint_text);
716 // The text should be centered horizontally and vertically within the border.
717 EXPECT_EQ(border.left() + extra.width() / 2, text_bounds.x());
718 EXPECT_EQ(border.top(), text_bounds.y());
719 EXPECT_EQ(required_size.width(), text_bounds.width());
720 EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
721 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_CENTER,
722 flags & (gfx::Canvas::TEXT_ALIGN_LEFT |
723 gfx::Canvas::TEXT_ALIGN_CENTER |
724 gfx::Canvas::TEXT_ALIGN_RIGHT));
725
726 // ALIGN_LEFT text with border.
727 label.SetHorizontalAlignment(gfx::ALIGN_LEFT);
728 paint_text.clear();
729 text_bounds.SetRect(0, 0, 0, 0);
730 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
731 EXPECT_EQ(label.text(), paint_text);
732 // The text should be right aligned horizontally and centered vertically.
733 EXPECT_EQ(border.left() + extra.width(), text_bounds.x());
734 EXPECT_EQ(border.top(), text_bounds.y());
735 EXPECT_EQ(required_size.width(), text_bounds.width());
736 EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
737 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_RIGHT,
738 flags & (gfx::Canvas::TEXT_ALIGN_LEFT |
739 gfx::Canvas::TEXT_ALIGN_CENTER |
740 gfx::Canvas::TEXT_ALIGN_RIGHT));
741
742 // ALIGN_RIGHT text.
743 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT);
744 paint_text.clear();
745 text_bounds.SetRect(0, 0, 0, 0);
746 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
747 EXPECT_EQ(label.text(), paint_text);
748 // The text should be left aligned horizontally and centered vertically.
749 EXPECT_EQ(border.left(), text_bounds.x());
750 EXPECT_EQ(border.top(), text_bounds.y());
751 EXPECT_EQ(required_size.width(), text_bounds.width());
752 EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
753 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_LEFT,
754 flags & (gfx::Canvas::TEXT_ALIGN_LEFT |
755 gfx::Canvas::TEXT_ALIGN_CENTER |
756 gfx::Canvas::TEXT_ALIGN_RIGHT));
757
758 // Reset locale.
759 base::i18n::SetICUDefaultLocale(locale);
760 }
761
762 // On Linux the underlying pango routines require a max height in order to
763 // ellide multiline text. So until that can be resolved, we set all
764 // multiline lables to not ellide in Linux only.
765 TEST_F(LabelTest, DrawMultiLineStringInRTL) {
766 Label label;
767 label.SetFocusable(false);
768
769 // Test for RTL.
770 std::string locale = l10n_util::GetApplicationLocale("");
771 base::i18n::SetICUDefaultLocale("he");
772
773 label.SetText(ASCIIToUTF16("Another string\nwith returns\n\n!"));
774 label.SetMultiLine(true);
775 label.SizeToFit(0);
776 gfx::Size extra(50, 10);
777 label.SetBounds(label.x(), label.y(),
778 label.width() + extra.width(),
779 label.height() + extra.height());
780
781 // Do some basic verifications for all three alignments.
782 base::string16 paint_text;
783 gfx::Rect text_bounds;
784 int flags = -1;
785 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
786 EXPECT_EQ(label.text(), paint_text);
787 EXPECT_EQ(extra.width() / 2, text_bounds.x());
788 EXPECT_EQ(0, text_bounds.y());
789 EXPECT_GT(text_bounds.width(), kMinTextDimension);
790 EXPECT_EQ(text_bounds.height(), label.height());
791 EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
792 EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_CENTER & flags);
793 #if !defined(OS_WIN)
794 EXPECT_TRUE(gfx::Canvas::NO_ELLIPSIS & flags);
795 #endif
796 gfx::Rect center_bounds(text_bounds);
797
798 label.SetHorizontalAlignment(gfx::ALIGN_LEFT);
799 paint_text.clear();
800 text_bounds.SetRect(0, 0, 0, 0);
801 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
802 EXPECT_EQ(label.text(), paint_text);
803 EXPECT_EQ(extra.width(), text_bounds.x());
804 EXPECT_EQ(0, text_bounds.y());
805 EXPECT_GT(text_bounds.width(), kMinTextDimension);
806 EXPECT_EQ(text_bounds.height(), label.height());
807 EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
808 EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_RIGHT & flags);
809 #if !defined(OS_WIN)
810 EXPECT_TRUE(gfx::Canvas::NO_ELLIPSIS & flags);
811 #endif
812
813 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT);
814 paint_text.clear();
815 text_bounds.SetRect(0, 0, 0, 0);
816 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
817 EXPECT_EQ(label.text(), paint_text);
818 EXPECT_EQ(0, text_bounds.x());
819 EXPECT_EQ(0, text_bounds.y());
820 EXPECT_GT(text_bounds.width(), kMinTextDimension);
821 EXPECT_EQ(text_bounds.height(), label.height());
822 EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
823 EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_LEFT & flags);
824 #if !defined(OS_WIN)
825 EXPECT_TRUE(gfx::Canvas::NO_ELLIPSIS & flags);
826 #endif
827
828 // Test multiline drawing with a border.
829 gfx::Insets border(19, 92, 23, 2);
830 label.SetBorder(Border::CreateEmptyBorder(
831 border.top(), border.left(), border.bottom(), border.right()));
832 label.SizeToFit(0);
833 label.SetBounds(label.x(), label.y(),
834 label.width() + extra.width(),
835 label.height() + extra.height());
836
837 label.SetHorizontalAlignment(gfx::ALIGN_CENTER);
838 paint_text.clear();
839 text_bounds.SetRect(0, 0, 0, 0);
840 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
841 EXPECT_EQ(label.text(), paint_text);
842 EXPECT_EQ(border.left() + extra.width() / 2, text_bounds.x());
843 EXPECT_EQ(border.top(), text_bounds.y());
844 EXPECT_EQ(center_bounds.width(), text_bounds.width());
845 EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
846 EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
847 EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_CENTER & flags);
848 #if !defined(OS_WIN)
849 EXPECT_TRUE(gfx::Canvas::NO_ELLIPSIS & flags);
850 #endif
851
852 label.SetHorizontalAlignment(gfx::ALIGN_LEFT);
853 paint_text.clear();
854 text_bounds.SetRect(0, 0, 0, 0);
855 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
856 EXPECT_EQ(label.text(), paint_text);
857 EXPECT_EQ(border.left() + extra.width(), text_bounds.x());
858 EXPECT_EQ(border.top(), text_bounds.y());
859 EXPECT_EQ(center_bounds.width(), text_bounds.width());
860 EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
861 EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
862 EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_RIGHT & flags);
863 #if !defined(OS_WIN)
864 EXPECT_TRUE(gfx::Canvas::NO_ELLIPSIS & flags);
865 #endif
866
867 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT);
868 paint_text.clear();
869 text_bounds.SetRect(0, 0, 0, 0);
870 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
871 EXPECT_EQ(label.text(), paint_text);
872 EXPECT_EQ(border.left(), text_bounds.x());
873 EXPECT_EQ(border.top(), text_bounds.y());
874 EXPECT_EQ(center_bounds.width(), text_bounds.width());
875 EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
876 EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
877 EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_LEFT & flags);
878 #if !defined(OS_WIN)
879 EXPECT_TRUE(gfx::Canvas::NO_ELLIPSIS & flags);
880 #endif
881
882 // Reset Locale
883 base::i18n::SetICUDefaultLocale(locale);
884 }
885
886 // Ensure the subpixel rendering flag and background color alpha are respected.
887 TEST_F(LabelTest, DisableSubpixelRendering) {
888 Label label;
889 label.SetBackgroundColor(SK_ColorWHITE);
890 const int flag = gfx::Canvas::NO_SUBPIXEL_RENDERING;
891 EXPECT_EQ(0, label.ComputeDrawStringFlags() & flag);
892 label.SetSubpixelRenderingEnabled(false);
893 EXPECT_EQ(flag, label.ComputeDrawStringFlags() & flag);
894 label.SetSubpixelRenderingEnabled(true);
895 EXPECT_EQ(0, label.ComputeDrawStringFlags() & flag);
896 // Text cannot be drawn with subpixel rendering on transparent backgrounds.
897 label.SetBackgroundColor(SkColorSetARGB(64, 255, 255, 255));
898 EXPECT_EQ(flag, label.ComputeDrawStringFlags() & flag);
899 }
900
901 // Check that labels support GetTooltipHandlerForPoint.
902 TEST_F(LabelTest, GetTooltipHandlerForPoint) {
903 // A root view must be defined for this test because the hit-testing
904 // behaviour used by GetTooltipHandlerForPoint() is defined by
905 // the ViewTargeter installed on the root view.
906 Widget widget;
907 Widget::InitParams init_params =
908 CreateParams(Widget::InitParams::TYPE_POPUP);
909 init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
910 init_params.bounds = gfx::Rect(0, 0, 200, 200);
911 widget.Init(init_params);
912
913 Label label;
914 label.SetText(
915 ASCIIToUTF16("A string that's long enough to exceed the bounds"));
916 label.SetBounds(0, 0, 10, 10);
917 widget.SetContentsView(&label);
918
919 // By default, labels start out as tooltip handlers.
920 ASSERT_TRUE(label.handles_tooltips());
921
922 // There's a default tooltip if the text is too big to fit.
923 EXPECT_EQ(&label, label.GetTooltipHandlerForPoint(gfx::Point(2, 2)));
924
925 // If tooltip handling is disabled, the label should not provide a tooltip
926 // handler.
927 label.SetHandlesTooltips(false);
928 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(2, 2)));
929 label.SetHandlesTooltips(true);
930
931 // If there's no default tooltip, this should return NULL.
932 label.SetBounds(0, 0, 500, 50);
933 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(2, 2)));
934
935 label.SetTooltipText(ASCIIToUTF16("a tooltip"));
936 // If the point hits the label, and tooltip is set, the label should be
937 // returned as its tooltip handler.
938 EXPECT_EQ(&label, label.GetTooltipHandlerForPoint(gfx::Point(2, 2)));
939
940 // Additionally, GetTooltipHandlerForPoint should verify that the label
941 // actually contains the point.
942 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(2, 51)));
943 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(-1, 20)));
944
945 // Again, if tooltip handling is disabled, the label should not provide a
946 // tooltip handler.
947 label.SetHandlesTooltips(false);
948 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(2, 2)));
949 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(2, 51)));
950 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(-1, 20)));
951 label.SetHandlesTooltips(true);
952
953 // GetTooltipHandlerForPoint works should work in child bounds.
954 label.SetBounds(2, 2, 10, 10);
955 EXPECT_EQ(&label, label.GetTooltipHandlerForPoint(gfx::Point(1, 5)));
956 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(3, 11)));
957 }
958
959 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/controls/label.cc ('k') | ui/views/controls/link.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698