| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_model.h" | 5 #include "ui/views/controls/textfield/textfield_model.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 at /* old cursor */, | 153 at /* old cursor */, |
| 154 base::string16(), | 154 base::string16(), |
| 155 at, | 155 at, |
| 156 false /* N/A */, | 156 false /* N/A */, |
| 157 at + new_text.length() /* new cursor */, | 157 at + new_text.length() /* new cursor */, |
| 158 new_text, | 158 new_text, |
| 159 at) { | 159 at) { |
| 160 } | 160 } |
| 161 | 161 |
| 162 // Edit implementation. | 162 // Edit implementation. |
| 163 virtual bool DoMerge(const Edit* edit) OVERRIDE { | 163 virtual bool DoMerge(const Edit* edit) override { |
| 164 if (edit->type() != INSERT_EDIT || new_text_end() != edit->new_text_start_) | 164 if (edit->type() != INSERT_EDIT || new_text_end() != edit->new_text_start_) |
| 165 return false; | 165 return false; |
| 166 // If continuous edit, merge it. | 166 // If continuous edit, merge it. |
| 167 // TODO(oshima): gtk splits edits between whitespace. Find out what | 167 // TODO(oshima): gtk splits edits between whitespace. Find out what |
| 168 // we want to here and implement if necessary. | 168 // we want to here and implement if necessary. |
| 169 new_text_ += edit->new_text_; | 169 new_text_ += edit->new_text_; |
| 170 new_cursor_pos_ = edit->new_cursor_pos_; | 170 new_cursor_pos_ = edit->new_cursor_pos_; |
| 171 return true; | 171 return true; |
| 172 } | 172 } |
| 173 }; | 173 }; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 186 old_cursor_pos, | 186 old_cursor_pos, |
| 187 old_text, | 187 old_text, |
| 188 old_text_start, | 188 old_text_start, |
| 189 backward, | 189 backward, |
| 190 new_cursor_pos, | 190 new_cursor_pos, |
| 191 new_text, | 191 new_text, |
| 192 new_text_start) { | 192 new_text_start) { |
| 193 } | 193 } |
| 194 | 194 |
| 195 // Edit implementation. | 195 // Edit implementation. |
| 196 virtual bool DoMerge(const Edit* edit) OVERRIDE { | 196 virtual bool DoMerge(const Edit* edit) override { |
| 197 if (edit->type() == DELETE_EDIT || | 197 if (edit->type() == DELETE_EDIT || |
| 198 new_text_end() != edit->old_text_start_ || | 198 new_text_end() != edit->old_text_start_ || |
| 199 edit->old_text_start_ != edit->new_text_start_) | 199 edit->old_text_start_ != edit->new_text_start_) |
| 200 return false; | 200 return false; |
| 201 old_text_ += edit->old_text_; | 201 old_text_ += edit->old_text_; |
| 202 new_text_ += edit->new_text_; | 202 new_text_ += edit->new_text_; |
| 203 new_cursor_pos_ = edit->new_cursor_pos_; | 203 new_cursor_pos_ = edit->new_cursor_pos_; |
| 204 return true; | 204 return true; |
| 205 } | 205 } |
| 206 }; | 206 }; |
| 207 | 207 |
| 208 class DeleteEdit : public Edit { | 208 class DeleteEdit : public Edit { |
| 209 public: | 209 public: |
| 210 DeleteEdit(bool mergeable, | 210 DeleteEdit(bool mergeable, |
| 211 const base::string16& text, | 211 const base::string16& text, |
| 212 size_t text_start, | 212 size_t text_start, |
| 213 bool backward) | 213 bool backward) |
| 214 : Edit(DELETE_EDIT, | 214 : Edit(DELETE_EDIT, |
| 215 mergeable ? MERGEABLE : DO_NOT_MERGE, | 215 mergeable ? MERGEABLE : DO_NOT_MERGE, |
| 216 (backward ? text_start + text.length() : text_start), | 216 (backward ? text_start + text.length() : text_start), |
| 217 text, | 217 text, |
| 218 text_start, | 218 text_start, |
| 219 backward, | 219 backward, |
| 220 text_start, | 220 text_start, |
| 221 base::string16(), | 221 base::string16(), |
| 222 text_start) { | 222 text_start) { |
| 223 } | 223 } |
| 224 | 224 |
| 225 // Edit implementation. | 225 // Edit implementation. |
| 226 virtual bool DoMerge(const Edit* edit) OVERRIDE { | 226 virtual bool DoMerge(const Edit* edit) override { |
| 227 if (edit->type() != DELETE_EDIT) | 227 if (edit->type() != DELETE_EDIT) |
| 228 return false; | 228 return false; |
| 229 | 229 |
| 230 if (delete_backward_) { | 230 if (delete_backward_) { |
| 231 // backspace can be merged only with backspace at the same position. | 231 // backspace can be merged only with backspace at the same position. |
| 232 if (!edit->delete_backward_ || old_text_start_ != edit->old_text_end()) | 232 if (!edit->delete_backward_ || old_text_start_ != edit->old_text_end()) |
| 233 return false; | 233 return false; |
| 234 old_text_start_ = edit->old_text_start_; | 234 old_text_start_ = edit->old_text_start_; |
| 235 old_text_ = edit->old_text_ + old_text_; | 235 old_text_ = edit->old_text_ + old_text_; |
| 236 new_cursor_pos_ = edit->new_cursor_pos_; | 236 new_cursor_pos_ = edit->new_cursor_pos_; |
| (...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 760 ClearComposition(); | 760 ClearComposition(); |
| 761 if (delete_from != delete_to) | 761 if (delete_from != delete_to) |
| 762 render_text_->SetText(old_text.erase(delete_from, delete_to - delete_from)); | 762 render_text_->SetText(old_text.erase(delete_from, delete_to - delete_from)); |
| 763 if (!new_text.empty()) | 763 if (!new_text.empty()) |
| 764 render_text_->SetText(old_text.insert(new_text_insert_at, new_text)); | 764 render_text_->SetText(old_text.insert(new_text_insert_at, new_text)); |
| 765 render_text_->SetCursorPosition(new_cursor_pos); | 765 render_text_->SetCursorPosition(new_cursor_pos); |
| 766 // TODO(oshima): Select text that was just undone, like Mac (but not GTK). | 766 // TODO(oshima): Select text that was just undone, like Mac (but not GTK). |
| 767 } | 767 } |
| 768 | 768 |
| 769 } // namespace views | 769 } // namespace views |
| OLD | NEW |