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/gfx/render_text.h" | 5 #include "ui/gfx/render_text.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/i18n/break_iterator.h" | 9 #include "base/i18n/break_iterator.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
599 } | 599 } |
600 | 600 |
601 VisualCursorDirection RenderText::GetVisualDirectionOfLogicalEnd() { | 601 VisualCursorDirection RenderText::GetVisualDirectionOfLogicalEnd() { |
602 return GetTextDirection() == base::i18n::LEFT_TO_RIGHT ? | 602 return GetTextDirection() == base::i18n::LEFT_TO_RIGHT ? |
603 CURSOR_RIGHT : CURSOR_LEFT; | 603 CURSOR_RIGHT : CURSOR_LEFT; |
604 } | 604 } |
605 | 605 |
606 void RenderText::Draw(Canvas* canvas) { | 606 void RenderText::Draw(Canvas* canvas) { |
607 EnsureLayout(); | 607 EnsureLayout(); |
608 | 608 |
609 gfx::Rect clip_rect(display_rect()); | 609 if (clip_to_display_rect()) { |
610 clip_rect.Inset(ShadowValue::GetMargin(text_shadows_)); | 610 gfx::Rect clip_rect(display_rect()); |
| 611 clip_rect.Inset(ShadowValue::GetMargin(text_shadows_)); |
611 | 612 |
612 canvas->Save(); | 613 canvas->Save(); |
613 canvas->ClipRect(clip_rect); | 614 canvas->ClipRect(clip_rect); |
| 615 } |
614 | 616 |
615 if (!text().empty()) | 617 if (!text().empty()) |
616 DrawSelection(canvas); | 618 DrawSelection(canvas); |
617 | 619 |
618 DrawCursor(canvas); | 620 DrawCursor(canvas); |
619 | 621 |
620 if (!text().empty()) | 622 if (!text().empty()) |
621 DrawVisualText(canvas); | 623 DrawVisualText(canvas); |
622 canvas->Restore(); | 624 |
| 625 if (clip_to_display_rect()) |
| 626 canvas->Restore(); |
623 } | 627 } |
624 | 628 |
625 Rect RenderText::GetCursorBounds(const SelectionModel& caret, | 629 Rect RenderText::GetCursorBounds(const SelectionModel& caret, |
626 bool insert_mode) { | 630 bool insert_mode) { |
627 EnsureLayout(); | 631 EnsureLayout(); |
628 | 632 |
629 size_t caret_pos = caret.caret_pos(); | 633 size_t caret_pos = caret.caret_pos(); |
630 // In overtype mode, ignore the affinity and always indicate that we will | 634 // In overtype mode, ignore the affinity and always indicate that we will |
631 // overtype the next character. | 635 // overtype the next character. |
632 LogicalCursorDirection caret_affinity = | 636 LogicalCursorDirection caret_affinity = |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
705 cursor_color_(kDefaultCursorColor), | 709 cursor_color_(kDefaultCursorColor), |
706 selection_color_(kDefaultSelectionColor), | 710 selection_color_(kDefaultSelectionColor), |
707 selection_background_focused_color_(kDefaultSelectionBackgroundColor), | 711 selection_background_focused_color_(kDefaultSelectionBackgroundColor), |
708 selection_background_unfocused_color_(kDefaultSelectionBackgroundColor), | 712 selection_background_unfocused_color_(kDefaultSelectionBackgroundColor), |
709 focused_(false), | 713 focused_(false), |
710 composition_range_(ui::Range::InvalidRange()), | 714 composition_range_(ui::Range::InvalidRange()), |
711 obscured_(false), | 715 obscured_(false), |
712 fade_head_(false), | 716 fade_head_(false), |
713 fade_tail_(false), | 717 fade_tail_(false), |
714 background_is_transparent_(false), | 718 background_is_transparent_(false), |
| 719 clip_to_display_rect_(true), |
715 cached_bounds_and_offset_valid_(false) { | 720 cached_bounds_and_offset_valid_(false) { |
716 } | 721 } |
717 | 722 |
718 const Point& RenderText::GetUpdatedDisplayOffset() { | 723 const Point& RenderText::GetUpdatedDisplayOffset() { |
719 UpdateCachedBoundsAndOffset(); | 724 UpdateCachedBoundsAndOffset(); |
720 return display_offset_; | 725 return display_offset_; |
721 } | 726 } |
722 | 727 |
723 SelectionModel RenderText::GetAdjacentSelectionModel( | 728 SelectionModel RenderText::GetAdjacentSelectionModel( |
724 const SelectionModel& current, | 729 const SelectionModel& current, |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
961 if (cursor_enabled() && cursor_visible() && focused()) { | 966 if (cursor_enabled() && cursor_visible() && focused()) { |
962 const Rect& bounds = GetUpdatedCursorBounds(); | 967 const Rect& bounds = GetUpdatedCursorBounds(); |
963 if (bounds.width() != 0) | 968 if (bounds.width() != 0) |
964 canvas->FillRect(bounds, cursor_color_); | 969 canvas->FillRect(bounds, cursor_color_); |
965 else | 970 else |
966 canvas->DrawRect(bounds, cursor_color_); | 971 canvas->DrawRect(bounds, cursor_color_); |
967 } | 972 } |
968 } | 973 } |
969 | 974 |
970 } // namespace gfx | 975 } // namespace gfx |
OLD | NEW |