1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Use of this source code is governed by a BSD-style license that can be
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// found in the LICENSE file.
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef PPAPI_CPP_DEV_TEXT_INPUT_DEV_H_
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PPAPI_CPP_DEV_TEXT_INPUT_DEV_H_
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <string>
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "ppapi/c/dev/ppb_text_input_dev.h"
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "ppapi/cpp/instance_handle.h"
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnamespace pp {
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass Rect;
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass Instance;
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// This class allows you to associate the PPP_TextInput_Dev and
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// PPB_TextInput_Dev C-based interfaces with an object. It associates itself
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// with the given instance, and registers as the global handler for handling the
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// PPP_TextInput_Dev interface that the browser calls.
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// You would typically use this either via inheritance on your instance:
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//   class MyInstance : public pp::Instance, public pp::TextInput_Dev {
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//     MyInstance() : pp::TextInput_Dev(this) {
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//     }
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//     ...
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//   };
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// or by composition:
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//   class MyTextInput : public pp::TextInput_Dev {
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//     ...
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//   };
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//   class MyInstance : public pp::Instance {
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//     MyInstance() : text_input_(this) {
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//     }
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//     MyTextInput text_input_;
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//   };
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass TextInput_Dev {
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  explicit TextInput_Dev(Instance* instance);
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  virtual ~TextInput_Dev();
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  virtual void RequestSurroundingText(uint32_t desired_number_of_characters);
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  void SetTextInputType(PP_TextInput_Type_Dev type);
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  void UpdateCaretPosition(const Rect& caret, const Rect& bounding_box);
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  void CancelCompositionText();
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  void SelectionChanged();
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  void UpdateSurroundingText(const std::string& text,
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                             uint32_t caret, uint32_t anchor);
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org private:
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  InstanceHandle instance_;
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}  // namespace pp
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif  // PPAPI_CPP_DEV_TEXT_INPUT_DEV_H_
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org