Added documentation to web_view.js/web_view_experimental.js regarding the webview...
[chromium-blink-merge.git] / ppapi / shared_impl / ppb_input_event_shared.cc
blobc837e5aefcaae69b739f0cac481cf46db0b6a143
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.
5 #include "ppapi/shared_impl/ppb_input_event_shared.h"
7 #include "ppapi/shared_impl/var.h"
9 using ppapi::thunk::PPB_InputEvent_API;
11 namespace ppapi {
13 InputEventData::InputEventData()
14 : is_filtered(false),
15 event_type(PP_INPUTEVENT_TYPE_UNDEFINED),
16 event_time_stamp(0.0),
17 event_modifiers(0),
18 mouse_button(PP_INPUTEVENT_MOUSEBUTTON_NONE),
19 mouse_position(PP_MakePoint(0, 0)),
20 mouse_click_count(0),
21 mouse_movement(PP_MakePoint(0, 0)),
22 wheel_delta(PP_MakeFloatPoint(0.0f, 0.0f)),
23 wheel_ticks(PP_MakeFloatPoint(0.0f, 0.0f)),
24 wheel_scroll_by_page(false),
25 key_code(0),
26 usb_key_code(0),
27 code(),
28 character_text(),
29 composition_target_segment(-1),
30 composition_selection_start(0),
31 composition_selection_end(0),
32 touches(),
33 changed_touches(),
34 target_touches() {
37 InputEventData::~InputEventData() {
40 PPB_InputEvent_Shared::PPB_InputEvent_Shared(ResourceObjectType type,
41 PP_Instance instance,
42 const InputEventData& data)
43 : Resource(type, instance),
44 data_(data) {
47 PPB_InputEvent_API* PPB_InputEvent_Shared::AsPPB_InputEvent_API() {
48 return this;
51 const InputEventData& PPB_InputEvent_Shared::GetInputEventData() const {
52 return data_;
55 PP_InputEvent_Type PPB_InputEvent_Shared::GetType() {
56 return data_.event_type;
59 PP_TimeTicks PPB_InputEvent_Shared::GetTimeStamp() {
60 return data_.event_time_stamp;
63 uint32_t PPB_InputEvent_Shared::GetModifiers() {
64 return data_.event_modifiers;
67 PP_InputEvent_MouseButton PPB_InputEvent_Shared::GetMouseButton() {
68 return data_.mouse_button;
71 PP_Point PPB_InputEvent_Shared::GetMousePosition() {
72 return data_.mouse_position;
75 int32_t PPB_InputEvent_Shared::GetMouseClickCount() {
76 return data_.mouse_click_count;
79 PP_Point PPB_InputEvent_Shared::GetMouseMovement() {
80 return data_.mouse_movement;
83 PP_FloatPoint PPB_InputEvent_Shared::GetWheelDelta() {
84 return data_.wheel_delta;
87 PP_FloatPoint PPB_InputEvent_Shared::GetWheelTicks() {
88 return data_.wheel_ticks;
91 PP_Bool PPB_InputEvent_Shared::GetWheelScrollByPage() {
92 return PP_FromBool(data_.wheel_scroll_by_page);
95 uint32_t PPB_InputEvent_Shared::GetKeyCode() {
96 return data_.key_code;
99 PP_Var PPB_InputEvent_Shared::GetCharacterText() {
100 return StringVar::StringToPPVar(data_.character_text);
103 PP_Bool PPB_InputEvent_Shared::SetUsbKeyCode(uint32_t usb_key_code) {
104 data_.usb_key_code = usb_key_code;
105 return PP_TRUE;
108 uint32_t PPB_InputEvent_Shared::GetUsbKeyCode() {
109 return data_.usb_key_code;
112 PP_Var PPB_InputEvent_Shared::GetCode() {
113 return StringVar::StringToPPVar(data_.code);
116 uint32_t PPB_InputEvent_Shared::GetIMESegmentNumber() {
117 if (data_.composition_segment_offsets.empty())
118 return 0;
119 return static_cast<uint32_t>(data_.composition_segment_offsets.size() - 1);
122 uint32_t PPB_InputEvent_Shared::GetIMESegmentOffset(uint32_t index) {
123 if (index >= data_.composition_segment_offsets.size())
124 return 0;
125 return data_.composition_segment_offsets[index];
128 int32_t PPB_InputEvent_Shared::GetIMETargetSegment() {
129 return data_.composition_target_segment;
132 void PPB_InputEvent_Shared::GetIMESelection(uint32_t* start, uint32_t* end) {
133 if (start)
134 *start = data_.composition_selection_start;
135 if (end)
136 *end = data_.composition_selection_end;
139 void PPB_InputEvent_Shared::AddTouchPoint(PP_TouchListType list,
140 const PP_TouchPoint& point) {
141 switch (list) {
142 case PP_TOUCHLIST_TYPE_TOUCHES:
143 data_.touches.push_back(point);
144 break;
145 case PP_TOUCHLIST_TYPE_CHANGEDTOUCHES:
146 data_.changed_touches.push_back(point);
147 break;
148 case PP_TOUCHLIST_TYPE_TARGETTOUCHES:
149 data_.target_touches.push_back(point);
150 break;
151 default:
152 break;
156 uint32_t PPB_InputEvent_Shared::GetTouchCount(PP_TouchListType list) {
157 switch (list) {
158 case PP_TOUCHLIST_TYPE_TOUCHES:
159 return static_cast<uint32_t>(data_.touches.size());
160 case PP_TOUCHLIST_TYPE_CHANGEDTOUCHES:
161 return static_cast<uint32_t>(data_.changed_touches.size());
162 case PP_TOUCHLIST_TYPE_TARGETTOUCHES:
163 return static_cast<uint32_t>(data_.target_touches.size());
166 return 0;
169 PP_TouchPoint PPB_InputEvent_Shared::GetTouchByIndex(PP_TouchListType list,
170 uint32_t index) {
171 std::vector<PP_TouchPoint>* points;
172 switch (list) {
173 case PP_TOUCHLIST_TYPE_TOUCHES:
174 points = &data_.touches;
175 break;
176 case PP_TOUCHLIST_TYPE_CHANGEDTOUCHES:
177 points = &data_.changed_touches;
178 break;
179 case PP_TOUCHLIST_TYPE_TARGETTOUCHES:
180 points = &data_.target_touches;
181 break;
182 default:
183 return PP_MakeTouchPoint();
185 if (index >= points->size()) {
186 return PP_MakeTouchPoint();
188 return points->at(index);
191 PP_TouchPoint PPB_InputEvent_Shared::GetTouchById(PP_TouchListType list,
192 uint32_t id) {
193 const std::vector<PP_TouchPoint>* points;
194 switch (list) {
195 case PP_TOUCHLIST_TYPE_TOUCHES:
196 points = &data_.touches;
197 break;
198 case PP_TOUCHLIST_TYPE_CHANGEDTOUCHES:
199 points = &data_.changed_touches;
200 break;
201 case PP_TOUCHLIST_TYPE_TARGETTOUCHES:
202 points = &data_.target_touches;
203 break;
204 default:
205 return PP_MakeTouchPoint();
207 for (size_t i = 0; i < points->size(); i++) {
208 if (points->at(i).id == id)
209 return points->at(i);
211 return PP_MakeTouchPoint();
214 //static
215 PP_Resource PPB_InputEvent_Shared::CreateIMEInputEvent(
216 ResourceObjectType type,
217 PP_Instance instance,
218 PP_InputEvent_Type event_type,
219 PP_TimeTicks time_stamp,
220 struct PP_Var text,
221 uint32_t segment_number,
222 const uint32_t* segment_offsets,
223 int32_t target_segment,
224 uint32_t selection_start,
225 uint32_t selection_end) {
226 if (event_type != PP_INPUTEVENT_TYPE_IME_COMPOSITION_START &&
227 event_type != PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE &&
228 event_type != PP_INPUTEVENT_TYPE_IME_COMPOSITION_END &&
229 event_type != PP_INPUTEVENT_TYPE_IME_TEXT)
230 return 0;
232 InputEventData data;
233 data.event_type = event_type;
234 data.event_time_stamp = time_stamp;
235 if (text.type == PP_VARTYPE_STRING) {
236 StringVar* text_str = StringVar::FromPPVar(text);
237 if (!text_str)
238 return 0;
239 data.character_text = text_str->value();
241 data.composition_target_segment = target_segment;
242 if (segment_number != 0) {
243 data.composition_segment_offsets.assign(
244 &segment_offsets[0], &segment_offsets[segment_number + 1]);
246 data.composition_selection_start = selection_start;
247 data.composition_selection_end = selection_end;
249 return (new PPB_InputEvent_Shared(type, instance, data))->GetReference();
252 //static
253 PP_Resource PPB_InputEvent_Shared::CreateKeyboardInputEvent(
254 ResourceObjectType type,
255 PP_Instance instance,
256 PP_InputEvent_Type event_type,
257 PP_TimeTicks time_stamp,
258 uint32_t modifiers,
259 uint32_t key_code,
260 struct PP_Var character_text) {
261 if (event_type != PP_INPUTEVENT_TYPE_RAWKEYDOWN &&
262 event_type != PP_INPUTEVENT_TYPE_KEYDOWN &&
263 event_type != PP_INPUTEVENT_TYPE_KEYUP &&
264 event_type != PP_INPUTEVENT_TYPE_CHAR)
265 return 0;
267 InputEventData data;
268 data.event_type = event_type;
269 data.event_time_stamp = time_stamp;
270 data.event_modifiers = modifiers;
271 data.key_code = key_code;
272 if (character_text.type == PP_VARTYPE_STRING) {
273 StringVar* text_str = StringVar::FromPPVar(character_text);
274 if (!text_str)
275 return 0;
276 data.character_text = text_str->value();
279 return (new PPB_InputEvent_Shared(type, instance, data))->GetReference();
282 //static
283 PP_Resource PPB_InputEvent_Shared::CreateMouseInputEvent(
284 ResourceObjectType type,
285 PP_Instance instance,
286 PP_InputEvent_Type event_type,
287 PP_TimeTicks time_stamp,
288 uint32_t modifiers,
289 PP_InputEvent_MouseButton mouse_button,
290 const PP_Point* mouse_position,
291 int32_t click_count,
292 const PP_Point* mouse_movement) {
293 if (event_type != PP_INPUTEVENT_TYPE_MOUSEDOWN &&
294 event_type != PP_INPUTEVENT_TYPE_MOUSEUP &&
295 event_type != PP_INPUTEVENT_TYPE_MOUSEMOVE &&
296 event_type != PP_INPUTEVENT_TYPE_MOUSEENTER &&
297 event_type != PP_INPUTEVENT_TYPE_MOUSELEAVE)
298 return 0;
300 InputEventData data;
301 data.event_type = event_type;
302 data.event_time_stamp = time_stamp;
303 data.event_modifiers = modifiers;
304 data.mouse_button = mouse_button;
305 data.mouse_position = *mouse_position;
306 data.mouse_click_count = click_count;
307 data.mouse_movement = *mouse_movement;
309 return (new PPB_InputEvent_Shared(type, instance, data))->GetReference();
312 //static
313 PP_Resource PPB_InputEvent_Shared::CreateWheelInputEvent(
314 ResourceObjectType type,
315 PP_Instance instance,
316 PP_TimeTicks time_stamp,
317 uint32_t modifiers,
318 const PP_FloatPoint* wheel_delta,
319 const PP_FloatPoint* wheel_ticks,
320 PP_Bool scroll_by_page) {
321 InputEventData data;
322 data.event_type = PP_INPUTEVENT_TYPE_WHEEL;
323 data.event_time_stamp = time_stamp;
324 data.event_modifiers = modifiers;
325 data.wheel_delta = *wheel_delta;
326 data.wheel_ticks = *wheel_ticks;
327 data.wheel_scroll_by_page = PP_ToBool(scroll_by_page);
329 return (new PPB_InputEvent_Shared(type, instance, data))->GetReference();
332 // static
333 PP_Resource PPB_InputEvent_Shared::CreateTouchInputEvent(
334 ResourceObjectType type,
335 PP_Instance instance,
336 PP_InputEvent_Type event_type,
337 PP_TimeTicks time_stamp,
338 uint32_t modifiers) {
339 if (event_type != PP_INPUTEVENT_TYPE_TOUCHSTART &&
340 event_type != PP_INPUTEVENT_TYPE_TOUCHMOVE &&
341 event_type != PP_INPUTEVENT_TYPE_TOUCHEND &&
342 event_type != PP_INPUTEVENT_TYPE_TOUCHCANCEL)
343 return 0;
345 InputEventData data;
346 data.event_type = event_type;
347 data.event_time_stamp = time_stamp;
348 data.event_modifiers = modifiers;
349 return (new PPB_InputEvent_Shared(type, instance, data))->GetReference();
352 } // namespace ppapi