Chromium Code Reviews| Index: ppapi/examples/ime/ime.cc |
| diff --git a/ppapi/examples/ime/ime.cc b/ppapi/examples/ime/ime.cc |
| index 2c3ee0b69eb70644fe37192947bbbb6c1aa14216..5d5db5ccfae4e9b2d75a0596059661fbecfd0943 100644 |
| --- a/ppapi/examples/ime/ime.cc |
| +++ b/ppapi/examples/ime/ime.cc |
| @@ -92,15 +92,17 @@ class TextFieldStatusHandler { |
| virtual ~TextFieldStatusHandler() {} |
| virtual void FocusIn(const pp::Rect& caret, const pp::Rect& bounding_box) {} |
| virtual void FocusOut() {} |
| + virtual void UpdateSelection(const std::string& text) {} |
| }; |
| class TextFieldStatusNotifyingHanlder : public TextFieldStatusHandler { |
| public: |
| explicit TextFieldStatusNotifyingHanlder(pp::Instance* instance) |
|
yzshen1
2012/03/08 07:51:43
Hanlder -> Handler, please.
kinaba
2012/03/14 04:28:54
Done.
|
| - : instance_(instance), |
| - textinput_control_(instance) {} |
| + : textinput_control_(instance) { |
| + } |
| protected: |
| + // Implement TextFieldStatusHandler. |
| virtual void FocusIn(const pp::Rect& caret, const pp::Rect& bounding_box) { |
| textinput_control_.SetTextInputType(PP_TEXTINPUT_TYPE_TEXT); |
| textinput_control_.UpdateCaretPosition(caret, bounding_box); |
| @@ -109,10 +111,22 @@ class TextFieldStatusNotifyingHanlder : public TextFieldStatusHandler { |
| textinput_control_.CancelCompositionText(); |
| textinput_control_.SetTextInputType(PP_TEXTINPUT_TYPE_NONE); |
| } |
| + virtual void UpdateSelection(const std::string& text) { |
| + textinput_control_.SetSelectionText(text); |
| + textinput_control_.SelectionChanged(); |
| + } |
| private: |
| - pp::Instance* instance_; |
| - pp::TextInput_Dev textinput_control_; |
| + class MyTextInput : public pp::TextInput_Dev { |
| + public: |
| + MyTextInput(pp::Instance* instance) : pp::TextInput_Dev(instance) {} |
| + virtual void RequestSurroundingText(uint32_t characters) { |
| + UpdateSurroundingText(selection_text_, 0, selection_text_.size()); |
| + } |
| + void SetSelectionText(const std::string& text) { selection_text_ = text; } |
| + std::string selection_text_; |
| + }; |
| + MyTextInput textinput_control_; |
| }; |
| // Hand-made text field for demonstrating text input API. |
| @@ -361,6 +375,9 @@ class MyTextField { |
| int px = font_.MeasureSimpleText(str); |
| pp::Rect caret(area_.x() + px, area_.y(), 0, area_.height() + 2); |
| status_handler_->FocusIn(caret, area_); |
| + status_handler_->UpdateSelection( |
| + utf8_text_.substr(SelectionLeft(), |
| + SelectionRight() - SelectionLeft())); |
| } |
| } |
| size_t SelectionLeft() const { |