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/views/controls/label.h" | 5 #include "ui/views/controls/label.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <limits> | 9 #include <limits> |
10 #include <vector> | 10 #include <vector> |
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 PaintText(canvas, paint_text, text_bounds, flags); | 376 PaintText(canvas, paint_text, text_bounds, flags); |
377 } | 377 } |
378 | 378 |
379 void Label::OnNativeThemeChanged(const ui::NativeTheme* theme) { | 379 void Label::OnNativeThemeChanged(const ui::NativeTheme* theme) { |
380 UpdateColorsFromTheme(theme); | 380 UpdateColorsFromTheme(theme); |
381 } | 381 } |
382 | 382 |
383 void Label::Init(const base::string16& text, const gfx::FontList& font_list) { | 383 void Label::Init(const base::string16& text, const gfx::FontList& font_list) { |
384 font_list_ = font_list; | 384 font_list_ = font_list; |
385 enabled_color_set_ = disabled_color_set_ = background_color_set_ = false; | 385 enabled_color_set_ = disabled_color_set_ = background_color_set_ = false; |
| 386 subpixel_rendering_enabled_ = true; |
386 auto_color_readability_ = true; | 387 auto_color_readability_ = true; |
387 UpdateColorsFromTheme(ui::NativeTheme::instance()); | 388 UpdateColorsFromTheme(ui::NativeTheme::instance()); |
388 horizontal_alignment_ = gfx::ALIGN_CENTER; | 389 horizontal_alignment_ = gfx::ALIGN_CENTER; |
389 line_height_ = 0; | 390 line_height_ = 0; |
390 is_multi_line_ = false; | 391 is_multi_line_ = false; |
391 is_obscured_ = false; | 392 is_obscured_ = false; |
392 allow_character_break_ = false; | 393 allow_character_break_ = false; |
393 elide_behavior_ = gfx::ELIDE_TAIL; | 394 elide_behavior_ = gfx::ELIDE_TAIL; |
394 collapse_when_hidden_ = false; | 395 collapse_when_hidden_ = false; |
395 directionality_mode_ = gfx::DIRECTIONALITY_FROM_UI; | 396 directionality_mode_ = gfx::DIRECTIONALITY_FROM_UI; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
432 break; | 433 break; |
433 } | 434 } |
434 origin.Offset(0, std::max(0, (available.height() - text_size.height())) / 2); | 435 origin.Offset(0, std::max(0, (available.height() - text_size.height())) / 2); |
435 return gfx::Rect(origin, text_size); | 436 return gfx::Rect(origin, text_size); |
436 } | 437 } |
437 | 438 |
438 int Label::ComputeDrawStringFlags() const { | 439 int Label::ComputeDrawStringFlags() const { |
439 int flags = 0; | 440 int flags = 0; |
440 | 441 |
441 // We can't use subpixel rendering if the background is non-opaque. | 442 // We can't use subpixel rendering if the background is non-opaque. |
442 if (SkColorGetA(background_color_) != 0xFF) | 443 if (SkColorGetA(background_color_) != 0xFF || !subpixel_rendering_enabled_) |
443 flags |= gfx::Canvas::NO_SUBPIXEL_RENDERING; | 444 flags |= gfx::Canvas::NO_SUBPIXEL_RENDERING; |
444 | 445 |
445 if (directionality_mode_ == gfx::DIRECTIONALITY_FORCE_LTR) { | 446 if (directionality_mode_ == gfx::DIRECTIONALITY_FORCE_LTR) { |
446 flags |= gfx::Canvas::FORCE_LTR_DIRECTIONALITY; | 447 flags |= gfx::Canvas::FORCE_LTR_DIRECTIONALITY; |
447 } else if (directionality_mode_ == gfx::DIRECTIONALITY_FORCE_RTL) { | 448 } else if (directionality_mode_ == gfx::DIRECTIONALITY_FORCE_RTL) { |
448 flags |= gfx::Canvas::FORCE_RTL_DIRECTIONALITY; | 449 flags |= gfx::Canvas::FORCE_RTL_DIRECTIONALITY; |
449 } else if (directionality_mode_ == gfx::DIRECTIONALITY_FROM_TEXT) { | 450 } else if (directionality_mode_ == gfx::DIRECTIONALITY_FROM_TEXT) { |
450 base::i18n::TextDirection direction = | 451 base::i18n::TextDirection direction = |
451 base::i18n::GetFirstStrongCharacterDirection(layout_text()); | 452 base::i18n::GetFirstStrongCharacterDirection(layout_text()); |
452 if (direction == base::i18n::RIGHT_TO_LEFT) | 453 if (direction == base::i18n::RIGHT_TO_LEFT) |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
538 cached_heights_[i] = gfx::Size(); | 539 cached_heights_[i] = gfx::Size(); |
539 } | 540 } |
540 | 541 |
541 bool Label::ShouldShowDefaultTooltip() const { | 542 bool Label::ShouldShowDefaultTooltip() const { |
542 return !is_multi_line_ && !is_obscured_ && | 543 return !is_multi_line_ && !is_obscured_ && |
543 gfx::GetStringWidth(layout_text(), font_list_) > | 544 gfx::GetStringWidth(layout_text(), font_list_) > |
544 GetAvailableRect().width(); | 545 GetAvailableRect().width(); |
545 } | 546 } |
546 | 547 |
547 } // namespace views | 548 } // namespace views |
OLD | NEW |