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

Side by Side Diff: ui/gfx/render_text.cc

Issue 378723003: RenderText: Allow setting display offset explicitly (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/gfx/render_text.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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(const Vector2d& offset) {
msw 2014/07/08 17:38:23 nit: perhaps this should only take a horizontal of
mohsen 2014/07/08 18:36:16 Done.
881 int display_width = display_rect_.width();
882 int content_width = GetContentWidth();
883 int negate_rtl = horizontal_alignment_ == ALIGN_RIGHT ? -1 : 1;
884
885 Vector2d final_offset = offset;
886 if (content_width <= display_width)
887 final_offset.set_x(0);
888 else if (negate_rtl * final_offset.x() > 0)
889 final_offset.set_x(0);
msw 2014/07/08 17:38:23 q: does this prevent scrolling before the start of
mohsen 2014/07/08 18:36:16 Yes.
890 else if (negate_rtl * final_offset.x() < display_width - content_width)
891 final_offset.set_x(negate_rtl * (display_width - content_width));
892 cached_bounds_and_offset_valid_ = true;
893 display_offset_ = final_offset;
894 cursor_bounds_ = GetCursorBounds(selection_model_, insert_mode_);
895 }
896
875 RenderText::RenderText() 897 RenderText::RenderText()
876 : horizontal_alignment_(base::i18n::IsRTL() ? ALIGN_RIGHT : ALIGN_LEFT), 898 : horizontal_alignment_(base::i18n::IsRTL() ? ALIGN_RIGHT : ALIGN_LEFT),
877 directionality_mode_(DIRECTIONALITY_FROM_TEXT), 899 directionality_mode_(DIRECTIONALITY_FROM_TEXT),
878 text_direction_(base::i18n::UNKNOWN_DIRECTION), 900 text_direction_(base::i18n::UNKNOWN_DIRECTION),
879 cursor_enabled_(true), 901 cursor_enabled_(true),
880 cursor_visible_(false), 902 cursor_visible_(false),
881 insert_mode_(true), 903 insert_mode_(true),
882 cursor_color_(kDefaultColor), 904 cursor_color_(kDefaultColor),
883 selection_color_(kDefaultColor), 905 selection_color_(kDefaultColor),
884 selection_background_focused_color_(kDefaultSelectionBackgroundColor), 906 selection_background_focused_color_(kDefaultSelectionBackgroundColor),
885 focused_(false), 907 focused_(false),
886 composition_range_(Range::InvalidRange()), 908 composition_range_(Range::InvalidRange()),
887 colors_(kDefaultColor), 909 colors_(kDefaultColor),
888 styles_(NUM_TEXT_STYLES), 910 styles_(NUM_TEXT_STYLES),
889 composition_and_selection_styles_applied_(false), 911 composition_and_selection_styles_applied_(false),
890 obscured_(false), 912 obscured_(false),
891 obscured_reveal_index_(-1), 913 obscured_reveal_index_(-1),
892 truncate_length_(0), 914 truncate_length_(0),
893 elide_behavior_(TRUNCATE), 915 elide_behavior_(TRUNCATE),
894 multiline_(false), 916 multiline_(false),
895 background_is_transparent_(false), 917 background_is_transparent_(false),
896 clip_to_display_rect_(true), 918 clip_to_display_rect_(true),
897 baseline_(kInvalidBaseline), 919 baseline_(kInvalidBaseline),
898 cached_bounds_and_offset_valid_(false) { 920 cached_bounds_and_offset_valid_(false) {
899 } 921 }
900 922
901 const Vector2d& RenderText::GetUpdatedDisplayOffset() {
902 UpdateCachedBoundsAndOffset();
903 return display_offset_;
904 }
905
906 SelectionModel RenderText::GetAdjacentSelectionModel( 923 SelectionModel RenderText::GetAdjacentSelectionModel(
907 const SelectionModel& current, 924 const SelectionModel& current,
908 BreakType break_type, 925 BreakType break_type,
909 VisualCursorDirection direction) { 926 VisualCursorDirection direction) {
910 EnsureLayout(); 927 EnsureLayout();
911 928
912 if (break_type == LINE_BREAK || text().empty()) 929 if (break_type == LINE_BREAK || text().empty())
913 return EdgeSelectionModel(direction); 930 return EdgeSelectionModel(direction);
914 if (break_type == CHARACTER_BREAK) 931 if (break_type == CHARACTER_BREAK)
915 return AdjacentCharSelectionModel(current, direction); 932 return AdjacentCharSelectionModel(current, direction);
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
1315 cursor_bounds_ += delta_offset; 1332 cursor_bounds_ += delta_offset;
1316 } 1333 }
1317 1334
1318 void RenderText::DrawSelection(Canvas* canvas) { 1335 void RenderText::DrawSelection(Canvas* canvas) {
1319 const std::vector<Rect> sel = GetSubstringBounds(selection()); 1336 const std::vector<Rect> sel = GetSubstringBounds(selection());
1320 for (std::vector<Rect>::const_iterator i = sel.begin(); i < sel.end(); ++i) 1337 for (std::vector<Rect>::const_iterator i = sel.begin(); i < sel.end(); ++i)
1321 canvas->FillRect(*i, selection_background_focused_color_); 1338 canvas->FillRect(*i, selection_background_focused_color_);
1322 } 1339 }
1323 1340
1324 } // namespace gfx 1341 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gfx/render_text.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698