OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "views/controls/textfield/native_textfield_views.h" | 5 #include "views/controls/textfield/native_textfield_views.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 if (move) { | 218 if (move) { |
219 gfx::SelectionModel selected; | 219 gfx::SelectionModel selected; |
220 model_->GetSelectionModel(&selected); | 220 model_->GetSelectionModel(&selected); |
221 // Adjust the drop destination if it is on or after the current selection. | 221 // Adjust the drop destination if it is on or after the current selection. |
222 size_t max_of_selected_range = std::max(selected.selection_start(), | 222 size_t max_of_selected_range = std::max(selected.selection_start(), |
223 selected.selection_end()); | 223 selected.selection_end()); |
224 size_t min_of_selected_range = std::min(selected.selection_start(), | 224 size_t min_of_selected_range = std::min(selected.selection_start(), |
225 selected.selection_end()); | 225 selected.selection_end()); |
226 size_t selected_range_length = max_of_selected_range - | 226 size_t selected_range_length = max_of_selected_range - |
227 min_of_selected_range; | 227 min_of_selected_range; |
228 if (max_of_selected_range <= drop_destination.selection_end()) | 228 size_t drop_destination_end = drop_destination.selection_end(); |
229 drop_destination.set_selection_end( | 229 if (max_of_selected_range <= drop_destination_end) |
230 drop_destination.selection_end() - selected_range_length); | 230 drop_destination_end -= selected_range_length; |
231 else if (min_of_selected_range <= drop_destination.selection_end()) | 231 else if (min_of_selected_range <= drop_destination_end) |
232 drop_destination.set_selection_end(min_of_selected_range); | 232 drop_destination_end = min_of_selected_range; |
233 model_->DeleteSelectionAndInsertTextAt(text, | 233 model_->DeleteSelectionAndInsertTextAt(text, drop_destination_end); |
234 drop_destination.selection_end()); | |
235 } else { | 234 } else { |
236 drop_destination.set_selection_start(drop_destination.selection_end()); | 235 drop_destination.set_selection_start(drop_destination.selection_end()); |
237 model_->MoveCursorTo(drop_destination); | 236 model_->MoveCursorTo(drop_destination); |
238 // Drop always inserts text even if the textfield is not in insert mode. | 237 // Drop always inserts text even if the textfield is not in insert mode. |
239 model_->InsertText(text); | 238 model_->InsertText(text); |
240 } | 239 } |
241 skip_input_method_cancel_composition_ = false; | 240 skip_input_method_cancel_composition_ = false; |
242 UpdateAfterChange(true, true); | 241 UpdateAfterChange(true, true); |
243 OnAfterUserAction(); | 242 OnAfterUserAction(); |
244 return move ? ui::DragDropTypes::DRAG_MOVE : ui::DragDropTypes::DRAG_COPY; | 243 return move ? ui::DragDropTypes::DRAG_MOVE : ui::DragDropTypes::DRAG_COPY; |
(...skipping 761 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1006 void NativeTextfieldViews::OnCaretBoundsChanged() { | 1005 void NativeTextfieldViews::OnCaretBoundsChanged() { |
1007 // TODO(suzhe): changed from DCHECK. See http://crbug.com/81320. | 1006 // TODO(suzhe): changed from DCHECK. See http://crbug.com/81320. |
1008 if (textfield_->GetInputMethod()) | 1007 if (textfield_->GetInputMethod()) |
1009 textfield_->GetInputMethod()->OnCaretBoundsChanged(textfield_); | 1008 textfield_->GetInputMethod()->OnCaretBoundsChanged(textfield_); |
1010 | 1009 |
1011 // Notify selection controller | 1010 // Notify selection controller |
1012 if (!touch_selection_controller_.get()) | 1011 if (!touch_selection_controller_.get()) |
1013 return; | 1012 return; |
1014 gfx::RenderText* render_text = GetRenderText(); | 1013 gfx::RenderText* render_text = GetRenderText(); |
1015 const gfx::SelectionModel& sel = render_text->selection_model(); | 1014 const gfx::SelectionModel& sel = render_text->selection_model(); |
1016 gfx::SelectionModel start_sel(sel.selection_start(), sel.selection_start(), | 1015 gfx::SelectionModel start_sel = |
1017 sel.selection_start(), gfx::SelectionModel::LEADING); | 1016 render_text->GetSelectionModelForSelectionStart(); |
1018 gfx::Rect start_cursor = render_text->GetCursorBounds(start_sel, false); | 1017 gfx::Rect start_cursor = render_text->GetCursorBounds(start_sel, true); |
1019 gfx::Rect end_cursor = render_text->GetCursorBounds(sel, false); | 1018 gfx::Rect end_cursor = render_text->GetCursorBounds(sel, true); |
1020 gfx::Point start(start_cursor.x(), start_cursor.bottom() - 1); | 1019 gfx::Point start(start_cursor.x(), start_cursor.bottom() - 1); |
1021 gfx::Point end(end_cursor.x(), end_cursor.bottom() - 1); | 1020 gfx::Point end(end_cursor.x(), end_cursor.bottom() - 1); |
1022 touch_selection_controller_->SelectionChanged(start, end); | 1021 touch_selection_controller_->SelectionChanged(start, end); |
1023 } | 1022 } |
1024 | 1023 |
1025 void NativeTextfieldViews::OnBeforeUserAction() { | 1024 void NativeTextfieldViews::OnBeforeUserAction() { |
1026 TextfieldController* controller = textfield_->GetController(); | 1025 TextfieldController* controller = textfield_->GetController(); |
1027 if (controller) | 1026 if (controller) |
1028 controller->OnBeforeUserAction(textfield_); | 1027 controller->OnBeforeUserAction(textfield_); |
1029 } | 1028 } |
(...skipping 30 matching lines...) Expand all Loading... |
1060 | 1059 |
1061 #if defined(USE_AURA) | 1060 #if defined(USE_AURA) |
1062 // static | 1061 // static |
1063 NativeTextfieldWrapper* NativeTextfieldWrapper::CreateWrapper( | 1062 NativeTextfieldWrapper* NativeTextfieldWrapper::CreateWrapper( |
1064 Textfield* field) { | 1063 Textfield* field) { |
1065 return new NativeTextfieldViews(field); | 1064 return new NativeTextfieldViews(field); |
1066 } | 1065 } |
1067 #endif | 1066 #endif |
1068 | 1067 |
1069 } // namespace views | 1068 } // namespace views |
OLD | NEW |