15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_errors.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/enter.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/ppb_input_event_api.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/ppb_instance_api.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/resource_creation_api.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/thunk.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace thunk {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef EnterResource<PPB_InputEvent_API> EnterInputEvent;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// InputEvent ------------------------------------------------------------------
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t RequestInputEvents(PP_Instance instance, uint32_t event_classes) {
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_InputEvent::RequestInputEvents()";
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInstance enter(instance);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return enter.retval();
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.functions()->RequestInputEvents(instance, event_classes);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t RequestFilteringInputEvents(PP_Instance instance,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    uint32_t event_classes) {
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_InputEvent::RequestFilteringInputEvents()";
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInstance enter(instance);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return enter.retval();
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.functions()->RequestFilteringInputEvents(instance,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                        event_classes);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ClearInputEventRequest(PP_Instance instance,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            uint32_t event_classes) {
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_InputEvent::ClearInputEventRequest()";
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInstance enter(instance);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.succeeded())
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    enter.functions()->ClearInputEventRequest(instance, event_classes);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool IsInputEvent(PP_Resource resource) {
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_InputEvent::IsInputEvent()";
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(resource, false);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.succeeded() ? PP_TRUE : PP_FALSE;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_InputEvent_Type GetType(PP_Resource event) {
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_InputEvent::GetType()";
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(event, true);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_INPUTEVENT_TYPE_UNDEFINED;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetType();
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_TimeTicks GetTimeStamp(PP_Resource event) {
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_InputEvent::GetTimeStamp()";
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(event, true);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0.0;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetTimeStamp();
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t GetModifiers(PP_Resource event) {
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_InputEvent::GetModifiers()";
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(event, true);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetModifiers();
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_InputEvent g_ppb_input_event_thunk = {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &RequestInputEvents,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &RequestFilteringInputEvents,
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &ClearInputEventRequest,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &IsInputEvent,
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetType,
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetTimeStamp,
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetModifiers
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Mouse -----------------------------------------------------------------------
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource CreateMouseInputEvent1_0(PP_Instance instance,
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     PP_InputEvent_Type type,
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     PP_TimeTicks time_stamp,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     uint32_t modifiers,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     PP_InputEvent_MouseButton mouse_button,
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const PP_Point* mouse_position,
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     int32_t click_count) {
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_MouseInputEvent::Create()";
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterResourceCreation enter(instance);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Point mouse_movement = PP_MakePoint(0, 0);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.functions()->CreateMouseInputEvent(instance, type, time_stamp,
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  modifiers, mouse_button,
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  mouse_position, click_count,
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  &mouse_movement);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource CreateMouseInputEvent1_1(PP_Instance instance,
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     PP_InputEvent_Type type,
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     PP_TimeTicks time_stamp,
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     uint32_t modifiers,
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     PP_InputEvent_MouseButton mouse_button,
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const PP_Point* mouse_position,
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     int32_t click_count,
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const PP_Point* mouse_movement) {
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_MouseInputEvent::Create()";
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterResourceCreation enter(instance);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.functions()->CreateMouseInputEvent(instance, type, time_stamp,
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  modifiers, mouse_button,
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  mouse_position, click_count,
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  mouse_movement);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool IsMouseInputEvent(PP_Resource resource) {
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_MouseInputEvent::IsMouseInputEvent()";
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!IsInputEvent(resource))
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_FALSE;  // Prevent warning log in GetType.
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_InputEvent_Type type = GetType(resource);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PP_FromBool(type == PP_INPUTEVENT_TYPE_MOUSEDOWN ||
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     type == PP_INPUTEVENT_TYPE_MOUSEUP ||
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     type == PP_INPUTEVENT_TYPE_MOUSEMOVE ||
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     type == PP_INPUTEVENT_TYPE_MOUSEENTER ||
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     type == PP_INPUTEVENT_TYPE_MOUSELEAVE ||
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     type == PP_INPUTEVENT_TYPE_CONTEXTMENU);
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_InputEvent_MouseButton GetMouseButton(PP_Resource mouse_event) {
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_MouseInputEvent::GetButton()";
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(mouse_event, true);
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_INPUTEVENT_MOUSEBUTTON_NONE;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetMouseButton();
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Point GetMousePosition(PP_Resource mouse_event) {
148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_MouseInputEvent::GetPosition()";
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(mouse_event, true);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_MakePoint(0, 0);
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetMousePosition();
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t GetMouseClickCount(PP_Resource mouse_event) {
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_MouseInputEvent::GetClickCount()";
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(mouse_event, true);
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetMouseClickCount();
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Point GetMouseMovement(PP_Resource mouse_event) {
164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_MouseInputEvent::GetMovement()";
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(mouse_event, true);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_MakePoint(0, 0);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetMouseMovement();
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_MouseInputEvent_1_0 g_ppb_mouse_input_event_1_0_thunk = {
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &CreateMouseInputEvent1_0,
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &IsMouseInputEvent,
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetMouseButton,
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetMousePosition,
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetMouseClickCount
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_MouseInputEvent g_ppb_mouse_input_event_1_1_thunk = {
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &CreateMouseInputEvent1_1,
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &IsMouseInputEvent,
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetMouseButton,
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetMousePosition,
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetMouseClickCount,
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetMouseMovement
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Wheel -----------------------------------------------------------------------
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource CreateWheelInputEvent(PP_Instance instance,
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  PP_TimeTicks time_stamp,
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  uint32_t modifiers,
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  const PP_FloatPoint* wheel_delta,
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  const PP_FloatPoint* wheel_ticks,
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  PP_Bool scroll_by_page) {
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_WheelInputEvent::Create()";
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterResourceCreation enter(instance);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.functions()->CreateWheelInputEvent(instance, time_stamp,
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  modifiers, wheel_delta,
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  wheel_ticks, scroll_by_page);
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool IsWheelInputEvent(PP_Resource resource) {
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_WheelInputEvent::IsWheelInputEvent()";
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!IsInputEvent(resource))
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_FALSE;  // Prevent warning log in GetType.
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_InputEvent_Type type = GetType(resource);
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PP_FromBool(type == PP_INPUTEVENT_TYPE_WHEEL);
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_FloatPoint GetWheelDelta(PP_Resource wheel_event) {
214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_WheelInputEvent::GetDelta()";
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(wheel_event, true);
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_MakeFloatPoint(0.0f, 0.0f);
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetWheelDelta();
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_FloatPoint GetWheelTicks(PP_Resource wheel_event) {
222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_WheelInputEvent::GetTicks()";
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(wheel_event, true);
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_MakeFloatPoint(0.0f, 0.0f);
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetWheelTicks();
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool GetWheelScrollByPage(PP_Resource wheel_event) {
230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_WheelInputEvent::GetScrollByPage()";
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(wheel_event, true);
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_FALSE;
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetWheelScrollByPage();
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_WheelInputEvent g_ppb_wheel_input_event_thunk = {
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &CreateWheelInputEvent,
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &IsWheelInputEvent,
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetWheelDelta,
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetWheelTicks,
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetWheelScrollByPage
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Keyboard --------------------------------------------------------------------
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PP_Resource CreateKeyboardInputEvent_1_0(PP_Instance instance,
2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         PP_InputEvent_Type type,
2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         PP_TimeTicks time_stamp,
2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         uint32_t modifiers,
2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         uint32_t key_code,
2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         struct PP_Var character_text) {
253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_KeyboardInputEvent::Create()";
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterResourceCreation enter(instance);
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.functions()->CreateKeyboardInputEvent_1_0(instance, type,
2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                         time_stamp,
2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                         modifiers, key_code,
2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                         character_text);
2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PP_Resource CreateKeyboardInputEvent_1_2(PP_Instance instance,
2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         PP_InputEvent_Type type,
2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         PP_TimeTicks time_stamp,
2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         uint32_t modifiers,
2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         uint32_t key_code,
2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         struct PP_Var character_text,
2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         struct PP_Var code) {
2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_KeyboardInputEvent::Create()";
2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterResourceCreation enter(instance);
2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return 0;
2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.functions()->CreateKeyboardInputEvent_1_2(instance, type,
2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                         time_stamp,
2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                         modifiers, key_code,
2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                         character_text, code);
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool IsKeyboardInputEvent(PP_Resource resource) {
281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_KeyboardInputEvent::IsKeyboardInputEvent()";
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!IsInputEvent(resource))
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_FALSE;  // Prevent warning log in GetType.
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_InputEvent_Type type = GetType(resource);
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PP_FromBool(type == PP_INPUTEVENT_TYPE_KEYDOWN ||
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     type == PP_INPUTEVENT_TYPE_KEYUP ||
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     type == PP_INPUTEVENT_TYPE_RAWKEYDOWN ||
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     type == PP_INPUTEVENT_TYPE_CHAR);
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t GetKeyCode(PP_Resource key_event) {
292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_KeyboardInputEvent::GetKeyCode()";
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(key_event, true);
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetKeyCode();
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Var GetCharacterText(PP_Resource character_event) {
300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_KeyboardInputEvent::GetCharacterText()";
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(character_event, true);
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_MakeUndefined();
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetCharacterText();
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
307d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)PP_Var GetCode(PP_Resource key_event) {
3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VLOG(4) << "PPB_KeyboardInputEvent::GetCode()";
309d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EnterInputEvent enter(key_event, true);
310d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (enter.failed())
311d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    return PP_MakeUndefined();
312d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return enter.object()->GetCode();
313d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
314d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const PPB_KeyboardInputEvent_1_0 g_ppb_keyboard_input_event_1_0_thunk = {
3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &CreateKeyboardInputEvent_1_0,
3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &IsKeyboardInputEvent,
3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetKeyCode,
3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetCharacterText
3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const PPB_KeyboardInputEvent g_ppb_keyboard_input_event_thunk = {
3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &CreateKeyboardInputEvent_1_2,
3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &IsKeyboardInputEvent,
3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetKeyCode,
3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetCharacterText,
3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetCode
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Composition -----------------------------------------------------------------
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource CreateIMEInputEvent(PP_Instance instance,
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                PP_InputEvent_Type type,
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                PP_TimeTicks time_stamp,
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                PP_Var text,
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                uint32_t segment_number,
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const uint32_t segment_offsets[],
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                int32_t target_segment,
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                uint32_t selection_start,
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                uint32_t selection_end) {
341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_IMEInputEvent_Dev::Create()";
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterResourceCreation enter(instance);
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.functions()->CreateIMEInputEvent(instance, type, time_stamp,
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                text, segment_number,
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                segment_offsets,
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                target_segment,
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                selection_start,
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                selection_end);
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool IsIMEInputEvent(PP_Resource resource) {
354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_IMEInputEvent_Dev::IsIMEInputEvent()";
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!IsInputEvent(resource))
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_FALSE;  // Prevent warning log in GetType.
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_InputEvent_Type type = GetType(resource);
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PP_FromBool(type == PP_INPUTEVENT_TYPE_IME_COMPOSITION_START ||
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     type == PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE ||
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     type == PP_INPUTEVENT_TYPE_IME_COMPOSITION_END ||
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     type == PP_INPUTEVENT_TYPE_IME_TEXT);
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Var GetIMEText(PP_Resource ime_event) {
365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_IMEInputEvent_Dev::GetText()";
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetCharacterText(ime_event);
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t GetIMESegmentNumber(PP_Resource ime_event) {
370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_IMEInputEvent_Dev::GetSegmentNumber()";
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(ime_event, true);
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetIMESegmentNumber();
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t GetIMESegmentOffset(PP_Resource ime_event, uint32_t index) {
378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_IMEInputEvent_Dev::GetSegmentOffset()";
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(ime_event, true);
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetIMESegmentOffset(index);
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t GetIMETargetSegment(PP_Resource ime_event) {
386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_IMEInputEvent_Dev::GetTargetSegment()";
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(ime_event, true);
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return -1;
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetIMETargetSegment();
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GetIMESelection(PP_Resource ime_event, uint32_t* start, uint32_t* end) {
394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_IMEInputEvent_Dev::GetSelection()";
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(ime_event, true);
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed()) {
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (start)
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *start = 0;
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (end)
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *end = 0;
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enter.object()->GetIMESelection(start, end);
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_IMEInputEvent_Dev_0_1 g_ppb_ime_input_event_0_1_thunk = {
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &IsIMEInputEvent,
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetIMEText,
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetIMESegmentNumber,
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetIMESegmentOffset,
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetIMETargetSegment,
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetIMESelection
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_IMEInputEvent_Dev_0_2 g_ppb_ime_input_event_0_2_thunk = {
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &CreateIMEInputEvent,
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &IsIMEInputEvent,
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetIMEText,
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetIMESegmentNumber,
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetIMESegmentOffset,
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetIMETargetSegment,
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetIMESelection
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const PPB_IMEInputEvent_1_0 g_ppb_ime_input_event_1_0_thunk = {
426a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  &CreateIMEInputEvent,
427a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  &IsIMEInputEvent,
428a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  &GetIMEText,
429a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  &GetIMESegmentNumber,
430a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  &GetIMESegmentOffset,
431a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  &GetIMETargetSegment,
432a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  &GetIMESelection
433a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)};
434a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Touch -----------------------------------------------------------------------
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource CreateTouchInputEvent(PP_Instance instance,
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  PP_InputEvent_Type type,
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  PP_TimeTicks time_stamp,
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  uint32_t modifiers) {
441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_TouchInputEvent::Create()";
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterResourceCreation enter(instance);
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.functions()->CreateTouchInputEvent(instance, type, time_stamp,
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  modifiers);
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AddTouchPoint(PP_Resource touch_event,
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   PP_TouchListType list,
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   const PP_TouchPoint* point) {
452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_TouchInputEvent::AddTouchPoint()";
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(touch_event, true);
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->AddTouchPoint(list, *point);
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool IsTouchInputEvent(PP_Resource resource) {
460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_TouchInputEvent::IsTouchInputEvent()";
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!IsInputEvent(resource))
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_FALSE;  // Prevent warning log in GetType.
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_InputEvent_Type type = GetType(resource);
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PP_FromBool(type == PP_INPUTEVENT_TYPE_TOUCHSTART ||
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     type == PP_INPUTEVENT_TYPE_TOUCHMOVE ||
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     type == PP_INPUTEVENT_TYPE_TOUCHEND ||
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     type == PP_INPUTEVENT_TYPE_TOUCHCANCEL);
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t GetTouchCount(PP_Resource touch_event, PP_TouchListType list) {
471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_TouchInputEvent::GetTouchCount()";
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(touch_event, true);
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetTouchCount(list);
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PP_TouchPoint GetTouchByIndex(PP_Resource touch_event,
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     PP_TouchListType list,
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     uint32_t index) {
481c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_TouchInputEvent::GetTouchByIndex()";
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(touch_event, true);
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_MakeTouchPoint();
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetTouchByIndex(list, index);
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PP_TouchPoint GetTouchById(PP_Resource touch_event,
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  PP_TouchListType list,
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  uint32_t id) {
491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VLOG(4) << "PPB_TouchInputEvent::GetTouchById()";
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInputEvent enter(touch_event, true);
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_MakeTouchPoint();
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return enter.object()->GetTouchById(list, id);
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_TouchInputEvent_1_0 g_ppb_touch_input_event_thunk = {
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &CreateTouchInputEvent,
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &AddTouchPoint,
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &IsTouchInputEvent,
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetTouchCount,
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetTouchByIndex,
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &GetTouchById
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_InputEvent_1_0* GetPPB_InputEvent_1_0_Thunk() {
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return &g_ppb_input_event_thunk;
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_MouseInputEvent_1_0* GetPPB_MouseInputEvent_1_0_Thunk() {
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return &g_ppb_mouse_input_event_1_0_thunk;
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_MouseInputEvent_1_1* GetPPB_MouseInputEvent_1_1_Thunk() {
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return &g_ppb_mouse_input_event_1_1_thunk;
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_KeyboardInputEvent_1_0* GetPPB_KeyboardInputEvent_1_0_Thunk() {
5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return &g_ppb_keyboard_input_event_1_0_thunk;
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const PPB_KeyboardInputEvent_1_2* GetPPB_KeyboardInputEvent_1_2_Thunk() {
5265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return &g_ppb_keyboard_input_event_thunk;
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_WheelInputEvent_1_0* GetPPB_WheelInputEvent_1_0_Thunk() {
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return &g_ppb_wheel_input_event_thunk;
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_IMEInputEvent_Dev_0_1* GetPPB_IMEInputEvent_Dev_0_1_Thunk() {
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return &g_ppb_ime_input_event_0_1_thunk;
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_IMEInputEvent_Dev_0_2* GetPPB_IMEInputEvent_Dev_0_2_Thunk() {
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return &g_ppb_ime_input_event_0_2_thunk;
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
541a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const PPB_IMEInputEvent_1_0* GetPPB_IMEInputEvent_1_0_Thunk() {
542a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  return &g_ppb_ime_input_event_1_0_thunk;
543a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
544a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_TouchInputEvent_1_0* GetPPB_TouchInputEvent_1_0_Thunk() {
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return &g_ppb_touch_input_event_thunk;
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace thunk
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ppapi
551