1a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// found in the LICENSE file.
4a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ppapi/cpp/text_input_controller.h"
6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ppapi/cpp/module_impl.h"
8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ppapi/cpp/rect.h"
9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ppapi/cpp/var.h"
10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace pp {
12a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace {
14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)template <> const char* interface_name<PPB_TextInputController_1_0>() {
16a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  return PPB_TEXTINPUTCONTROLLER_INTERFACE_1_0;
17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}  // namespace
20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TextInputController::TextInputController(const InstanceHandle& instance)
23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    : instance_(instance) {
24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
25a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TextInputController::~TextInputController() {
27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void TextInputController::SetTextInputType(PP_TextInput_Type type) {
30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (has_interface<PPB_TextInputController_1_0>()) {
31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    get_interface<PPB_TextInputController_1_0>()->SetTextInputType(
32a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        instance_.pp_instance(), type);
33a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
34a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
35a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void TextInputController::UpdateCaretPosition(const Rect& caret) {
37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (has_interface<PPB_TextInputController_1_0>()) {
38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    get_interface<PPB_TextInputController_1_0>()->UpdateCaretPosition(
39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        instance_.pp_instance(), &caret.pp_rect());
40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void TextInputController::CancelCompositionText() {
44a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (has_interface<PPB_TextInputController_1_0>()) {
45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    get_interface<PPB_TextInputController_1_0>()->CancelCompositionText(
46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        instance_.pp_instance());
47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
49a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
50a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void TextInputController::UpdateSurroundingText(const Var& text,
51a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                                                uint32_t caret,
52a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                                                uint32_t anchor) {
53a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (has_interface<PPB_TextInputController_1_0>()) {
54a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    get_interface<PPB_TextInputController_1_0>()->UpdateSurroundingText(
55a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        instance_.pp_instance(),
56a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        text.pp_var(),
57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        caret,
58a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        anchor);
59a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
62a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
63a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}  // namespace pp
64