Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(100)

Side by Side Diff: ui/base/ime/input_method_chromeos.cc

Issue 163023002: Use base::string16 for CompositionText.Text instead of converting to utf-8 and back unnecessarily. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix unit test compile Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/base/ime/input_method_chromeos.h" 5 #include "ui/base/ime/input_method_chromeos.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 #include <set> 9 #include <set>
10 #include <vector> 10 #include <vector>
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 const chromeos::CompositionText& text, 489 const chromeos::CompositionText& text,
490 uint32 cursor_pos, 490 uint32 cursor_pos,
491 bool visible) { 491 bool visible) {
492 if (IsTextInputTypeNone()) 492 if (IsTextInputTypeNone())
493 return; 493 return;
494 494
495 if (!CanComposeInline()) { 495 if (!CanComposeInline()) {
496 chromeos::IBusPanelCandidateWindowHandlerInterface* candidate_window = 496 chromeos::IBusPanelCandidateWindowHandlerInterface* candidate_window =
497 chromeos::IMEBridge::Get()->GetCandidateWindowHandler(); 497 chromeos::IMEBridge::Get()->GetCandidateWindowHandler();
498 if (candidate_window) 498 if (candidate_window)
499 candidate_window->UpdatePreeditText( 499 candidate_window->UpdatePreeditText(text.text(), cursor_pos, visible);
500 base::UTF8ToUTF16(text.text()), cursor_pos, visible);
501 } 500 }
502 501
503 // |visible| argument is very confusing. For example, what's the correct 502 // |visible| argument is very confusing. For example, what's the correct
504 // behavior when: 503 // behavior when:
505 // 1. OnUpdatePreeditText() is called with a text and visible == false, then 504 // 1. OnUpdatePreeditText() is called with a text and visible == false, then
506 // 2. OnShowPreeditText() is called afterwards. 505 // 2. OnShowPreeditText() is called afterwards.
507 // 506 //
508 // If it's only for clearing the current preedit text, then why not just use 507 // If it's only for clearing the current preedit text, then why not just use
509 // OnHidePreeditText()? 508 // OnHidePreeditText()?
510 if (!visible) { 509 if (!visible) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 if (GetTextInputClient()) 552 if (GetTextInputClient())
554 GetTextInputClient()->ExtendSelectionAndDelete(length, 0U); 553 GetTextInputClient()->ExtendSelectionAndDelete(length, 0U);
555 } 554 }
556 555
557 bool InputMethodChromeOS::ExecuteCharacterComposer(const ui::KeyEvent& event) { 556 bool InputMethodChromeOS::ExecuteCharacterComposer(const ui::KeyEvent& event) {
558 if (!character_composer_.FilterKeyPress(event)) 557 if (!character_composer_.FilterKeyPress(event))
559 return false; 558 return false;
560 559
561 // CharacterComposer consumed the key event. Update the composition text. 560 // CharacterComposer consumed the key event. Update the composition text.
562 chromeos::CompositionText preedit; 561 chromeos::CompositionText preedit;
563 preedit.set_text( 562 preedit.set_text(character_composer_.preedit_string());
564 base::UTF16ToUTF8(character_composer_.preedit_string()));
565 UpdateCompositionText(preedit, preedit.text().size(), 563 UpdateCompositionText(preedit, preedit.text().size(),
566 !preedit.text().empty()); 564 !preedit.text().empty());
567 std::string commit_text = 565 std::string commit_text =
568 base::UTF16ToUTF8(character_composer_.composed_character()); 566 base::UTF16ToUTF8(character_composer_.composed_character());
569 if (!commit_text.empty()) { 567 if (!commit_text.empty()) {
570 CommitText(commit_text); 568 CommitText(commit_text);
571 } 569 }
572 return true; 570 return true;
573 } 571 }
574 572
575 void InputMethodChromeOS::ExtractCompositionText( 573 void InputMethodChromeOS::ExtractCompositionText(
576 const chromeos::CompositionText& text, 574 const chromeos::CompositionText& text,
577 uint32 cursor_position, 575 uint32 cursor_position,
578 CompositionText* out_composition) const { 576 CompositionText* out_composition) const {
579 out_composition->Clear(); 577 out_composition->Clear();
580 out_composition->text = base::UTF8ToUTF16(text.text()); 578 out_composition->text = text.text();
581 579
582 if (out_composition->text.empty()) 580 if (out_composition->text.empty())
583 return; 581 return;
584 582
585 // ibus uses character index for cursor position and attribute range, but we 583 // ibus uses character index for cursor position and attribute range, but we
586 // use char16 offset for them. So we need to do conversion here. 584 // use char16 offset for them. So we need to do conversion here.
587 std::vector<size_t> char16_offsets; 585 std::vector<size_t> char16_offsets;
588 size_t length = out_composition->text.length(); 586 size_t length = out_composition->text.length();
589 base::i18n::UTF16CharIterator char_iterator(&out_composition->text); 587 base::i18n::UTF16CharIterator char_iterator(&out_composition->text);
590 do { 588 do {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
644 } 642 }
645 643
646 // Use a black thin underline by default. 644 // Use a black thin underline by default.
647 if (out_composition->underlines.empty()) { 645 if (out_composition->underlines.empty()) {
648 out_composition->underlines.push_back(CompositionUnderline( 646 out_composition->underlines.push_back(CompositionUnderline(
649 0, length, SK_ColorBLACK, false /* thick */)); 647 0, length, SK_ColorBLACK, false /* thick */));
650 } 648 }
651 } 649 }
652 650
653 } // namespace ui 651 } // namespace ui
OLDNEW
« no previous file with comments | « chromeos/ime/composition_text_unittest.cc ('k') | ui/base/ime/input_method_chromeos_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698