Index: ui/gfx/render_text.cc |
diff --git a/ui/gfx/render_text.cc b/ui/gfx/render_text.cc |
index 4e7281c11695d4b7b70beb85b36e04227f425936..0d4a67a75cf5785824f10d8118a6f57b93e161d2 100644 |
--- a/ui/gfx/render_text.cc |
+++ b/ui/gfx/render_text.cc |
@@ -872,6 +872,28 @@ SelectionModel RenderText::GetSelectionModelForSelectionStart() { |
sel.is_reversed() ? CURSOR_BACKWARD : CURSOR_FORWARD); |
} |
+const Vector2d& RenderText::GetUpdatedDisplayOffset() { |
+ UpdateCachedBoundsAndOffset(); |
+ return display_offset_; |
+} |
+ |
+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.
|
+ int display_width = display_rect_.width(); |
+ int content_width = GetContentWidth(); |
+ int negate_rtl = horizontal_alignment_ == ALIGN_RIGHT ? -1 : 1; |
+ |
+ Vector2d final_offset = offset; |
+ if (content_width <= display_width) |
+ final_offset.set_x(0); |
+ else if (negate_rtl * final_offset.x() > 0) |
+ 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.
|
+ else if (negate_rtl * final_offset.x() < display_width - content_width) |
+ final_offset.set_x(negate_rtl * (display_width - content_width)); |
+ cached_bounds_and_offset_valid_ = true; |
+ display_offset_ = final_offset; |
+ cursor_bounds_ = GetCursorBounds(selection_model_, insert_mode_); |
+} |
+ |
RenderText::RenderText() |
: horizontal_alignment_(base::i18n::IsRTL() ? ALIGN_RIGHT : ALIGN_LEFT), |
directionality_mode_(DIRECTIONALITY_FROM_TEXT), |
@@ -898,11 +920,6 @@ RenderText::RenderText() |
cached_bounds_and_offset_valid_(false) { |
} |
-const Vector2d& RenderText::GetUpdatedDisplayOffset() { |
- UpdateCachedBoundsAndOffset(); |
- return display_offset_; |
-} |
- |
SelectionModel RenderText::GetAdjacentSelectionModel( |
const SelectionModel& current, |
BreakType break_type, |