input_event.cc revision a36e5920737c6adbddd3e43b760e5de8431db6e0
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/cpp/input_event.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/instance_handle.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module_impl.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/point.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/touch_point.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/var.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pp {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_InputEvent_1_0>() {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PPB_INPUT_EVENT_INTERFACE_1_0;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_KeyboardInputEvent_1_0>() {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PPB_KEYBOARD_INPUT_EVENT_INTERFACE_1_0;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_MouseInputEvent_1_1>() {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PPB_MOUSE_INPUT_EVENT_INTERFACE_1_1;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_WheelInputEvent_1_0>() {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PPB_WHEEL_INPUT_EVENT_INTERFACE_1_0;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_TouchInputEvent_1_0>() {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PPB_TOUCH_INPUT_EVENT_INTERFACE_1_0;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)template <> const char* interface_name<PPB_IMEInputEvent_1_0>() {
39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  return PPB_IME_INPUT_EVENT_INTERFACE_1_0;
40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// InputEvent ------------------------------------------------------------------
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InputEvent::InputEvent() : Resource() {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InputEvent::InputEvent(PP_Resource input_event_resource) : Resource() {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Type check the input event before setting it.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_InputEvent_1_0>())
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (get_interface<PPB_InputEvent_1_0>()->IsInputEvent(input_event_resource)) {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Module::Get()->core()->AddRefResource(input_event_resource);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PassRefFromConstructor(input_event_resource);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InputEvent::~InputEvent() {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_InputEvent_Type InputEvent::GetType() const {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_InputEvent_1_0>())
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_INPUTEVENT_TYPE_UNDEFINED;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_InputEvent_1_0>()->GetType(pp_resource());
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_TimeTicks InputEvent::GetTimeStamp() const {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_InputEvent_1_0>())
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0.0f;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_InputEvent_1_0>()->GetTimeStamp(pp_resource());
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t InputEvent::GetModifiers() const {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_InputEvent_1_0>())
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_InputEvent_1_0>()->GetModifiers(pp_resource());
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MouseInputEvent -------------------------------------------------------------
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MouseInputEvent::MouseInputEvent() : InputEvent() {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MouseInputEvent::MouseInputEvent(const InputEvent& event) : InputEvent() {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Type check the input event before setting it.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_MouseInputEvent_1_1>())
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (get_interface<PPB_MouseInputEvent_1_1>()->IsMouseInputEvent(
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          event.pp_resource())) {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Module::Get()->core()->AddRefResource(event.pp_resource());
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PassRefFromConstructor(event.pp_resource());
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MouseInputEvent::MouseInputEvent(const InstanceHandle& instance,
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 PP_InputEvent_Type type,
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 PP_TimeTicks time_stamp,
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 uint32_t modifiers,
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 PP_InputEvent_MouseButton mouse_button,
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const Point& mouse_position,
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 int32_t click_count,
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const Point& mouse_movement) {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Type check the input event before setting it.
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_MouseInputEvent_1_1>())
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PassRefFromConstructor(get_interface<PPB_MouseInputEvent_1_1>()->Create(
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      instance.pp_instance(), type, time_stamp, modifiers, mouse_button,
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &mouse_position.pp_point(), click_count, &mouse_movement.pp_point()));
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_InputEvent_MouseButton MouseInputEvent::GetButton() const {
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_MouseInputEvent_1_1>())
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_INPUTEVENT_MOUSEBUTTON_NONE;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_MouseInputEvent_1_1>()->GetButton(pp_resource());
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Point MouseInputEvent::GetPosition() const {
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_MouseInputEvent_1_1>())
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return Point();
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_MouseInputEvent_1_1>()->GetPosition(pp_resource());
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t MouseInputEvent::GetClickCount() const {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_MouseInputEvent_1_1>())
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_MouseInputEvent_1_1>()->GetClickCount(pp_resource());
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Point MouseInputEvent::GetMovement() const {
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_MouseInputEvent_1_1>())
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return Point();
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_MouseInputEvent_1_1>()->GetMovement(pp_resource());
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WheelInputEvent -------------------------------------------------------------
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WheelInputEvent::WheelInputEvent() : InputEvent() {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WheelInputEvent::WheelInputEvent(const InputEvent& event) : InputEvent() {
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Type check the input event before setting it.
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_WheelInputEvent_1_0>())
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (get_interface<PPB_WheelInputEvent_1_0>()->IsWheelInputEvent(
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          event.pp_resource())) {
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Module::Get()->core()->AddRefResource(event.pp_resource());
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PassRefFromConstructor(event.pp_resource());
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WheelInputEvent::WheelInputEvent(const InstanceHandle& instance,
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 PP_TimeTicks time_stamp,
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 uint32_t modifiers,
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const FloatPoint& wheel_delta,
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const FloatPoint& wheel_ticks,
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 bool scroll_by_page) {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Type check the input event before setting it.
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_WheelInputEvent_1_0>())
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PassRefFromConstructor(get_interface<PPB_WheelInputEvent_1_0>()->Create(
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      instance.pp_instance(), time_stamp, modifiers,
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &wheel_delta.pp_float_point(), &wheel_ticks.pp_float_point(),
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_FromBool(scroll_by_page)));
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FloatPoint WheelInputEvent::GetDelta() const {
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_WheelInputEvent_1_0>())
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return FloatPoint();
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_WheelInputEvent_1_0>()->GetDelta(pp_resource());
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FloatPoint WheelInputEvent::GetTicks() const {
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_WheelInputEvent_1_0>())
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return FloatPoint();
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_WheelInputEvent_1_0>()->GetTicks(pp_resource());
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WheelInputEvent::GetScrollByPage() const {
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_WheelInputEvent_1_0>())
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PP_ToBool(
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      get_interface<PPB_WheelInputEvent_1_0>()->GetScrollByPage(pp_resource()));
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// KeyboardInputEvent ----------------------------------------------------------
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)KeyboardInputEvent::KeyboardInputEvent() : InputEvent() {
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)KeyboardInputEvent::KeyboardInputEvent(const InputEvent& event) : InputEvent() {
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Type check the input event before setting it.
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_KeyboardInputEvent_1_0>())
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (get_interface<PPB_KeyboardInputEvent_1_0>()->IsKeyboardInputEvent(
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          event.pp_resource())) {
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Module::Get()->core()->AddRefResource(event.pp_resource());
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PassRefFromConstructor(event.pp_resource());
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)KeyboardInputEvent::KeyboardInputEvent(const InstanceHandle& instance,
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       PP_InputEvent_Type type,
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       PP_TimeTicks time_stamp,
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       uint32_t modifiers,
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       uint32_t key_code,
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       const Var& character_text) {
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Type check the input event before setting it.
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_KeyboardInputEvent_1_0>())
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PassRefFromConstructor(get_interface<PPB_KeyboardInputEvent_1_0>()->Create(
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      instance.pp_instance(), type, time_stamp, modifiers, key_code,
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      character_text.pp_var()));
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t KeyboardInputEvent::GetKeyCode() const {
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_KeyboardInputEvent_1_0>())
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_KeyboardInputEvent_1_0>()->GetKeyCode(pp_resource());
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Var KeyboardInputEvent::GetCharacterText() const {
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_KeyboardInputEvent_1_0>())
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return Var();
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return Var(PASS_REF,
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             get_interface<PPB_KeyboardInputEvent_1_0>()->GetCharacterText(
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 pp_resource()));
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TouchInputEvent ------------------------------------------------------------
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TouchInputEvent::TouchInputEvent() : InputEvent() {
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TouchInputEvent::TouchInputEvent(const InputEvent& event) : InputEvent() {
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_TouchInputEvent_1_0>())
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Type check the input event before setting it.
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (get_interface<PPB_TouchInputEvent_1_0>()->IsTouchInputEvent(
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      event.pp_resource())) {
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Module::Get()->core()->AddRefResource(event.pp_resource());
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PassRefFromConstructor(event.pp_resource());
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TouchInputEvent::TouchInputEvent(const InstanceHandle& instance,
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 PP_InputEvent_Type type,
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 PP_TimeTicks time_stamp,
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 uint32_t modifiers) {
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Type check the input event before setting it.
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_TouchInputEvent_1_0>())
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PassRefFromConstructor(get_interface<PPB_TouchInputEvent_1_0>()->Create(
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      instance.pp_instance(), type, time_stamp, modifiers));
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TouchInputEvent::AddTouchPoint(PP_TouchListType list,
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    PP_TouchPoint point) {
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_TouchInputEvent_1_0>())
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  get_interface<PPB_TouchInputEvent_1_0>()->AddTouchPoint(pp_resource(), list,
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                          &point);
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t TouchInputEvent::GetTouchCount(PP_TouchListType list) const {
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_TouchInputEvent_1_0>())
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_TouchInputEvent_1_0>()->GetTouchCount(pp_resource(),
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                                 list);
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TouchPoint TouchInputEvent::GetTouchById(PP_TouchListType list,
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                             uint32_t id) const {
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_TouchInputEvent_1_0>())
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return TouchPoint();
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return TouchPoint(get_interface<PPB_TouchInputEvent_1_0>()->
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        GetTouchById(pp_resource(), list, id));
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TouchPoint TouchInputEvent::GetTouchByIndex(PP_TouchListType list,
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                uint32_t index) const {
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_TouchInputEvent_1_0>())
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return TouchPoint();
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return TouchPoint(get_interface<PPB_TouchInputEvent_1_0>()->
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        GetTouchByIndex(pp_resource(), list, index));
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
287a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// IMEInputEvent -------------------------------------------------------
288a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
289a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IMEInputEvent::IMEInputEvent() : InputEvent() {
290a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
291a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
292a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IMEInputEvent::IMEInputEvent(const InputEvent& event) : InputEvent() {
293a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (has_interface<PPB_IMEInputEvent_1_0>()) {
294a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    if (get_interface<PPB_IMEInputEvent_1_0>()->IsIMEInputEvent(
295a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)            event.pp_resource())) {
296a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      Module::Get()->core()->AddRefResource(event.pp_resource());
297a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      PassRefFromConstructor(event.pp_resource());
298a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    }
299a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
300a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
301a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
302a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IMEInputEvent::IMEInputEvent(
303a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    const InstanceHandle& instance,
304a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    PP_InputEvent_Type type,
305a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    PP_TimeTicks time_stamp,
306a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    const Var& text,
307a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    const std::vector<uint32_t>& segment_offsets,
308a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    int32_t target_segment,
309a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    const std::pair<uint32_t, uint32_t>& selection) : InputEvent() {
310a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (!has_interface<PPB_IMEInputEvent_1_0>())
311a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    return;
312a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  uint32_t dummy = 0;
313a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  PassRefFromConstructor(get_interface<PPB_IMEInputEvent_1_0>()->Create(
314a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      instance.pp_instance(), type, time_stamp, text.pp_var(),
315a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      segment_offsets.empty() ? 0 : segment_offsets.size() - 1,
316a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      segment_offsets.empty() ? &dummy : &segment_offsets[0],
317a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      target_segment, selection.first, selection.second));
318a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
319a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
320a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
321a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)Var IMEInputEvent::GetText() const {
322a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (has_interface<PPB_IMEInputEvent_1_0>()) {
323a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    return Var(PASS_REF,
324a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)               get_interface<PPB_IMEInputEvent_1_0>()->GetText(
325a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                   pp_resource()));
326a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
327a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  return Var();
328a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
329a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
330a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)uint32_t IMEInputEvent::GetSegmentNumber() const {
331a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (has_interface<PPB_IMEInputEvent_1_0>()) {
332a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    return get_interface<PPB_IMEInputEvent_1_0>()->GetSegmentNumber(
333a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        pp_resource());
334a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
335a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  return 0;
336a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
337a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
338a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)uint32_t IMEInputEvent::GetSegmentOffset(uint32_t index) const {
339a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (has_interface<PPB_IMEInputEvent_1_0>()) {
340a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    return get_interface<PPB_IMEInputEvent_1_0>()->GetSegmentOffset(
341a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        pp_resource(), index);
342a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
343a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  return 0;
344a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
345a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
346a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)int32_t IMEInputEvent::GetTargetSegment() const {
347a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (has_interface<PPB_IMEInputEvent_1_0>()) {
348a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    return get_interface<PPB_IMEInputEvent_1_0>()->GetTargetSegment(
349a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        pp_resource());
350a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
351a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  return 0;
352a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
353a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
354a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void IMEInputEvent::GetSelection(uint32_t* start, uint32_t* end) const {
355a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (has_interface<PPB_IMEInputEvent_1_0>()) {
356a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    get_interface<PPB_IMEInputEvent_1_0>()->GetSelection(pp_resource(),
357a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                                                         start,
358a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                                                         end);
359a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
360a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
361a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace pp
363