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 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 void Label::PaintText(gfx::Canvas* canvas, | 314 void Label::PaintText(gfx::Canvas* canvas, |
315 const base::string16& text, | 315 const base::string16& text, |
316 const gfx::Rect& text_bounds, | 316 const gfx::Rect& text_bounds, |
317 int flags) { | 317 int flags) { |
318 SkColor color = enabled() ? actual_enabled_color_ : actual_disabled_color_; | 318 SkColor color = enabled() ? actual_enabled_color_ : actual_disabled_color_; |
319 if (elide_behavior_ == gfx::FADE_TAIL) { | 319 if (elide_behavior_ == gfx::FADE_TAIL) { |
320 canvas->DrawFadedString(text, font_list_, color, text_bounds, flags); | 320 canvas->DrawFadedString(text, font_list_, color, text_bounds, flags); |
321 } else { | 321 } else { |
322 canvas->DrawStringRectWithShadows(text, font_list_, color, text_bounds, | 322 canvas->DrawStringRectWithShadows(text, font_list_, color, text_bounds, |
323 line_height_, flags, shadows_); | 323 line_height_, flags, shadows_); |
324 | |
325 if (SkColorGetA(halo_color_) != SK_AlphaTRANSPARENT) { | |
326 canvas->DrawStringRectWithHalo(text, font_list_, color, halo_color_, | |
327 text_bounds, flags); | |
328 } | |
329 } | 324 } |
330 | 325 |
331 if (HasFocus()) { | 326 if (HasFocus()) { |
332 gfx::Rect focus_bounds = text_bounds; | 327 gfx::Rect focus_bounds = text_bounds; |
333 focus_bounds.Inset(-kFocusBorderPadding, -kFocusBorderPadding); | 328 focus_bounds.Inset(-kFocusBorderPadding, -kFocusBorderPadding); |
334 canvas->DrawFocusRect(focus_bounds); | 329 canvas->DrawFocusRect(focus_bounds); |
335 } | 330 } |
336 } | 331 } |
337 | 332 |
338 gfx::Size Label::GetTextSize() const { | 333 gfx::Size Label::GetTextSize() const { |
339 if (!text_size_valid_) { | 334 if (!text_size_valid_) { |
340 // For single-line strings, we supply the largest possible width, because | 335 // For single-line strings, we supply the largest possible width, because |
341 // while adding NO_ELLIPSIS to the flags works on Windows for forcing | 336 // while adding NO_ELLIPSIS to the flags works on Windows for forcing |
342 // SizeStringInt() to calculate the desired width, it doesn't seem to work | 337 // SizeStringInt() to calculate the desired width, it doesn't seem to work |
343 // on Linux. | 338 // on Linux. |
344 int w = is_multi_line_ ? | 339 int w = is_multi_line_ ? |
345 GetAvailableRect().width() : std::numeric_limits<int>::max(); | 340 GetAvailableRect().width() : std::numeric_limits<int>::max(); |
346 int h = font_list_.GetHeight(); | 341 int h = font_list_.GetHeight(); |
347 // For single-line strings, ignore the available width and calculate how | 342 // For single-line strings, ignore the available width and calculate how |
348 // wide the text wants to be. | 343 // wide the text wants to be. |
349 int flags = ComputeDrawStringFlags(); | 344 int flags = ComputeDrawStringFlags(); |
350 if (!is_multi_line_) | 345 if (!is_multi_line_) |
351 flags |= gfx::Canvas::NO_ELLIPSIS; | 346 flags |= gfx::Canvas::NO_ELLIPSIS; |
352 gfx::Canvas::SizeStringInt( | 347 gfx::Canvas::SizeStringInt( |
353 layout_text(), font_list_, &w, &h, line_height_, flags); | 348 layout_text(), font_list_, &w, &h, line_height_, flags); |
354 text_size_.SetSize(w, h); | 349 text_size_.SetSize(w, h); |
| 350 const gfx::Insets shadow_margin = -gfx::ShadowValue::GetMargin(shadows_); |
| 351 text_size_.Enlarge(shadow_margin.width(), shadow_margin.height()); |
355 text_size_valid_ = true; | 352 text_size_valid_ = true; |
356 } | 353 } |
357 | 354 |
358 return text_size_; | 355 return text_size_; |
359 } | 356 } |
360 | 357 |
361 void Label::OnBoundsChanged(const gfx::Rect& previous_bounds) { | 358 void Label::OnBoundsChanged(const gfx::Rect& previous_bounds) { |
362 text_size_valid_ &= !is_multi_line_; | 359 text_size_valid_ &= !is_multi_line_; |
363 } | 360 } |
364 | 361 |
(...skipping 22 matching lines...) Expand all Loading... |
387 auto_color_readability_ = true; | 384 auto_color_readability_ = true; |
388 UpdateColorsFromTheme(ui::NativeTheme::instance()); | 385 UpdateColorsFromTheme(ui::NativeTheme::instance()); |
389 horizontal_alignment_ = gfx::ALIGN_CENTER; | 386 horizontal_alignment_ = gfx::ALIGN_CENTER; |
390 line_height_ = 0; | 387 line_height_ = 0; |
391 is_multi_line_ = false; | 388 is_multi_line_ = false; |
392 is_obscured_ = false; | 389 is_obscured_ = false; |
393 allow_character_break_ = false; | 390 allow_character_break_ = false; |
394 elide_behavior_ = gfx::ELIDE_TAIL; | 391 elide_behavior_ = gfx::ELIDE_TAIL; |
395 collapse_when_hidden_ = false; | 392 collapse_when_hidden_ = false; |
396 directionality_mode_ = gfx::DIRECTIONALITY_FROM_UI; | 393 directionality_mode_ = gfx::DIRECTIONALITY_FROM_UI; |
397 halo_color_ = SK_ColorTRANSPARENT; | |
398 cached_heights_.resize(kCachedSizeLimit); | 394 cached_heights_.resize(kCachedSizeLimit); |
399 ResetCachedSize(); | 395 ResetCachedSize(); |
400 | 396 |
401 SetText(text); | 397 SetText(text); |
402 } | 398 } |
403 | 399 |
404 void Label::RecalculateColors() { | 400 void Label::RecalculateColors() { |
405 actual_enabled_color_ = auto_color_readability_ ? | 401 actual_enabled_color_ = auto_color_readability_ ? |
406 color_utils::GetReadableColor(requested_enabled_color_, | 402 color_utils::GetReadableColor(requested_enabled_color_, |
407 background_color_) : | 403 background_color_) : |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
539 cached_heights_[i] = gfx::Size(); | 535 cached_heights_[i] = gfx::Size(); |
540 } | 536 } |
541 | 537 |
542 bool Label::ShouldShowDefaultTooltip() const { | 538 bool Label::ShouldShowDefaultTooltip() const { |
543 return !is_multi_line_ && !is_obscured_ && | 539 return !is_multi_line_ && !is_obscured_ && |
544 gfx::GetStringWidth(layout_text(), font_list_) > | 540 gfx::GetStringWidth(layout_text(), font_list_) > |
545 GetAvailableRect().width(); | 541 GetAvailableRect().width(); |
546 } | 542 } |
547 | 543 |
548 } // namespace views | 544 } // namespace views |
OLD | NEW |