| 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 #include <climits> | 8 #include <climits> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 854 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 865 } | 865 } |
| 866 | 866 |
| 867 SelectionModel RenderText::GetSelectionModelForSelectionStart() { | 867 SelectionModel RenderText::GetSelectionModelForSelectionStart() { |
| 868 const Range& sel = selection(); | 868 const Range& sel = selection(); |
| 869 if (sel.is_empty()) | 869 if (sel.is_empty()) |
| 870 return selection_model_; | 870 return selection_model_; |
| 871 return SelectionModel(sel.start(), | 871 return SelectionModel(sel.start(), |
| 872 sel.is_reversed() ? CURSOR_BACKWARD : CURSOR_FORWARD); | 872 sel.is_reversed() ? CURSOR_BACKWARD : CURSOR_FORWARD); |
| 873 } | 873 } |
| 874 | 874 |
| 875 const Vector2d& RenderText::GetUpdatedDisplayOffset() { |
| 876 UpdateCachedBoundsAndOffset(); |
| 877 return display_offset_; |
| 878 } |
| 879 |
| 880 void RenderText::SetDisplayOffset(int horizontal_offset) { |
| 881 const int extra_content = GetContentWidth() - display_rect_.width(); |
| 882 |
| 883 int min_offset = 0; |
| 884 int max_offset = 0; |
| 885 if (extra_content > 0) { |
| 886 switch (horizontal_alignment_) { |
| 887 case ALIGN_LEFT: |
| 888 min_offset = -extra_content; |
| 889 break; |
| 890 case ALIGN_RIGHT: |
| 891 max_offset = extra_content; |
| 892 break; |
| 893 case ALIGN_CENTER: |
| 894 min_offset = -extra_content / 2; |
| 895 max_offset = extra_content / 2; |
| 896 break; |
| 897 default: |
| 898 break; |
| 899 } |
| 900 } |
| 901 if (horizontal_offset < min_offset) |
| 902 horizontal_offset = min_offset; |
| 903 else if (horizontal_offset > max_offset) |
| 904 horizontal_offset = max_offset; |
| 905 |
| 906 cached_bounds_and_offset_valid_ = true; |
| 907 display_offset_.set_x(horizontal_offset); |
| 908 cursor_bounds_ = GetCursorBounds(selection_model_, insert_mode_); |
| 909 } |
| 910 |
| 875 RenderText::RenderText() | 911 RenderText::RenderText() |
| 876 : horizontal_alignment_(base::i18n::IsRTL() ? ALIGN_RIGHT : ALIGN_LEFT), | 912 : horizontal_alignment_(base::i18n::IsRTL() ? ALIGN_RIGHT : ALIGN_LEFT), |
| 877 directionality_mode_(DIRECTIONALITY_FROM_TEXT), | 913 directionality_mode_(DIRECTIONALITY_FROM_TEXT), |
| 878 text_direction_(base::i18n::UNKNOWN_DIRECTION), | 914 text_direction_(base::i18n::UNKNOWN_DIRECTION), |
| 879 cursor_enabled_(true), | 915 cursor_enabled_(true), |
| 880 cursor_visible_(false), | 916 cursor_visible_(false), |
| 881 insert_mode_(true), | 917 insert_mode_(true), |
| 882 cursor_color_(kDefaultColor), | 918 cursor_color_(kDefaultColor), |
| 883 selection_color_(kDefaultColor), | 919 selection_color_(kDefaultColor), |
| 884 selection_background_focused_color_(kDefaultSelectionBackgroundColor), | 920 selection_background_focused_color_(kDefaultSelectionBackgroundColor), |
| 885 focused_(false), | 921 focused_(false), |
| 886 composition_range_(Range::InvalidRange()), | 922 composition_range_(Range::InvalidRange()), |
| 887 colors_(kDefaultColor), | 923 colors_(kDefaultColor), |
| 888 styles_(NUM_TEXT_STYLES), | 924 styles_(NUM_TEXT_STYLES), |
| 889 composition_and_selection_styles_applied_(false), | 925 composition_and_selection_styles_applied_(false), |
| 890 obscured_(false), | 926 obscured_(false), |
| 891 obscured_reveal_index_(-1), | 927 obscured_reveal_index_(-1), |
| 892 truncate_length_(0), | 928 truncate_length_(0), |
| 893 elide_behavior_(TRUNCATE), | 929 elide_behavior_(TRUNCATE), |
| 894 multiline_(false), | 930 multiline_(false), |
| 895 background_is_transparent_(false), | 931 background_is_transparent_(false), |
| 896 clip_to_display_rect_(true), | 932 clip_to_display_rect_(true), |
| 897 baseline_(kInvalidBaseline), | 933 baseline_(kInvalidBaseline), |
| 898 cached_bounds_and_offset_valid_(false) { | 934 cached_bounds_and_offset_valid_(false) { |
| 899 } | 935 } |
| 900 | 936 |
| 901 const Vector2d& RenderText::GetUpdatedDisplayOffset() { | |
| 902 UpdateCachedBoundsAndOffset(); | |
| 903 return display_offset_; | |
| 904 } | |
| 905 | |
| 906 SelectionModel RenderText::GetAdjacentSelectionModel( | 937 SelectionModel RenderText::GetAdjacentSelectionModel( |
| 907 const SelectionModel& current, | 938 const SelectionModel& current, |
| 908 BreakType break_type, | 939 BreakType break_type, |
| 909 VisualCursorDirection direction) { | 940 VisualCursorDirection direction) { |
| 910 EnsureLayout(); | 941 EnsureLayout(); |
| 911 | 942 |
| 912 if (break_type == LINE_BREAK || text().empty()) | 943 if (break_type == LINE_BREAK || text().empty()) |
| 913 return EdgeSelectionModel(direction); | 944 return EdgeSelectionModel(direction); |
| 914 if (break_type == CHARACTER_BREAK) | 945 if (break_type == CHARACTER_BREAK) |
| 915 return AdjacentCharSelectionModel(current, direction); | 946 return AdjacentCharSelectionModel(current, direction); |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1315 cursor_bounds_ += delta_offset; | 1346 cursor_bounds_ += delta_offset; |
| 1316 } | 1347 } |
| 1317 | 1348 |
| 1318 void RenderText::DrawSelection(Canvas* canvas) { | 1349 void RenderText::DrawSelection(Canvas* canvas) { |
| 1319 const std::vector<Rect> sel = GetSubstringBounds(selection()); | 1350 const std::vector<Rect> sel = GetSubstringBounds(selection()); |
| 1320 for (std::vector<Rect>::const_iterator i = sel.begin(); i < sel.end(); ++i) | 1351 for (std::vector<Rect>::const_iterator i = sel.begin(); i < sel.end(); ++i) |
| 1321 canvas->FillRect(*i, selection_background_focused_color_); | 1352 canvas->FillRect(*i, selection_background_focused_color_); |
| 1322 } | 1353 } |
| 1323 | 1354 |
| 1324 } // namespace gfx | 1355 } // namespace gfx |
| OLD | NEW |