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/views/controls/textfield/textfield.h" | 5 #include "ui/views/controls/textfield/textfield.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/trace_event/trace_event.h" | 9 #include "base/trace_event/trace_event.h" |
10 #include "ui/accessibility/ax_view_state.h" | 10 #include "ui/accessibility/ax_view_state.h" |
(...skipping 1467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1478 gfx::Rect rect = GetRenderText()->GetUpdatedCursorBounds(); | 1478 gfx::Rect rect = GetRenderText()->GetUpdatedCursorBounds(); |
1479 ConvertRectToScreen(this, &rect); | 1479 ConvertRectToScreen(this, &rect); |
1480 return rect; | 1480 return rect; |
1481 } | 1481 } |
1482 | 1482 |
1483 bool Textfield::GetCompositionCharacterBounds(uint32 index, | 1483 bool Textfield::GetCompositionCharacterBounds(uint32 index, |
1484 gfx::Rect* rect) const { | 1484 gfx::Rect* rect) const { |
1485 DCHECK(rect); | 1485 DCHECK(rect); |
1486 if (!HasCompositionText()) | 1486 if (!HasCompositionText()) |
1487 return false; | 1487 return false; |
1488 gfx::RenderText* render_text = GetRenderText(); | 1488 gfx::Range composition_range; |
1489 const gfx::Range& composition_range = render_text->GetCompositionRange(); | 1489 model_->GetCompositionTextRange(&composition_range); |
1490 DCHECK(!composition_range.is_empty()); | 1490 DCHECK(!composition_range.is_empty()); |
1491 | 1491 |
1492 size_t text_index = composition_range.start() + index; | 1492 size_t text_index = composition_range.start() + index; |
1493 if (composition_range.end() <= text_index) | 1493 if (composition_range.end() <= text_index) |
1494 return false; | 1494 return false; |
| 1495 gfx::RenderText* render_text = GetRenderText(); |
1495 if (!render_text->IsValidCursorIndex(text_index)) { | 1496 if (!render_text->IsValidCursorIndex(text_index)) { |
1496 text_index = render_text->IndexOfAdjacentGrapheme( | 1497 text_index = render_text->IndexOfAdjacentGrapheme( |
1497 text_index, gfx::CURSOR_BACKWARD); | 1498 text_index, gfx::CURSOR_BACKWARD); |
1498 } | 1499 } |
1499 if (text_index < composition_range.start()) | 1500 if (text_index < composition_range.start()) |
1500 return false; | 1501 return false; |
1501 const gfx::SelectionModel caret(text_index, gfx::CURSOR_BACKWARD); | 1502 const gfx::SelectionModel caret(text_index, gfx::CURSOR_BACKWARD); |
1502 *rect = render_text->GetCursorBounds(caret, false); | 1503 *rect = render_text->GetCursorBounds(caret, false); |
1503 ConvertRectToScreen(this, rect); | 1504 ConvertRectToScreen(this, rect); |
1504 return true; | 1505 return true; |
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1880 RequestFocus(); | 1881 RequestFocus(); |
1881 model_->MoveCursorTo(mouse); | 1882 model_->MoveCursorTo(mouse); |
1882 if (!selection_clipboard_text.empty()) { | 1883 if (!selection_clipboard_text.empty()) { |
1883 model_->InsertText(selection_clipboard_text); | 1884 model_->InsertText(selection_clipboard_text); |
1884 UpdateAfterChange(true, true); | 1885 UpdateAfterChange(true, true); |
1885 } | 1886 } |
1886 OnAfterUserAction(); | 1887 OnAfterUserAction(); |
1887 } | 1888 } |
1888 | 1889 |
1889 } // namespace views | 1890 } // namespace views |
OLD | NEW |