| Index: ui/gfx/render_text.cc
|
| diff --git a/ui/gfx/render_text.cc b/ui/gfx/render_text.cc
|
| index fc9353f682f79ae48a19638650539c8275a629cd..4d19a3bfa5b1e0fa500863cb23d4bc5a567a819d 100644
|
| --- a/ui/gfx/render_text.cc
|
| +++ b/ui/gfx/render_text.cc
|
| @@ -611,7 +611,8 @@ void RenderText::Draw(Canvas* canvas) {
|
| if (!text().empty())
|
| DrawSelection(canvas);
|
|
|
| - DrawCursor(canvas);
|
| + if (cursor_enabled() && cursor_visible() && focused())
|
| + DrawCursor(canvas, selection_model_);
|
|
|
| if (!text().empty())
|
| DrawVisualText(canvas);
|
| @@ -620,6 +621,12 @@ void RenderText::Draw(Canvas* canvas) {
|
| canvas->Restore();
|
| }
|
|
|
| +void RenderText::DrawCursor(Canvas* canvas, const SelectionModel& position) {
|
| + // Paint cursor. Replace cursor is drawn as rectangle for now.
|
| + // TODO(msw): Draw a better cursor with a better indication of association.
|
| + canvas->FillRect(GetCursorBounds(position, true), cursor_color_);
|
| +}
|
| +
|
| void RenderText::DrawSelectedText(Canvas* canvas) {
|
| EnsureLayout();
|
| const std::vector<Rect> sel = GetSubstringBounds(selection());
|
| @@ -636,6 +643,7 @@ Rect RenderText::GetCursorBounds(const SelectionModel& caret,
|
| EnsureLayout();
|
|
|
| size_t caret_pos = caret.caret_pos();
|
| + DCHECK(IsCursorablePosition(caret_pos));
|
| // In overtype mode, ignore the affinity and always indicate that we will
|
| // overtype the next character.
|
| LogicalCursorDirection caret_affinity =
|
| @@ -706,6 +714,16 @@ void RenderText::SetTextShadows(const ShadowValues& shadows) {
|
| text_shadows_ = shadows;
|
| }
|
|
|
| +// static
|
| +bool RenderText::RangeContainsCaret(const ui::Range& range,
|
| + size_t caret_pos,
|
| + LogicalCursorDirection caret_affinity) {
|
| + // NB: exploits unsigned wraparound (WG14/N1124 section 6.2.5 paragraph 9).
|
| + size_t adjacent = (caret_affinity == CURSOR_BACKWARD) ?
|
| + caret_pos - 1 : caret_pos + 1;
|
| + return range.Contains(ui::Range(caret_pos, adjacent));
|
| +}
|
| +
|
| RenderText::RenderText()
|
| : horizontal_alignment_(base::i18n::IsRTL() ? ALIGN_RIGHT : ALIGN_LEFT),
|
| directionality_mode_(DIRECTIONALITY_FROM_TEXT),
|
| @@ -880,16 +898,6 @@ void RenderText::ApplyTextShadows(internal::SkiaTextRenderer* renderer) {
|
| renderer->SetDrawLooper(looper.get());
|
| }
|
|
|
| -// static
|
| -bool RenderText::RangeContainsCaret(const ui::Range& range,
|
| - size_t caret_pos,
|
| - LogicalCursorDirection caret_affinity) {
|
| - // NB: exploits unsigned wraparound (WG14/N1124 section 6.2.5 paragraph 9).
|
| - size_t adjacent = (caret_affinity == CURSOR_BACKWARD) ?
|
| - caret_pos - 1 : caret_pos + 1;
|
| - return range.Contains(ui::Range(caret_pos, adjacent));
|
| -}
|
| -
|
| void RenderText::MoveCursorTo(size_t position, bool select) {
|
| size_t cursor = std::min(position, text().length());
|
| if (IsCursorablePosition(cursor))
|
| @@ -963,13 +971,4 @@ void RenderText::DrawSelection(Canvas* canvas) {
|
| canvas->FillRect(*i, color);
|
| }
|
|
|
| -void RenderText::DrawCursor(Canvas* canvas) {
|
| - // Paint cursor. Replace cursor is drawn as rectangle for now.
|
| - // TODO(msw): Draw a better cursor with a better indication of association.
|
| - if (cursor_enabled() && cursor_visible() && focused()) {
|
| - canvas->FillRect(GetUpdatedCursorBounds(),
|
| - insert_mode_ ? cursor_color_ : selection_background_unfocused_color_);
|
| - }
|
| -}
|
| -
|
| } // namespace gfx
|
|
|