Pepper_47_C++_interfaces
input_event.cc
Go to the documentation of this file.
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 
6 
8 #include "ppapi/cpp/module.h"
10 #include "ppapi/cpp/point.h"
11 #include "ppapi/cpp/touch_point.h"
12 #include "ppapi/cpp/var.h"
13 
14 namespace pp {
15 
16 namespace {
17 
18 template <> const char* interface_name<PPB_InputEvent_1_0>() {
19  return PPB_INPUT_EVENT_INTERFACE_1_0;
20 }
21 
22 template <> const char* interface_name<PPB_KeyboardInputEvent_1_2>() {
23  return PPB_KEYBOARD_INPUT_EVENT_INTERFACE_1_2;
24 }
25 
26 template <> const char* interface_name<PPB_KeyboardInputEvent_1_0>() {
27  return PPB_KEYBOARD_INPUT_EVENT_INTERFACE_1_0;
28 }
29 
30 template <> const char* interface_name<PPB_MouseInputEvent_1_1>() {
31  return PPB_MOUSE_INPUT_EVENT_INTERFACE_1_1;
32 }
33 
34 template <> const char* interface_name<PPB_WheelInputEvent_1_0>() {
35  return PPB_WHEEL_INPUT_EVENT_INTERFACE_1_0;
36 }
37 
38 template <> const char* interface_name<PPB_TouchInputEvent_1_0>() {
39  return PPB_TOUCH_INPUT_EVENT_INTERFACE_1_0;
40 }
41 
42 template <> const char* interface_name<PPB_IMEInputEvent_1_0>() {
43  return PPB_IME_INPUT_EVENT_INTERFACE_1_0;
44 }
45 
46 } // namespace
47 
48 // InputEvent ------------------------------------------------------------------
49 
51 }
52 
53 InputEvent::InputEvent(PP_Resource input_event_resource) : Resource() {
54  // Type check the input event before setting it.
55  if (!has_interface<PPB_InputEvent_1_0>())
56  return;
57  if (get_interface<PPB_InputEvent_1_0>()->IsInputEvent(input_event_resource)) {
58  Module::Get()->core()->AddRefResource(input_event_resource);
59  PassRefFromConstructor(input_event_resource);
60  }
61 }
62 
64 }
65 
66 PP_InputEvent_Type InputEvent::GetType() const {
67  if (!has_interface<PPB_InputEvent_1_0>())
68  return PP_INPUTEVENT_TYPE_UNDEFINED;
69  return get_interface<PPB_InputEvent_1_0>()->GetType(pp_resource());
70 }
71 
72 PP_TimeTicks InputEvent::GetTimeStamp() const {
73  if (!has_interface<PPB_InputEvent_1_0>())
74  return 0.0f;
75  return get_interface<PPB_InputEvent_1_0>()->GetTimeStamp(pp_resource());
76 }
77 
78 uint32_t InputEvent::GetModifiers() const {
79  if (!has_interface<PPB_InputEvent_1_0>())
80  return 0;
81  return get_interface<PPB_InputEvent_1_0>()->GetModifiers(pp_resource());
82 }
83 
84 // MouseInputEvent -------------------------------------------------------------
85 
87 }
88 
90  // Type check the input event before setting it.
91  if (!has_interface<PPB_MouseInputEvent_1_1>())
92  return;
93  if (get_interface<PPB_MouseInputEvent_1_1>()->IsMouseInputEvent(
94  event.pp_resource())) {
97  }
98 }
99 
101  PP_InputEvent_Type type,
102  PP_TimeTicks time_stamp,
103  uint32_t modifiers,
104  PP_InputEvent_MouseButton mouse_button,
105  const Point& mouse_position,
106  int32_t click_count,
107  const Point& mouse_movement) {
108  // Type check the input event before setting it.
109  if (!has_interface<PPB_MouseInputEvent_1_1>())
110  return;
111  PassRefFromConstructor(get_interface<PPB_MouseInputEvent_1_1>()->Create(
112  instance.pp_instance(), type, time_stamp, modifiers, mouse_button,
113  &mouse_position.pp_point(), click_count, &mouse_movement.pp_point()));
114 }
115 
116 PP_InputEvent_MouseButton MouseInputEvent::GetButton() const {
117  if (!has_interface<PPB_MouseInputEvent_1_1>())
118  return PP_INPUTEVENT_MOUSEBUTTON_NONE;
119  return get_interface<PPB_MouseInputEvent_1_1>()->GetButton(pp_resource());
120 }
121 
123  if (!has_interface<PPB_MouseInputEvent_1_1>())
124  return Point();
125  return get_interface<PPB_MouseInputEvent_1_1>()->GetPosition(pp_resource());
126 }
127 
129  if (!has_interface<PPB_MouseInputEvent_1_1>())
130  return 0;
131  return get_interface<PPB_MouseInputEvent_1_1>()->GetClickCount(pp_resource());
132 }
133 
135  if (!has_interface<PPB_MouseInputEvent_1_1>())
136  return Point();
137  return get_interface<PPB_MouseInputEvent_1_1>()->GetMovement(pp_resource());
138 }
139 
140 // WheelInputEvent -------------------------------------------------------------
141 
143 }
144 
146  // Type check the input event before setting it.
147  if (!has_interface<PPB_WheelInputEvent_1_0>())
148  return;
149  if (get_interface<PPB_WheelInputEvent_1_0>()->IsWheelInputEvent(
150  event.pp_resource())) {
153  }
154 }
155 
157  PP_TimeTicks time_stamp,
158  uint32_t modifiers,
159  const FloatPoint& wheel_delta,
160  const FloatPoint& wheel_ticks,
161  bool scroll_by_page) {
162  // Type check the input event before setting it.
163  if (!has_interface<PPB_WheelInputEvent_1_0>())
164  return;
165  PassRefFromConstructor(get_interface<PPB_WheelInputEvent_1_0>()->Create(
166  instance.pp_instance(), time_stamp, modifiers,
167  &wheel_delta.pp_float_point(), &wheel_ticks.pp_float_point(),
168  PP_FromBool(scroll_by_page)));
169 }
170 
172  if (!has_interface<PPB_WheelInputEvent_1_0>())
173  return FloatPoint();
174  return get_interface<PPB_WheelInputEvent_1_0>()->GetDelta(pp_resource());
175 }
176 
178  if (!has_interface<PPB_WheelInputEvent_1_0>())
179  return FloatPoint();
180  return get_interface<PPB_WheelInputEvent_1_0>()->GetTicks(pp_resource());
181 }
182 
184  if (!has_interface<PPB_WheelInputEvent_1_0>())
185  return false;
186  return PP_ToBool(
187  get_interface<PPB_WheelInputEvent_1_0>()->GetScrollByPage(pp_resource()));
188 }
189 
190 // KeyboardInputEvent ----------------------------------------------------------
191 
193 }
194 
196  PP_Bool is_keyboard_event = PP_FALSE;
197 
198  if (has_interface<PPB_KeyboardInputEvent_1_2>()) {
199  is_keyboard_event =
200  get_interface<PPB_KeyboardInputEvent_1_2>()->IsKeyboardInputEvent(
201  event.pp_resource());
202  } else if (has_interface<PPB_KeyboardInputEvent_1_0>()) {
203  is_keyboard_event =
204  get_interface<PPB_KeyboardInputEvent_1_0>()->IsKeyboardInputEvent(
205  event.pp_resource());
206  }
207 
208  if (PP_ToBool(is_keyboard_event)) {
211  }
212 }
213 
215  PP_InputEvent_Type type,
216  PP_TimeTicks time_stamp,
217  uint32_t modifiers,
218  uint32_t key_code,
219  const Var& character_text) {
220  if (has_interface<PPB_KeyboardInputEvent_1_2>()) {
221  PassRefFromConstructor(get_interface<PPB_KeyboardInputEvent_1_2>()->Create(
222  instance.pp_instance(), type, time_stamp, modifiers, key_code,
223  character_text.pp_var(), Var().pp_var()));
224  } else if (has_interface<PPB_KeyboardInputEvent_1_0>()) {
225  PassRefFromConstructor(get_interface<PPB_KeyboardInputEvent_1_0>()->Create(
226  instance.pp_instance(), type, time_stamp, modifiers, key_code,
227  character_text.pp_var()));
228  }
229 }
230 
232  PP_InputEvent_Type type,
233  PP_TimeTicks time_stamp,
234  uint32_t modifiers,
235  uint32_t key_code,
236  const Var& character_text,
237  const Var& code) {
238  if (has_interface<PPB_KeyboardInputEvent_1_2>()) {
239  PassRefFromConstructor(get_interface<PPB_KeyboardInputEvent_1_2>()->Create(
240  instance.pp_instance(), type, time_stamp, modifiers, key_code,
241  character_text.pp_var(), code.pp_var()));
242  } else if (has_interface<PPB_KeyboardInputEvent_1_0>()) {
243  PassRefFromConstructor(get_interface<PPB_KeyboardInputEvent_1_0>()->Create(
244  instance.pp_instance(), type, time_stamp, modifiers, key_code,
245  character_text.pp_var()));
246  }
247 }
248 
250  if (has_interface<PPB_KeyboardInputEvent_1_2>()) {
251  return get_interface<PPB_KeyboardInputEvent_1_2>()->GetKeyCode(
252  pp_resource());
253  } else if (has_interface<PPB_KeyboardInputEvent_1_0>()) {
254  return get_interface<PPB_KeyboardInputEvent_1_0>()->GetKeyCode(
255  pp_resource());
256  }
257  return 0;
258 }
259 
261  if (has_interface<PPB_KeyboardInputEvent_1_2>()) {
262  return Var(PASS_REF,
263  get_interface<PPB_KeyboardInputEvent_1_2>()->GetCharacterText(
264  pp_resource()));
265  } else if (has_interface<PPB_KeyboardInputEvent_1_0>()) {
266  return Var(PASS_REF,
267  get_interface<PPB_KeyboardInputEvent_1_0>()->GetCharacterText(
268  pp_resource()));
269  }
270  return Var();
271 }
272 
274  if (has_interface<PPB_KeyboardInputEvent_1_2>()) {
275  return Var(PASS_REF,
276  get_interface<PPB_KeyboardInputEvent_1_2>()->GetCode(
277  pp_resource()));
278  }
279  return Var();
280 }
281 
282 // TouchInputEvent ------------------------------------------------------------
284 }
285 
287  if (!has_interface<PPB_TouchInputEvent_1_0>())
288  return;
289  // Type check the input event before setting it.
290  if (get_interface<PPB_TouchInputEvent_1_0>()->IsTouchInputEvent(
291  event.pp_resource())) {
294  }
295 }
296 
298  PP_InputEvent_Type type,
299  PP_TimeTicks time_stamp,
300  uint32_t modifiers) {
301  // Type check the input event before setting it.
302  if (!has_interface<PPB_TouchInputEvent_1_0>())
303  return;
304  PassRefFromConstructor(get_interface<PPB_TouchInputEvent_1_0>()->Create(
305  instance.pp_instance(), type, time_stamp, modifiers));
306 }
307 
308 void TouchInputEvent::AddTouchPoint(PP_TouchListType list,
309  PP_TouchPoint point) {
310  if (!has_interface<PPB_TouchInputEvent_1_0>())
311  return;
312  get_interface<PPB_TouchInputEvent_1_0>()->AddTouchPoint(pp_resource(), list,
313  &point);
314 }
315 
316 uint32_t TouchInputEvent::GetTouchCount(PP_TouchListType list) const {
317  if (!has_interface<PPB_TouchInputEvent_1_0>())
318  return 0;
319  return get_interface<PPB_TouchInputEvent_1_0>()->GetTouchCount(pp_resource(),
320  list);
321 }
322 
324  uint32_t id) const {
325  if (!has_interface<PPB_TouchInputEvent_1_0>())
326  return TouchPoint();
327  return TouchPoint(get_interface<PPB_TouchInputEvent_1_0>()->
328  GetTouchById(pp_resource(), list, id));
329 }
330 
332  uint32_t index) const {
333  if (!has_interface<PPB_TouchInputEvent_1_0>())
334  return TouchPoint();
335  return TouchPoint(get_interface<PPB_TouchInputEvent_1_0>()->
336  GetTouchByIndex(pp_resource(), list, index));
337 }
338 
339 // IMEInputEvent -------------------------------------------------------
340 
342 }
343 
345  if (has_interface<PPB_IMEInputEvent_1_0>()) {
346  if (get_interface<PPB_IMEInputEvent_1_0>()->IsIMEInputEvent(
347  event.pp_resource())) {
350  }
351  }
352 }
353 
355  const InstanceHandle& instance,
356  PP_InputEvent_Type type,
357  PP_TimeTicks time_stamp,
358  const Var& text,
359  const std::vector<uint32_t>& segment_offsets,
360  int32_t target_segment,
361  const std::pair<uint32_t, uint32_t>& selection) : InputEvent() {
362  if (!has_interface<PPB_IMEInputEvent_1_0>())
363  return;
364  uint32_t dummy = 0;
365  PassRefFromConstructor(get_interface<PPB_IMEInputEvent_1_0>()->Create(
366  instance.pp_instance(), type, time_stamp, text.pp_var(),
367  segment_offsets.empty() ? 0u :
368  static_cast<uint32_t>(segment_offsets.size() - 1),
369  segment_offsets.empty() ? &dummy : &segment_offsets[0],
370  target_segment, selection.first, selection.second));
371 }
372 
373 
375  if (has_interface<PPB_IMEInputEvent_1_0>()) {
376  return Var(PASS_REF,
377  get_interface<PPB_IMEInputEvent_1_0>()->GetText(
378  pp_resource()));
379  }
380  return Var();
381 }
382 
384  if (has_interface<PPB_IMEInputEvent_1_0>()) {
385  return get_interface<PPB_IMEInputEvent_1_0>()->GetSegmentNumber(
386  pp_resource());
387  }
388  return 0;
389 }
390 
391 uint32_t IMEInputEvent::GetSegmentOffset(uint32_t index) const {
392  if (has_interface<PPB_IMEInputEvent_1_0>()) {
393  return get_interface<PPB_IMEInputEvent_1_0>()->GetSegmentOffset(
394  pp_resource(), index);
395  }
396  return 0;
397 }
398 
400  if (has_interface<PPB_IMEInputEvent_1_0>()) {
401  return get_interface<PPB_IMEInputEvent_1_0>()->GetTargetSegment(
402  pp_resource());
403  }
404  return 0;
405 }
406 
407 void IMEInputEvent::GetSelection(uint32_t* start, uint32_t* end) const {
408  if (has_interface<PPB_IMEInputEvent_1_0>()) {
409  get_interface<PPB_IMEInputEvent_1_0>()->GetSelection(pp_resource(),
410  start,
411  end);
412  }
413 }
414 
415 } // namespace pp
void PassRefFromConstructor(PP_Resource resource)
Definition: resource.cc:50
bool GetScrollByPage() const
Definition: input_event.cc:183
void AddRefResource(PP_Resource resource)
Definition: core.h:31
uint32_t GetSegmentNumber() const
Definition: input_event.cc:383
TouchPoint GetTouchByIndex(PP_TouchListType list, uint32_t index) const
Definition: input_event.cc:331
const PP_Point & pp_point() const
Definition: point.h:58
Core * core()
Definition: module.h:74
void AddTouchPoint(PP_TouchListType list, PP_TouchPoint point)
Adds the touch-point to the specified TouchList.
Definition: input_event.cc:308
uint32_t GetModifiers() const
Definition: input_event.cc:78
A 2 dimensional point with 0,0 being the upper-left starting coordinate.
Definition: point.h:16
KeyboardInputEvent()
Constructs an is_null() keyboard input event object.
Definition: input_event.cc:192
const PP_FloatPoint & pp_float_point() const
Definition: point.h:197
IMEInputEvent()
Constructs an is_null() IME input event object.
Definition: input_event.cc:341
Var GetCharacterText() const
Definition: input_event.cc:260
PP_TimeTicks GetTimeStamp() const
Definition: input_event.cc:72
Var GetCode() const
Returns the DOM |code| for the keyboard event.
Definition: input_event.cc:273
Point GetPosition() const
Definition: input_event.cc:122
uint32_t GetTouchCount(PP_TouchListType list) const
Definition: input_event.cc:316
Var GetText() const
Definition: input_event.cc:374
const PP_Var & pp_var() const
Definition: var.h:226
TouchPoint GetTouchById(PP_TouchListType list, uint32_t id) const
Definition: input_event.cc:323
TouchInputEvent()
Constructs an is_null() touch input event object.
Definition: input_event.cc:283
PP_InputEvent_MouseButton GetButton() const
Definition: input_event.cc:116
int32_t GetClickCount() const
Definition: input_event.cc:128
uint32_t GetKeyCode() const
Definition: input_event.cc:249
InputEvent()
Default constructor that creates an is_null() InputEvent object.
Definition: input_event.cc:50
FloatPoint GetTicks() const
Definition: input_event.cc:177
friend class Var
Definition: resource.h:90
MouseInputEvent()
Constructs an is_null() mouse input event object.
Definition: input_event.cc:86
WheelInputEvent()
Constructs an is_null() wheel input event object.
Definition: input_event.cc:142
PP_Resource pp_resource() const
Definition: resource.h:47
Wrapper class for PP_TouchPoint.
Definition: touch_point.h:15
A generic type used for passing data types between the module and the page.
Definition: var.h:21
void GetSelection(uint32_t *start, uint32_t *end) const
Definition: input_event.cc:407
FloatPoint GetDelta() const
Definition: input_event.cc:171
PP_Instance pp_instance() const
A reference counted module resource.
Definition: resource.h:20
PP_InputEvent_Type GetType() const
Definition: input_event.cc:66
static Module * Get()
Point GetMovement() const
Definition: input_event.cc:134
int32_t GetTargetSegment() const
Definition: input_event.cc:399
uint32_t GetSegmentOffset(uint32_t index) const
Definition: input_event.cc:391