1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/basictypes.h" 6 #include "ppapi/c/dev/ppb_text_input_dev.h" 7 #include "ppapi/c/ppb_text_input_controller.h" 8 #include "ppapi/shared_impl/var.h" 9 #include "ppapi/thunk/enter.h" 10 #include "ppapi/thunk/ppb_instance_api.h" 11 #include "ppapi/thunk/thunk.h" 12 13 namespace ppapi { 14 namespace thunk { 15 16 namespace { 17 18 COMPILE_ASSERT(int(PP_TEXTINPUT_TYPE_DEV_NONE) == int(PP_TEXTINPUT_TYPE_NONE), 19 mismatching_enums); 20 COMPILE_ASSERT(int(PP_TEXTINPUT_TYPE_DEV_TEXT) == int(PP_TEXTINPUT_TYPE_TEXT), 21 mismatching_enums); 22 COMPILE_ASSERT( 23 int(PP_TEXTINPUT_TYPE_DEV_PASSWORD) == int(PP_TEXTINPUT_TYPE_PASSWORD), 24 mismatching_enums); 25 COMPILE_ASSERT( 26 int(PP_TEXTINPUT_TYPE_DEV_SEARCH) == int(PP_TEXTINPUT_TYPE_SEARCH), 27 mismatching_enums); 28 COMPILE_ASSERT(int(PP_TEXTINPUT_TYPE_DEV_EMAIL) == int(PP_TEXTINPUT_TYPE_EMAIL), 29 mismatching_enums); 30 COMPILE_ASSERT( 31 int(PP_TEXTINPUT_TYPE_DEV_NUMBER) == int(PP_TEXTINPUT_TYPE_NUMBER), 32 mismatching_enums); 33 COMPILE_ASSERT( 34 int(PP_TEXTINPUT_TYPE_DEV_TELEPHONE) == int(PP_TEXTINPUT_TYPE_TELEPHONE), 35 mismatching_enums); 36 COMPILE_ASSERT(int(PP_TEXTINPUT_TYPE_DEV_URL) == int(PP_TEXTINPUT_TYPE_URL), 37 mismatching_enums); 38 39 void SetTextInputType(PP_Instance instance, PP_TextInput_Type type) { 40 EnterInstance enter(instance); 41 if (enter.succeeded()) 42 enter.functions()->SetTextInputType(instance, type); 43 } 44 45 void SetTextInputType_0_2(PP_Instance instance, PP_TextInput_Type_Dev type) { 46 EnterInstance enter(instance); 47 if (enter.succeeded()) 48 enter.functions()->SetTextInputType(instance, 49 static_cast<PP_TextInput_Type>(type)); 50 } 51 52 void UpdateCaretPosition_0_2(PP_Instance instance, 53 const PP_Rect* caret, 54 const PP_Rect* bounding_box) { 55 EnterInstance enter(instance); 56 if (enter.succeeded() && caret && bounding_box) 57 enter.functions()->UpdateCaretPosition(instance, *caret, *bounding_box); 58 } 59 60 void UpdateCaretPosition(PP_Instance instance, 61 const PP_Rect* caret) { 62 EnterInstance enter(instance); 63 if (enter.succeeded() && caret) 64 enter.functions()->UpdateCaretPosition(instance, *caret, PP_Rect()); 65 } 66 67 void CancelCompositionText(PP_Instance instance) { 68 EnterInstance enter(instance); 69 if (enter.succeeded()) 70 enter.functions()->CancelCompositionText(instance); 71 } 72 73 void UpdateSurroundingText_0_2(PP_Instance instance, const char* text, 74 uint32_t caret, uint32_t anchor) { 75 EnterInstance enter(instance); 76 if (enter.succeeded()) 77 enter.functions()->UpdateSurroundingText(instance, text, caret, anchor); 78 } 79 80 void UpdateSurroundingText_1_0(PP_Instance instance, PP_Var text, 81 uint32_t caret, uint32_t anchor) { 82 EnterInstance enter(instance); 83 StringVar* var = StringVar::FromPPVar(text); 84 if (enter.succeeded() && var) 85 enter.functions()->UpdateSurroundingText(instance, 86 var->value().c_str(), 87 caret, 88 anchor); 89 } 90 91 void SelectionChanged(PP_Instance instance) { 92 EnterInstance enter(instance); 93 if (enter.succeeded()) 94 enter.functions()->SelectionChanged(instance); 95 } 96 97 const PPB_TextInput_Dev_0_1 g_ppb_textinput_0_1_thunk = { 98 &SetTextInputType_0_2, 99 &UpdateCaretPosition_0_2, 100 &CancelCompositionText, 101 }; 102 103 const PPB_TextInput_Dev_0_2 g_ppb_textinput_0_2_thunk = { 104 &SetTextInputType_0_2, 105 &UpdateCaretPosition_0_2, 106 &CancelCompositionText, 107 &UpdateSurroundingText_0_2, 108 &SelectionChanged, 109 }; 110 111 const PPB_TextInputController_1_0 g_ppb_textinputcontroller_1_0_thunk = { 112 &SetTextInputType, 113 &UpdateCaretPosition, 114 &CancelCompositionText, 115 &UpdateSurroundingText_1_0, 116 }; 117 118 } // namespace 119 120 const PPB_TextInput_Dev_0_1* GetPPB_TextInput_Dev_0_1_Thunk() { 121 return &g_ppb_textinput_0_1_thunk; 122 } 123 124 const PPB_TextInput_Dev_0_2* GetPPB_TextInput_Dev_0_2_Thunk() { 125 return &g_ppb_textinput_0_2_thunk; 126 } 127 128 const PPB_TextInputController_1_0* GetPPB_TextInputController_1_0_Thunk() { 129 return &g_ppb_textinputcontroller_1_0_thunk; 130 } 131 132 } // namespace thunk 133 } // namespace ppapi 134