| 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 <utility> |
| 10 #include <vector> | 11 #include <vector> |
| 11 | 12 |
| 12 #include "base/i18n/rtl.h" | 13 #include "base/i18n/rtl.h" |
| 13 #include "base/logging.h" | 14 #include "base/logging.h" |
| 14 #include "base/profiler/scoped_tracker.h" | 15 #include "base/profiler/scoped_tracker.h" |
| 15 #include "base/strings/string_split.h" | 16 #include "base/strings/string_split.h" |
| 16 #include "base/strings/utf_string_conversions.h" | 17 #include "base/strings/utf_string_conversions.h" |
| 17 #include "ui/accessibility/ax_view_state.h" | 18 #include "ui/accessibility/ax_view_state.h" |
| 18 #include "ui/gfx/canvas.h" | 19 #include "ui/gfx/canvas.h" |
| 19 #include "ui/gfx/color_utils.h" | 20 #include "ui/gfx/color_utils.h" |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 render_text_->CreateInstanceOfSameType()); | 334 render_text_->CreateInstanceOfSameType()); |
| 334 render_text->SetHorizontalAlignment(alignment); | 335 render_text->SetHorizontalAlignment(alignment); |
| 335 render_text->SetDirectionalityMode(directionality); | 336 render_text->SetDirectionalityMode(directionality); |
| 336 render_text->SetElideBehavior(elide_behavior); | 337 render_text->SetElideBehavior(elide_behavior); |
| 337 render_text->SetObscured(obscured()); | 338 render_text->SetObscured(obscured()); |
| 338 render_text->SetMinLineHeight(line_height()); | 339 render_text->SetMinLineHeight(line_height()); |
| 339 render_text->SetFontList(font_list()); | 340 render_text->SetFontList(font_list()); |
| 340 render_text->set_shadows(shadows()); | 341 render_text->set_shadows(shadows()); |
| 341 render_text->SetCursorEnabled(false); | 342 render_text->SetCursorEnabled(false); |
| 342 render_text->SetText(text); | 343 render_text->SetText(text); |
| 343 return render_text.Pass(); | 344 return render_text; |
| 344 } | 345 } |
| 345 | 346 |
| 346 void Label::PaintText(gfx::Canvas* canvas) { | 347 void Label::PaintText(gfx::Canvas* canvas) { |
| 347 MaybeBuildRenderTextLines(); | 348 MaybeBuildRenderTextLines(); |
| 348 for (size_t i = 0; i < lines_.size(); ++i) | 349 for (size_t i = 0; i < lines_.size(); ++i) |
| 349 lines_[i]->Draw(canvas); | 350 lines_[i]->Draw(canvas); |
| 350 } | 351 } |
| 351 | 352 |
| 352 void Label::OnBoundsChanged(const gfx::Rect& previous_bounds) { | 353 void Label::OnBoundsChanged(const gfx::Rect& previous_bounds) { |
| 353 if (previous_bounds.size() != size()) | 354 if (previous_bounds.size() != size()) |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 // Text eliding is not supported for multi-lined Labels. | 445 // Text eliding is not supported for multi-lined Labels. |
| 445 // TODO(mukai): Add multi-lined elided text support. | 446 // TODO(mukai): Add multi-lined elided text support. |
| 446 gfx::ElideBehavior elide_behavior = | 447 gfx::ElideBehavior elide_behavior = |
| 447 multi_line() ? gfx::NO_ELIDE : elide_behavior_; | 448 multi_line() ? gfx::NO_ELIDE : elide_behavior_; |
| 448 if (!multi_line() || render_text_->MultilineSupported()) { | 449 if (!multi_line() || render_text_->MultilineSupported()) { |
| 449 scoped_ptr<gfx::RenderText> render_text = | 450 scoped_ptr<gfx::RenderText> render_text = |
| 450 CreateRenderText(text(), alignment, directionality, elide_behavior); | 451 CreateRenderText(text(), alignment, directionality, elide_behavior); |
| 451 render_text->SetDisplayRect(rect); | 452 render_text->SetDisplayRect(rect); |
| 452 render_text->SetMultiline(multi_line()); | 453 render_text->SetMultiline(multi_line()); |
| 453 render_text->SetWordWrapBehavior(render_text_->word_wrap_behavior()); | 454 render_text->SetWordWrapBehavior(render_text_->word_wrap_behavior()); |
| 454 lines_.push_back(render_text.Pass()); | 455 lines_.push_back(std::move(render_text)); |
| 455 } else { | 456 } else { |
| 456 std::vector<base::string16> lines = GetLinesForWidth(rect.width()); | 457 std::vector<base::string16> lines = GetLinesForWidth(rect.width()); |
| 457 if (lines.size() > 1) | 458 if (lines.size() > 1) |
| 458 rect.set_height(std::max(line_height(), font_list().GetHeight())); | 459 rect.set_height(std::max(line_height(), font_list().GetHeight())); |
| 459 | 460 |
| 460 const int bottom = GetContentsBounds().bottom(); | 461 const int bottom = GetContentsBounds().bottom(); |
| 461 for (size_t i = 0; i < lines.size() && rect.y() <= bottom; ++i) { | 462 for (size_t i = 0; i < lines.size() && rect.y() <= bottom; ++i) { |
| 462 scoped_ptr<gfx::RenderText> line = | 463 scoped_ptr<gfx::RenderText> line = |
| 463 CreateRenderText(lines[i], alignment, directionality, elide_behavior); | 464 CreateRenderText(lines[i], alignment, directionality, elide_behavior); |
| 464 line->SetDisplayRect(rect); | 465 line->SetDisplayRect(rect); |
| 465 lines_.push_back(line.Pass()); | 466 lines_.push_back(std::move(line)); |
| 466 rect.set_y(rect.y() + rect.height()); | 467 rect.set_y(rect.y() + rect.height()); |
| 467 } | 468 } |
| 468 // Append the remaining text to the last visible line. | 469 // Append the remaining text to the last visible line. |
| 469 for (size_t i = lines_.size(); i < lines.size(); ++i) | 470 for (size_t i = lines_.size(); i < lines.size(); ++i) |
| 470 lines_.back()->SetText(lines_.back()->text() + lines[i]); | 471 lines_.back()->SetText(lines_.back()->text() + lines[i]); |
| 471 } | 472 } |
| 472 RecalculateColors(); | 473 RecalculateColors(); |
| 473 } | 474 } |
| 474 | 475 |
| 475 gfx::Rect Label::GetFocusBounds() { | 476 gfx::Rect Label::GetFocusBounds() { |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 } | 575 } |
| 575 | 576 |
| 576 bool Label::ShouldShowDefaultTooltip() const { | 577 bool Label::ShouldShowDefaultTooltip() const { |
| 577 const gfx::Size text_size = GetTextSize(); | 578 const gfx::Size text_size = GetTextSize(); |
| 578 const gfx::Size size = GetContentsBounds().size(); | 579 const gfx::Size size = GetContentsBounds().size(); |
| 579 return !obscured() && (text_size.width() > size.width() || | 580 return !obscured() && (text_size.width() > size.width() || |
| 580 (multi_line() && text_size.height() > size.height())); | 581 (multi_line() && text_size.height() > size.height())); |
| 581 } | 582 } |
| 582 | 583 |
| 583 } // namespace views | 584 } // namespace views |
| OLD | NEW |