15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef PPAPI_CPP_DEV_TEXT_INPUT_DEV_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_CPP_DEV_TEXT_INPUT_DEV_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/dev/ppb_text_input_dev.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/instance_handle.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pp { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Rect; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Instance; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class allows you to associate the PPP_TextInput_Dev and 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PPB_TextInput_Dev C-based interfaces with an object. It associates itself 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with the given instance, and registers as the global handler for handling the 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PPP_TextInput_Dev interface that the browser calls. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// You would typically use this either via inheritance on your instance: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// class MyInstance : public pp::Instance, public pp::TextInput_Dev { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MyInstance() : pp::TextInput_Dev(this) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// } 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ... 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// }; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// or by composition: 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// class MyTextInput : public pp::TextInput_Dev { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ... 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// }; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// class MyInstance : public pp::Instance { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MyInstance() : text_input_(this) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// } 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MyTextInput text_input_; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// }; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TextInput_Dev { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit TextInput_Dev(Instance* instance); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TextInput_Dev(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RequestSurroundingText(uint32_t desired_number_of_characters); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 48bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch void SetTextInputType(PP_TextInput_Type_Dev type); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateCaretPosition(const Rect& caret, const Rect& bounding_box); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CancelCompositionText(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SelectionChanged(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateSurroundingText(const std::string& text, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t caret, uint32_t anchor); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstanceHandle instance_; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace pp 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // PPAPI_CPP_DEV_TEXT_INPUT_DEV_H_ 62