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) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource CreateKeyboardInputEvent(PP_Instance instance, 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_InputEvent_Type type, 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_TimeTicks time_stamp, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t modifiers, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t key_code, 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (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; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.functions()->CreateKeyboardInputEvent(instance, type, time_stamp, 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) modifiers, key_code, 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) character_text); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool IsKeyboardInputEvent(PP_Resource resource) { 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_KeyboardInputEvent::IsKeyboardInputEvent()"; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!IsInputEvent(resource)) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FALSE; // Prevent warning log in GetType. 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_InputEvent_Type type = GetType(resource); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FromBool(type == PP_INPUTEVENT_TYPE_KEYDOWN || 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type == PP_INPUTEVENT_TYPE_KEYUP || 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type == PP_INPUTEVENT_TYPE_RAWKEYDOWN || 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type == PP_INPUTEVENT_TYPE_CHAR); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t GetKeyCode(PP_Resource key_event) { 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_KeyboardInputEvent::GetKeyCode()"; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterInputEvent enter(key_event, true); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.object()->GetKeyCode(); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Var GetCharacterText(PP_Resource character_event) { 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_KeyboardInputEvent::GetCharacterText()"; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterInputEvent enter(character_event, true); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_MakeUndefined(); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.object()->GetCharacterText(); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_KeyboardInputEvent g_ppb_keyboard_input_event_thunk = { 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &CreateKeyboardInputEvent, 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &IsKeyboardInputEvent, 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetKeyCode, 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetCharacterText 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// _Dev interface. 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool SetUsbKeyCode(PP_Resource key_event, uint32_t usb_key_code) { 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_KeyboardInputEvent_Dev::SetUsbKeyCode()"; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterInputEvent enter(key_event, true); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FALSE; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.object()->SetUsbKeyCode(usb_key_code); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t GetUsbKeyCode(PP_Resource key_event) { 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_KeyboardInputEvent_Dev::GetUsbKeyCode()"; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterInputEvent enter(key_event, true); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.object()->GetUsbKeyCode(); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 314d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)PP_Var GetCode(PP_Resource key_event) { 315d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) VLOG(4) << "PPB_KeyboardInputEvent_Dev::GetCode()"; 316d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EnterInputEvent enter(key_event, true); 317d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (enter.failed()) 318d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return PP_MakeUndefined(); 319d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return enter.object()->GetCode(); 320d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 321d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 322d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)const PPB_KeyboardInputEvent_Dev_0_2 323d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) g_ppb_keyboard_input_event_dev_0_2_thunk = { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &SetUsbKeyCode, 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetUsbKeyCode, 326d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) &GetCode, 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Composition ----------------------------------------------------------------- 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource CreateIMEInputEvent(PP_Instance instance, 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_InputEvent_Type type, 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_TimeTicks time_stamp, 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Var text, 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t segment_number, 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32_t segment_offsets[], 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t target_segment, 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t selection_start, 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t selection_end) { 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_IMEInputEvent_Dev::Create()"; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterResourceCreation enter(instance); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.functions()->CreateIMEInputEvent(instance, type, time_stamp, 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text, segment_number, 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) segment_offsets, 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_segment, 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection_start, 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection_end); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool IsIMEInputEvent(PP_Resource resource) { 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_IMEInputEvent_Dev::IsIMEInputEvent()"; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!IsInputEvent(resource)) 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FALSE; // Prevent warning log in GetType. 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_InputEvent_Type type = GetType(resource); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FromBool(type == PP_INPUTEVENT_TYPE_IME_COMPOSITION_START || 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type == PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE || 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type == PP_INPUTEVENT_TYPE_IME_COMPOSITION_END || 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type == PP_INPUTEVENT_TYPE_IME_TEXT); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Var GetIMEText(PP_Resource ime_event) { 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_IMEInputEvent_Dev::GetText()"; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetCharacterText(ime_event); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t GetIMESegmentNumber(PP_Resource ime_event) { 369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_IMEInputEvent_Dev::GetSegmentNumber()"; 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterInputEvent enter(ime_event, true); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.object()->GetIMESegmentNumber(); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t GetIMESegmentOffset(PP_Resource ime_event, uint32_t index) { 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_IMEInputEvent_Dev::GetSegmentOffset()"; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterInputEvent enter(ime_event, true); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.object()->GetIMESegmentOffset(index); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t GetIMETargetSegment(PP_Resource ime_event) { 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_IMEInputEvent_Dev::GetTargetSegment()"; 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterInputEvent enter(ime_event, true); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return -1; 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.object()->GetIMETargetSegment(); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GetIMESelection(PP_Resource ime_event, uint32_t* start, uint32_t* end) { 393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_IMEInputEvent_Dev::GetSelection()"; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterInputEvent enter(ime_event, true); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) { 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (start) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *start = 0; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (end) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *end = 0; 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enter.object()->GetIMESelection(start, end); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_IMEInputEvent_Dev_0_1 g_ppb_ime_input_event_0_1_thunk = { 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &IsIMEInputEvent, 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetIMEText, 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetIMESegmentNumber, 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetIMESegmentOffset, 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetIMETargetSegment, 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetIMESelection 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_IMEInputEvent_Dev_0_2 g_ppb_ime_input_event_0_2_thunk = { 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &CreateIMEInputEvent, 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &IsIMEInputEvent, 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetIMEText, 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetIMESegmentNumber, 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetIMESegmentOffset, 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetIMETargetSegment, 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetIMESelection 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 424a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const PPB_IMEInputEvent_1_0 g_ppb_ime_input_event_1_0_thunk = { 425a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) &CreateIMEInputEvent, 426a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) &IsIMEInputEvent, 427a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) &GetIMEText, 428a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) &GetIMESegmentNumber, 429a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) &GetIMESegmentOffset, 430a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) &GetIMETargetSegment, 431a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) &GetIMESelection 432a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}; 433a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Touch ----------------------------------------------------------------------- 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource CreateTouchInputEvent(PP_Instance instance, 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_InputEvent_Type type, 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_TimeTicks time_stamp, 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t modifiers) { 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_TouchInputEvent::Create()"; 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterResourceCreation enter(instance); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.functions()->CreateTouchInputEvent(instance, type, time_stamp, 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) modifiers); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AddTouchPoint(PP_Resource touch_event, 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_TouchListType list, 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PP_TouchPoint* point) { 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_TouchInputEvent::AddTouchPoint()"; 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterInputEvent enter(touch_event, true); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.object()->AddTouchPoint(list, *point); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool IsTouchInputEvent(PP_Resource resource) { 459c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_TouchInputEvent::IsTouchInputEvent()"; 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!IsInputEvent(resource)) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FALSE; // Prevent warning log in GetType. 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_InputEvent_Type type = GetType(resource); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FromBool(type == PP_INPUTEVENT_TYPE_TOUCHSTART || 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type == PP_INPUTEVENT_TYPE_TOUCHMOVE || 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type == PP_INPUTEVENT_TYPE_TOUCHEND || 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type == PP_INPUTEVENT_TYPE_TOUCHCANCEL); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t GetTouchCount(PP_Resource touch_event, PP_TouchListType list) { 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_TouchInputEvent::GetTouchCount()"; 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterInputEvent enter(touch_event, true); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.object()->GetTouchCount(list); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PP_TouchPoint GetTouchByIndex(PP_Resource touch_event, 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_TouchListType list, 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t index) { 480c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_TouchInputEvent::GetTouchByIndex()"; 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterInputEvent enter(touch_event, true); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_MakeTouchPoint(); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.object()->GetTouchByIndex(list, index); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PP_TouchPoint GetTouchById(PP_Resource touch_event, 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_TouchListType list, 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t id) { 490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_TouchInputEvent::GetTouchById()"; 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterInputEvent enter(touch_event, true); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_MakeTouchPoint(); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.object()->GetTouchById(list, id); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_TouchInputEvent_1_0 g_ppb_touch_input_event_thunk = { 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &CreateTouchInputEvent, 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &AddTouchPoint, 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &IsTouchInputEvent, 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetTouchCount, 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetTouchByIndex, 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetTouchById 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_InputEvent_1_0* GetPPB_InputEvent_1_0_Thunk() { 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return &g_ppb_input_event_thunk; 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_MouseInputEvent_1_0* GetPPB_MouseInputEvent_1_0_Thunk() { 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return &g_ppb_mouse_input_event_1_0_thunk; 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_MouseInputEvent_1_1* GetPPB_MouseInputEvent_1_1_Thunk() { 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return &g_ppb_mouse_input_event_1_1_thunk; 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_KeyboardInputEvent_1_0* GetPPB_KeyboardInputEvent_1_0_Thunk() { 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return &g_ppb_keyboard_input_event_thunk; 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 524d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)const PPB_KeyboardInputEvent_Dev_0_2* 525d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) GetPPB_KeyboardInputEvent_Dev_0_2_Thunk() { 526d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return &g_ppb_keyboard_input_event_dev_0_2_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