Chromium Code Reviews| Index: ui/gfx/render_text.cc |
| diff --git a/ui/gfx/render_text.cc b/ui/gfx/render_text.cc |
| index 498bb3b42a3ad552208fee366dc42ec7de434b44..24753fcbd124c1dfaa4e0d435ec2cbbb3df5d70f 100644 |
| --- a/ui/gfx/render_text.cc |
| +++ b/ui/gfx/render_text.cc |
| @@ -175,6 +175,11 @@ void RenderText::SetSelectionModel(const SelectionModel& sel) { |
| cached_bounds_and_offset_valid_ = false; |
| } |
| +void RenderText::ToggleInsertMode() { |
| + insert_mode_ = !insert_mode_; |
| + cached_bounds_and_offset_valid_ = false; |
| +} |
| + |
| void RenderText::SetDisplayRect(const Rect& r) { |
| display_rect_ = r; |
| cached_bounds_and_offset_valid_ = false; |
| @@ -184,13 +189,8 @@ size_t RenderText::GetCursorPosition() const { |
| return selection_model_.selection_end(); |
| } |
| -void RenderText::SetCursorPosition(const size_t position) { |
| - SelectionModel sel(selection_model()); |
| - sel.set_selection_start(position); |
| - sel.set_selection_end(position); |
| - sel.set_caret_pos(GetIndexOfPreviousGrapheme(position)); |
| - sel.set_caret_placement(SelectionModel::TRAILING); |
| - SetSelectionModel(sel); |
| +void RenderText::SetCursorPosition(size_t position) { |
| + MoveCursorTo(position, false); |
| } |
| void RenderText::MoveCursorLeft(BreakType break_type, bool select) { |
| @@ -237,6 +237,15 @@ void RenderText::MoveCursorRight(BreakType break_type, bool select) { |
| MoveCursorTo(position); |
| } |
| +void RenderText::MoveCursorTo(size_t position, bool select) { |
| + size_t caret_pos = GetIndexOfPreviousGrapheme(position); |
| + SelectionModel::CaretPlacement placement = (caret_pos == position) ? |
| + SelectionModel::LEADING : SelectionModel::TRAILING; |
| + size_t selection_start = select ? GetSelectionStart() : position; |
| + SelectionModel sel(selection_start, position, caret_pos, placement); |
| + SetSelectionModel(sel); |
|
xji
2011/08/18 22:47:54
hmm... the functionality seems different from prev
msw
2011/08/19 10:55:30
This has been reincarnated as a convenience functi
xji
2011/08/19 17:38:13
make sense.
but I think for complex script, say f
msw
2011/08/19 18:03:33
Interesting, I wonder how that works with the IMEs
|
| +} |
| + |
| bool RenderText::MoveCursorTo(const SelectionModel& selection) { |
| bool changed = !selection.Equals(selection_model_); |
| SetSelectionModel(selection); |
| @@ -251,6 +260,8 @@ bool RenderText::MoveCursorTo(const Point& point, bool select) { |
| } |
| bool RenderText::IsPointInSelection(const Point& point) { |
| + if (EmptySelection()) |
| + return false; |
| // TODO(xji): should this check whether the point is inside the visual |
| // selection bounds? In case of "abcFED", if "ED" is selected, |point| points |
| // to the right half of 'c', is the point in selection? |
| @@ -308,12 +319,8 @@ void RenderText::SelectWord() { |
| break; |
| } |
| - SelectionModel sel(selection_model()); |
| - sel.set_selection_start(selection_start); |
| - sel.set_selection_end(cursor_position); |
| - sel.set_caret_pos(GetIndexOfPreviousGrapheme(cursor_position)); |
| - sel.set_caret_placement(SelectionModel::TRAILING); |
| - SetSelectionModel(sel); |
| + MoveCursorTo(selection_start, false); |
| + MoveCursorTo(cursor_position, true); |
|
xji
2011/08/18 22:47:54
why this change?
msw
2011/08/19 10:55:30
Convenience of built-in checking for s previous gr
|
| } |
| const ui::Range& RenderText::GetCompositionRange() const { |
| @@ -589,7 +596,6 @@ void RenderText::UpdateCachedBoundsAndOffset() { |
| // function will set |cursor_bounds_| and |display_offset_| to correct values. |
| cached_bounds_and_offset_valid_ = true; |
| cursor_bounds_ = GetCursorBounds(selection_model_, insert_mode_); |
| - cursor_bounds_.set_width(std::max(cursor_bounds_.width(), 1)); |
| // Update |display_offset_| to ensure the current cursor is visible. |
| int display_width = display_rect_.width(); |
| int string_width = GetStringWidth(); |