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 "ppapi/cpp/dev/ime_input_event_dev.h" 6 7 #include "ppapi/cpp/instance.h" 8 #include "ppapi/cpp/module.h" 9 #include "ppapi/cpp/module_impl.h" 10 #include "ppapi/cpp/var.h" 11 12 namespace pp { 13 14 namespace { 15 16 template <> const char* interface_name<PPB_IMEInputEvent_Dev_0_2>() { 17 return PPB_IME_INPUT_EVENT_DEV_INTERFACE_0_2; 18 } 19 20 template <> const char* interface_name<PPB_IMEInputEvent_Dev_0_1>() { 21 return PPB_IME_INPUT_EVENT_DEV_INTERFACE_0_1; 22 } 23 24 } // namespace 25 26 // IMEInputEvent_Dev ------------------------------------------------------- 27 28 IMEInputEvent_Dev::IMEInputEvent_Dev() : InputEvent() { 29 } 30 31 IMEInputEvent_Dev::IMEInputEvent_Dev(const InputEvent& event) : InputEvent() { 32 bool is_ime_event = false; 33 if (has_interface<PPB_IMEInputEvent_Dev_0_2>()) { 34 if (get_interface<PPB_IMEInputEvent_Dev_0_2>()->IsIMEInputEvent( 35 event.pp_resource())) { 36 is_ime_event = true; 37 } 38 } else if (has_interface<PPB_IMEInputEvent_Dev_0_1>()) { 39 if (get_interface<PPB_IMEInputEvent_Dev_0_1>()->IsIMEInputEvent( 40 event.pp_resource())) { 41 is_ime_event = true; 42 } 43 } 44 45 if (is_ime_event) { 46 Module::Get()->core()->AddRefResource(event.pp_resource()); 47 PassRefFromConstructor(event.pp_resource()); 48 } 49 } 50 51 IMEInputEvent_Dev::IMEInputEvent_Dev( 52 const InstanceHandle& instance, 53 PP_InputEvent_Type type, 54 PP_TimeTicks time_stamp, 55 const Var& text, 56 const std::vector<uint32_t>& segment_offsets, 57 int32_t target_segment, 58 const std::pair<uint32_t, uint32_t>& selection) : InputEvent() { 59 if (!has_interface<PPB_IMEInputEvent_Dev_0_2>()) 60 return; 61 uint32_t dummy = 0; 62 PassRefFromConstructor(get_interface<PPB_IMEInputEvent_Dev_0_2>()->Create( 63 instance.pp_instance(), type, time_stamp, text.pp_var(), 64 segment_offsets.empty() ? 0 : segment_offsets.size() - 1, 65 segment_offsets.empty() ? &dummy : &segment_offsets[0], 66 target_segment, selection.first, selection.second)); 67 } 68 69 70 Var IMEInputEvent_Dev::GetText() const { 71 if (has_interface<PPB_IMEInputEvent_Dev_0_2>()) { 72 return Var(PASS_REF, 73 get_interface<PPB_IMEInputEvent_Dev_0_2>()->GetText( 74 pp_resource())); 75 } else if (has_interface<PPB_IMEInputEvent_Dev_0_1>()) { 76 return Var(PASS_REF, 77 get_interface<PPB_IMEInputEvent_Dev_0_1>()->GetText( 78 pp_resource())); 79 } 80 return Var(); 81 } 82 83 uint32_t IMEInputEvent_Dev::GetSegmentNumber() const { 84 if (has_interface<PPB_IMEInputEvent_Dev_0_2>()) { 85 return get_interface<PPB_IMEInputEvent_Dev_0_2>()->GetSegmentNumber( 86 pp_resource()); 87 } else if (has_interface<PPB_IMEInputEvent_Dev_0_1>()) { 88 return get_interface<PPB_IMEInputEvent_Dev_0_1>()->GetSegmentNumber( 89 pp_resource()); 90 } 91 return 0; 92 } 93 94 uint32_t IMEInputEvent_Dev::GetSegmentOffset(uint32_t index) const { 95 if (has_interface<PPB_IMEInputEvent_Dev_0_2>()) { 96 return get_interface<PPB_IMEInputEvent_Dev_0_2>()->GetSegmentOffset( 97 pp_resource(), index); 98 } else if (has_interface<PPB_IMEInputEvent_Dev_0_1>()) { 99 return get_interface<PPB_IMEInputEvent_Dev_0_1>()->GetSegmentOffset( 100 pp_resource(), index); 101 } 102 return 0; 103 } 104 105 int32_t IMEInputEvent_Dev::GetTargetSegment() const { 106 if (has_interface<PPB_IMEInputEvent_Dev_0_2>()) { 107 return get_interface<PPB_IMEInputEvent_Dev_0_2>()->GetTargetSegment( 108 pp_resource()); 109 } else if (has_interface<PPB_IMEInputEvent_Dev_0_1>()) { 110 return get_interface<PPB_IMEInputEvent_Dev_0_1>()->GetTargetSegment( 111 pp_resource()); 112 } 113 return 0; 114 } 115 116 std::pair<uint32_t, uint32_t> IMEInputEvent_Dev::GetSelection() const { 117 std::pair<uint32_t, uint32_t> range(0, 0); 118 if (has_interface<PPB_IMEInputEvent_Dev_0_2>()) { 119 get_interface<PPB_IMEInputEvent_Dev_0_2>()->GetSelection(pp_resource(), 120 &range.first, 121 &range.second); 122 } else if (has_interface<PPB_IMEInputEvent_Dev_0_1>()) { 123 get_interface<PPB_IMEInputEvent_Dev_0_1>()->GetSelection(pp_resource(), 124 &range.first, 125 &range.second); 126 } 127 return range; 128 } 129 130 131 } // namespace pp 132