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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <string> 5 #include <string>
6 #include <utility> 6 #include <utility>
7 #include <vector> 7 #include <vector>
8 8
9 #include "ppapi/c/dev/ppb_console_dev.h" 9 #include "ppapi/c/dev/ppb_console_dev.h"
10 #include "ppapi/c/dev/ppb_cursor_control_dev.h" 10 #include "ppapi/c/dev/ppb_cursor_control_dev.h"
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 return i; 85 return i;
86 } 86 }
87 87
88 } // namespace 88 } // namespace
89 89
90 class TextFieldStatusHandler { 90 class TextFieldStatusHandler {
91 public: 91 public:
92 virtual ~TextFieldStatusHandler() {} 92 virtual ~TextFieldStatusHandler() {}
93 virtual void FocusIn(const pp::Rect& caret, const pp::Rect& bounding_box) {} 93 virtual void FocusIn(const pp::Rect& caret, const pp::Rect& bounding_box) {}
94 virtual void FocusOut() {} 94 virtual void FocusOut() {}
95 virtual void UpdateSelection(const std::string& text) {}
95 }; 96 };
96 97
97 class TextFieldStatusNotifyingHanlder : public TextFieldStatusHandler { 98 class TextFieldStatusNotifyingHanlder : public TextFieldStatusHandler {
98 public: 99 public:
99 explicit TextFieldStatusNotifyingHanlder(pp::Instance* instance) 100 explicit TextFieldStatusNotifyingHanlder(pp::Instance* instance)
yzshen1 2012/03/08 07:51:43 Hanlder -> Handler, please.
kinaba 2012/03/14 04:28:54 Done.
100 : instance_(instance), 101 : textinput_control_(instance) {
101 textinput_control_(instance) {} 102 }
102 103
103 protected: 104 protected:
105 // Implement TextFieldStatusHandler.
104 virtual void FocusIn(const pp::Rect& caret, const pp::Rect& bounding_box) { 106 virtual void FocusIn(const pp::Rect& caret, const pp::Rect& bounding_box) {
105 textinput_control_.SetTextInputType(PP_TEXTINPUT_TYPE_TEXT); 107 textinput_control_.SetTextInputType(PP_TEXTINPUT_TYPE_TEXT);
106 textinput_control_.UpdateCaretPosition(caret, bounding_box); 108 textinput_control_.UpdateCaretPosition(caret, bounding_box);
107 } 109 }
108 virtual void FocusOut() { 110 virtual void FocusOut() {
109 textinput_control_.CancelCompositionText(); 111 textinput_control_.CancelCompositionText();
110 textinput_control_.SetTextInputType(PP_TEXTINPUT_TYPE_NONE); 112 textinput_control_.SetTextInputType(PP_TEXTINPUT_TYPE_NONE);
111 } 113 }
114 virtual void UpdateSelection(const std::string& text) {
115 textinput_control_.SetSelectionText(text);
116 textinput_control_.SelectionChanged();
117 }
112 118
113 private: 119 private:
114 pp::Instance* instance_; 120 class MyTextInput : public pp::TextInput_Dev {
115 pp::TextInput_Dev textinput_control_; 121 public:
122 MyTextInput(pp::Instance* instance) : pp::TextInput_Dev(instance) {}
123 virtual void RequestSurroundingText(uint32_t characters) {
124 UpdateSurroundingText(selection_text_, 0, selection_text_.size());
125 }
126 void SetSelectionText(const std::string& text) { selection_text_ = text; }
127 std::string selection_text_;
128 };
129 MyTextInput textinput_control_;
116 }; 130 };
117 131
118 // Hand-made text field for demonstrating text input API. 132 // Hand-made text field for demonstrating text input API.
119 class MyTextField { 133 class MyTextField {
120 public: 134 public:
121 MyTextField(pp::Instance* instance, TextFieldStatusHandler* handler, 135 MyTextField(pp::Instance* instance, TextFieldStatusHandler* handler,
122 int x, int y, int width, int height) 136 int x, int y, int width, int height)
123 : instance_(instance), 137 : instance_(instance),
124 status_handler_(handler), 138 status_handler_(handler),
125 area_(x, y, width, height), 139 area_(x, y, width, height),
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 private: 368 private:
355 // Notify the plugin instance that the caret position has changed. 369 // Notify the plugin instance that the caret position has changed.
356 void CaretPosChanged() { 370 void CaretPosChanged() {
357 if (Focused()) { 371 if (Focused()) {
358 std::string str = utf8_text_.substr(0, caret_pos_); 372 std::string str = utf8_text_.substr(0, caret_pos_);
359 if (!composition_.empty()) 373 if (!composition_.empty())
360 str += composition_.substr(0, composition_selection_.first); 374 str += composition_.substr(0, composition_selection_.first);
361 int px = font_.MeasureSimpleText(str); 375 int px = font_.MeasureSimpleText(str);
362 pp::Rect caret(area_.x() + px, area_.y(), 0, area_.height() + 2); 376 pp::Rect caret(area_.x() + px, area_.y(), 0, area_.height() + 2);
363 status_handler_->FocusIn(caret, area_); 377 status_handler_->FocusIn(caret, area_);
378 status_handler_->UpdateSelection(
379 utf8_text_.substr(SelectionLeft(),
380 SelectionRight() - SelectionLeft()));
364 } 381 }
365 } 382 }
366 size_t SelectionLeft() const { 383 size_t SelectionLeft() const {
367 return std::min(caret_pos_, anchor_pos_); 384 return std::min(caret_pos_, anchor_pos_);
368 } 385 }
369 size_t SelectionRight() const { 386 size_t SelectionRight() const {
370 return std::max(caret_pos_, anchor_pos_); 387 return std::max(caret_pos_, anchor_pos_);
371 } 388 }
372 bool HasSelection() const { 389 bool HasSelection() const {
373 return caret_pos_ != anchor_pos_; 390 return caret_pos_ != anchor_pos_;
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 } 727 }
711 }; 728 };
712 729
713 namespace pp { 730 namespace pp {
714 731
715 Module* CreateModule() { 732 Module* CreateModule() {
716 return new MyModule(); 733 return new MyModule();
717 } 734 }
718 735
719 } // namespace pp 736 } // namespace pp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698