OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "win8/metro_driver/ime/text_store.h" | 5 #include "win8/metro_driver/ime/text_store.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/win/scoped_variant.h" | 9 #include "base/win/scoped_variant.h" |
10 #include "ui/base/win/atl_module.h" | 10 #include "ui/base/win/atl_module.h" |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 if (acp_end == -1) | 260 if (acp_end == -1) |
261 acp_end = string_buffer_size; | 261 acp_end = string_buffer_size; |
262 if (!((0 <= acp_start) && | 262 if (!((0 <= acp_start) && |
263 (acp_start <= acp_end) && | 263 (acp_start <= acp_end) && |
264 (acp_end <= string_buffer_size))) { | 264 (acp_end <= string_buffer_size))) { |
265 return TF_E_INVALIDPOS; | 265 return TF_E_INVALIDPOS; |
266 } | 266 } |
267 acp_end = std::min(acp_end, acp_start + static_cast<LONG>(text_buffer_size)); | 267 acp_end = std::min(acp_end, acp_start + static_cast<LONG>(text_buffer_size)); |
268 *text_buffer_copied = acp_end - acp_start; | 268 *text_buffer_copied = acp_end - acp_start; |
269 | 269 |
270 const string16& result = | 270 const base::string16& result = |
271 string_buffer_.substr(acp_start, *text_buffer_copied); | 271 string_buffer_.substr(acp_start, *text_buffer_copied); |
272 for (size_t i = 0; i < result.size(); ++i) | 272 for (size_t i = 0; i < result.size(); ++i) |
273 text_buffer[i] = result[i]; | 273 text_buffer[i] = result[i]; |
274 | 274 |
275 if (run_info_buffer_size) { | 275 if (run_info_buffer_size) { |
276 run_info_buffer[0].uCount = *text_buffer_copied; | 276 run_info_buffer[0].uCount = *text_buffer_copied; |
277 run_info_buffer[0].type = TS_RT_PLAIN; | 277 run_info_buffer[0].type = TS_RT_PLAIN; |
278 *run_info_buffer_copied = 1; | 278 *run_info_buffer_copied = 1; |
279 } | 279 } |
280 | 280 |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 return S_OK; | 407 return S_OK; |
408 } | 408 } |
409 | 409 |
410 if (!HasReadWriteLock()) | 410 if (!HasReadWriteLock()) |
411 return TS_E_NOLOCK; | 411 return TS_E_NOLOCK; |
412 if (!text_buffer) | 412 if (!text_buffer) |
413 return E_INVALIDARG; | 413 return E_INVALIDARG; |
414 | 414 |
415 DCHECK_LE(start_pos, end_pos); | 415 DCHECK_LE(start_pos, end_pos); |
416 string_buffer_ = string_buffer_.substr(0, start_pos) + | 416 string_buffer_ = string_buffer_.substr(0, start_pos) + |
417 string16(text_buffer, text_buffer + text_buffer_size) + | 417 base::string16(text_buffer, text_buffer + text_buffer_size) + |
418 string_buffer_.substr(end_pos); | 418 string_buffer_.substr(end_pos); |
419 if (acp_start) | 419 if (acp_start) |
420 *acp_start = start_pos; | 420 *acp_start = start_pos; |
421 if (acp_end) | 421 if (acp_end) |
422 *acp_end = new_end_pos; | 422 *acp_end = new_end_pos; |
423 if (text_change) { | 423 if (text_change) { |
424 text_change->acpStart = start_pos; | 424 text_change->acpStart = start_pos; |
425 text_change->acpOldEnd = end_pos; | 425 text_change->acpOldEnd = end_pos; |
426 text_change->acpNewEnd = new_end_pos; | 426 text_change->acpNewEnd = new_end_pos; |
427 } | 427 } |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
518 current_lock_type_ = 0; | 518 current_lock_type_ = 0; |
519 } | 519 } |
520 | 520 |
521 if (!edit_flag_) | 521 if (!edit_flag_) |
522 return S_OK; | 522 return S_OK; |
523 | 523 |
524 // If the text store is edited in OnLockGranted(), we may need to call | 524 // If the text store is edited in OnLockGranted(), we may need to call |
525 // TextStoreDelegate::ConfirmComposition() or | 525 // TextStoreDelegate::ConfirmComposition() or |
526 // TextStoreDelegate::SetComposition(). | 526 // TextStoreDelegate::SetComposition(). |
527 const uint32 new_committed_size = committed_size_; | 527 const uint32 new_committed_size = committed_size_; |
528 const string16& new_committed_string = | 528 const base::string16& new_committed_string = |
529 string_buffer_.substr(last_committed_size, | 529 string_buffer_.substr(last_committed_size, |
530 new_committed_size - last_committed_size); | 530 new_committed_size - last_committed_size); |
531 const string16& composition_string = | 531 const base::string16& composition_string = |
532 string_buffer_.substr(new_committed_size); | 532 string_buffer_.substr(new_committed_size); |
533 | 533 |
534 // If there is new committed string, calls | 534 // If there is new committed string, calls |
535 // TextStoreDelegate::ConfirmComposition(). | 535 // TextStoreDelegate::ConfirmComposition(). |
536 if ((!new_committed_string.empty())) | 536 if ((!new_committed_string.empty())) |
537 delegate_->OnTextCommitted(new_committed_string); | 537 delegate_->OnTextCommitted(new_committed_string); |
538 | 538 |
539 // Calls TextInputClient::SetCompositionText(). | 539 // Calls TextInputClient::SetCompositionText(). |
540 std::vector<metro_viewer::UnderlineInfo> underlines = underlines_; | 540 std::vector<metro_viewer::UnderlineInfo> underlines = underlines_; |
541 // Adjusts the offset. | 541 // Adjusts the offset. |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
850 if (edit_flag_) | 850 if (edit_flag_) |
851 return false; | 851 return false; |
852 | 852 |
853 if (string_buffer_.empty()) | 853 if (string_buffer_.empty()) |
854 return true; | 854 return true; |
855 | 855 |
856 // See the comment in TextStore::CancelComposition. | 856 // See the comment in TextStore::CancelComposition. |
857 // This logic is based on the observation about how to emulate | 857 // This logic is based on the observation about how to emulate |
858 // ImmNotifyIME(NI_COMPOSITIONSTR, CPS_COMPLETE, 0) by CUAS. | 858 // ImmNotifyIME(NI_COMPOSITIONSTR, CPS_COMPLETE, 0) by CUAS. |
859 | 859 |
860 const string16& composition_text = string_buffer_.substr(committed_size_); | 860 const base::string16& composition_text = |
| 861 string_buffer_.substr(committed_size_); |
861 if (!composition_text.empty()) | 862 if (!composition_text.empty()) |
862 delegate_->OnTextCommitted(composition_text); | 863 delegate_->OnTextCommitted(composition_text); |
863 | 864 |
864 const uint32 previous_buffer_size = | 865 const uint32 previous_buffer_size = |
865 static_cast<uint32>(string_buffer_.size()); | 866 static_cast<uint32>(string_buffer_.size()); |
866 string_buffer_.clear(); | 867 string_buffer_.clear(); |
867 committed_size_ = 0; | 868 committed_size_ = 0; |
868 selection_start_ = 0; | 869 selection_start_ = 0; |
869 selection_end_ = 0; | 870 selection_end_ = 0; |
870 if (text_store_acp_sink_mask_ & TS_AS_SEL_CHANGE) | 871 if (text_store_acp_sink_mask_ & TS_AS_SEL_CHANGE) |
(...skipping 17 matching lines...) Expand all Loading... |
888 | 889 |
889 bool TextStore::HasReadLock() const { | 890 bool TextStore::HasReadLock() const { |
890 return (current_lock_type_ & TS_LF_READ) == TS_LF_READ; | 891 return (current_lock_type_ & TS_LF_READ) == TS_LF_READ; |
891 } | 892 } |
892 | 893 |
893 bool TextStore::HasReadWriteLock() const { | 894 bool TextStore::HasReadWriteLock() const { |
894 return (current_lock_type_ & TS_LF_READWRITE) == TS_LF_READWRITE; | 895 return (current_lock_type_ & TS_LF_READWRITE) == TS_LF_READWRITE; |
895 } | 896 } |
896 | 897 |
897 } // namespace metro_driver | 898 } // namespace metro_driver |
OLD | NEW |