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

Unified Diff: ui/views/controls/label.cc

Issue 312233003: Add fade eliding for Views Labels; related cleanup. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Refine alignment check; minor additional cleanup. Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/controls/label.h ('k') | ui/views/controls/label_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/controls/label.cc
diff --git a/ui/views/controls/label.cc b/ui/views/controls/label.cc
index dcabe767559061bd4eb44b45f999b4d897fc4465..e9708a3e1d33c50bbd9486e5d92eb65d74f0aefe 100644
--- a/ui/views/controls/label.cc
+++ b/ui/views/controls/label.cc
@@ -144,8 +144,8 @@ void Label::SetLineHeight(int height) {
}
void Label::SetMultiLine(bool multi_line) {
- DCHECK(!multi_line || (elide_behavior_ != ELIDE_IN_MIDDLE &&
- elide_behavior_ != ELIDE_AT_BEGINNING));
+ DCHECK(!multi_line || (elide_behavior_ == gfx::ELIDE_TAIL ||
+ elide_behavior_ == gfx::TRUNCATE));
if (multi_line != is_multi_line_) {
is_multi_line_ = multi_line;
ResetCachedSize();
@@ -170,8 +170,9 @@ void Label::SetAllowCharacterBreak(bool allow_character_break) {
}
}
-void Label::SetElideBehavior(ElideBehavior elide_behavior) {
- DCHECK(elide_behavior != ELIDE_IN_MIDDLE || !is_multi_line_);
+void Label::SetElideBehavior(gfx::ElideBehavior elide_behavior) {
+ DCHECK(!is_multi_line_ || (elide_behavior_ == gfx::ELIDE_TAIL ||
+ elide_behavior_ == gfx::TRUNCATE));
if (elide_behavior != elide_behavior_) {
elide_behavior_ = elide_behavior;
ResetCachedSize();
@@ -322,18 +323,22 @@ void Label::PaintText(gfx::Canvas* canvas,
const base::string16& text,
const gfx::Rect& text_bounds,
int flags) {
- gfx::ShadowValues shadows;
- if (has_shadow_) {
- shadows.push_back(gfx::ShadowValue(shadow_offset_, shadow_blur_,
- enabled() ? enabled_shadow_color_ : disabled_shadow_color_));
- }
SkColor color = enabled() ? actual_enabled_color_ : actual_disabled_color_;
- canvas->DrawStringRectWithShadows(text, font_list_, color, text_bounds,
- line_height_, flags, shadows);
-
- if (SkColorGetA(halo_color_) != SK_AlphaTRANSPARENT) {
- canvas->DrawStringRectWithHalo(text, font_list_, color, halo_color_,
- text_bounds, flags);
+ if (elide_behavior_ == gfx::FADE_TAIL) {
+ canvas->DrawFadedString(text, font_list_, color, text_bounds, flags);
+ } else {
+ gfx::ShadowValues shadows;
+ if (has_shadow_) {
+ shadows.push_back(gfx::ShadowValue(shadow_offset_, shadow_blur_,
+ enabled() ? enabled_shadow_color_ : disabled_shadow_color_));
+ }
+ canvas->DrawStringRectWithShadows(text, font_list_, color, text_bounds,
+ line_height_, flags, shadows);
+
+ if (SkColorGetA(halo_color_) != SK_AlphaTRANSPARENT) {
+ canvas->DrawStringRectWithHalo(text, font_list_, color, halo_color_,
+ text_bounds, flags);
+ }
}
if (HasFocus()) {
@@ -398,7 +403,7 @@ void Label::Init(const base::string16& text, const gfx::FontList& font_list) {
is_multi_line_ = false;
is_obscured_ = false;
allow_character_break_ = false;
- elide_behavior_ = ELIDE_AT_END;
+ elide_behavior_ = gfx::ELIDE_TAIL;
collapse_when_hidden_ = false;
directionality_mode_ = USE_UI_DIRECTIONALITY;
enabled_shadow_color_ = 0;
@@ -511,35 +516,20 @@ void Label::CalculateDrawStringParams(base::string16* paint_text,
int* flags) const {
DCHECK(paint_text && text_bounds && flags);
- // TODO(msw): Use ElideRectangleText to support eliding multi-line text. Once
- // this is done, we can set NO_ELLIPSIS unconditionally at the bottom.
- if (is_multi_line_ || (elide_behavior_ == NO_ELIDE)) {
+ const bool forbid_ellipsis = elide_behavior_ == gfx::TRUNCATE ||
+ elide_behavior_ == gfx::FADE_TAIL;
+ if (is_multi_line_ || forbid_ellipsis) {
*paint_text = layout_text();
- } else if (elide_behavior_ == ELIDE_AT_BEGINNING) {
- *paint_text = gfx::ElideText(layout_text(),
- font_list_,
- GetAvailableRect().width(),
- gfx::ELIDE_AT_BEGINNING);
- } else if (elide_behavior_ == ELIDE_IN_MIDDLE) {
- *paint_text = gfx::ElideText(layout_text(),
- font_list_,
- GetAvailableRect().width(),
- gfx::ELIDE_IN_MIDDLE);
- } else if (elide_behavior_ == ELIDE_AT_END) {
- *paint_text = gfx::ElideText(layout_text(),
- font_list_,
- GetAvailableRect().width(),
- gfx::ELIDE_AT_END);
} else {
- DCHECK_EQ(ELIDE_AS_EMAIL, elide_behavior_);
- *paint_text =
- gfx::ElideEmail(layout_text(), font_list_, GetAvailableRect().width());
+ *paint_text = gfx::ElideText(layout_text(), font_list_,
+ GetAvailableRect().width(), elide_behavior_);
}
*text_bounds = GetTextBounds();
*flags = ComputeDrawStringFlags();
- if (!is_multi_line_ || (elide_behavior_ == NO_ELIDE))
- *flags |= gfx::Canvas::NO_ELLIPSIS;
+ // TODO(msw): Elide multi-line text with ElideRectangleText instead.
+ if (!is_multi_line_ || forbid_ellipsis)
+ *flags |= gfx::Canvas::NO_ELLIPSIS;
}
void Label::UpdateColorsFromTheme(const ui::NativeTheme* theme) {
« no previous file with comments | « ui/views/controls/label.h ('k') | ui/views/controls/label_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698