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

Unified Diff: ppapi/examples/ime/ime.cc

Issue 8769003: Pepper IME API for surrounding text retrieval. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sort. Created 8 years, 9 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 side-by-side diff with in-line comments
Download patch
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 {

Powered by Google App Engine
This is Rietveld 408576698