| 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)
|
| - : 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 {
|
|
|