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