1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Use of this source code is governed by a BSD-style license that can be 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// found in the LICENSE file. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "ppapi/shared_impl/ppb_input_event_shared.h" 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "ppapi/shared_impl/ppapi_globals.h" 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "ppapi/shared_impl/var.h" 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgusing ppapi::thunk::PPB_InputEvent_API; 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnamespace ppapi { 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgInputEventData::InputEventData() 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org : is_filtered(false), 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_type(PP_INPUTEVENT_TYPE_UNDEFINED), 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_time_stamp(0.0), 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_modifiers(0), 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mouse_button(PP_INPUTEVENT_MOUSEBUTTON_NONE), 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mouse_position(PP_MakePoint(0, 0)), 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mouse_click_count(0), 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mouse_movement(PP_MakePoint(0, 0)), 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org wheel_delta(PP_MakeFloatPoint(0.0f, 0.0f)), 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org wheel_ticks(PP_MakeFloatPoint(0.0f, 0.0f)), 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org wheel_scroll_by_page(false), 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org key_code(0), 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org code(), 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org character_text(), 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org composition_target_segment(-1), 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org composition_selection_start(0), 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org composition_selection_end(0), 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org touches(), 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org changed_touches(), 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org target_touches() {} 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgInputEventData::~InputEventData() {} 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPPB_InputEvent_Shared::PPB_InputEvent_Shared(ResourceObjectType type, 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_Instance instance, 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const InputEventData& data) 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org : Resource(type, instance), data_(data) {} 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPPB_InputEvent_API* PPB_InputEvent_Shared::AsPPB_InputEvent_API() { 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return this; 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst InputEventData& PPB_InputEvent_Shared::GetInputEventData() const { 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return data_; 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_InputEvent_Type PPB_InputEvent_Shared::GetType() { return data_.event_type; } 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_TimeTicks PPB_InputEvent_Shared::GetTimeStamp() { 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return data_.event_time_stamp; 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orguint32_t PPB_InputEvent_Shared::GetModifiers() { return data_.event_modifiers; } 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_InputEvent_MouseButton PPB_InputEvent_Shared::GetMouseButton() { 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return data_.mouse_button; 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_Point PPB_InputEvent_Shared::GetMousePosition() { 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return data_.mouse_position; 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint32_t PPB_InputEvent_Shared::GetMouseClickCount() { 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return data_.mouse_click_count; 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_Point PPB_InputEvent_Shared::GetMouseMovement() { 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return data_.mouse_movement; 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_FloatPoint PPB_InputEvent_Shared::GetWheelDelta() { 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return data_.wheel_delta; 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_FloatPoint PPB_InputEvent_Shared::GetWheelTicks() { 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return data_.wheel_ticks; 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_Bool PPB_InputEvent_Shared::GetWheelScrollByPage() { 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return PP_FromBool(data_.wheel_scroll_by_page); 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orguint32_t PPB_InputEvent_Shared::GetKeyCode() { return data_.key_code; } 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_Var PPB_InputEvent_Shared::GetCharacterText() { 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return StringVar::StringToPPVar(data_.character_text); 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_Var PPB_InputEvent_Shared::GetCode() { 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return StringVar::StringToPPVar(data_.code); 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orguint32_t PPB_InputEvent_Shared::GetIMESegmentNumber() { 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (data_.composition_segment_offsets.empty()) 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return static_cast<uint32_t>(data_.composition_segment_offsets.size() - 1); 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orguint32_t PPB_InputEvent_Shared::GetIMESegmentOffset(uint32_t index) { 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (index >= data_.composition_segment_offsets.size()) 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return data_.composition_segment_offsets[index]; 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint32_t PPB_InputEvent_Shared::GetIMETargetSegment() { 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return data_.composition_target_segment; 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid PPB_InputEvent_Shared::GetIMESelection(uint32_t* start, uint32_t* end) { 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (start) 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *start = data_.composition_selection_start; 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (end) 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *end = data_.composition_selection_end; 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid PPB_InputEvent_Shared::AddTouchPoint(PP_TouchListType list, 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const PP_TouchPoint& point) { 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (list) { 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PP_TOUCHLIST_TYPE_TOUCHES: 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data_.touches.push_back(point); 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PP_TOUCHLIST_TYPE_CHANGEDTOUCHES: 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data_.changed_touches.push_back(point); 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PP_TOUCHLIST_TYPE_TARGETTOUCHES: 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data_.target_touches.push_back(point); 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orguint32_t PPB_InputEvent_Shared::GetTouchCount(PP_TouchListType list) { 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (list) { 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PP_TOUCHLIST_TYPE_TOUCHES: 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return static_cast<uint32_t>(data_.touches.size()); 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PP_TOUCHLIST_TYPE_CHANGEDTOUCHES: 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return static_cast<uint32_t>(data_.changed_touches.size()); 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PP_TOUCHLIST_TYPE_TARGETTOUCHES: 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return static_cast<uint32_t>(data_.target_touches.size()); 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_TouchPoint PPB_InputEvent_Shared::GetTouchByIndex(PP_TouchListType list, 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t index) { 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org std::vector<PP_TouchPoint>* points; 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (list) { 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PP_TOUCHLIST_TYPE_TOUCHES: 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org points = &data_.touches; 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PP_TOUCHLIST_TYPE_CHANGEDTOUCHES: 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org points = &data_.changed_touches; 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PP_TOUCHLIST_TYPE_TARGETTOUCHES: 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org points = &data_.target_touches; 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return PP_MakeTouchPoint(); 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (index >= points->size()) { 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return PP_MakeTouchPoint(); 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return points->at(index); 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_TouchPoint PPB_InputEvent_Shared::GetTouchById(PP_TouchListType list, 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t id) { 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const std::vector<PP_TouchPoint>* points; 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (list) { 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PP_TOUCHLIST_TYPE_TOUCHES: 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org points = &data_.touches; 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PP_TOUCHLIST_TYPE_CHANGEDTOUCHES: 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org points = &data_.changed_touches; 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PP_TOUCHLIST_TYPE_TARGETTOUCHES: 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org points = &data_.target_touches; 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return PP_MakeTouchPoint(); 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (size_t i = 0; i < points->size(); i++) { 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (points->at(i).id == id) 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return points->at(i); 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return PP_MakeTouchPoint(); 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_Bool PPB_InputEvent_Shared::TraceInputLatency(PP_Bool has_damage) { 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ui::LatencyInfo latency = data_.latency_info; 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!latency.FindLatency(ui::INPUT_EVENT_LATENCY_BEGIN_PLUGIN_COMPONENT, 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, NULL)) 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return PP_FALSE; 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (has_damage) { 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PpapiGlobals::Get()->AddLatencyInfo(latency, pp_instance()); 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org latency.AddLatencyNumber( 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ui::INPUT_EVENT_LATENCY_TERMINATED_PLUGIN_COMPONENT, 0, 0); 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return PP_TRUE; 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// static 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_Resource PPB_InputEvent_Shared::CreateIMEInputEvent( 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ResourceObjectType type, 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_Instance instance, 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_InputEvent_Type event_type, 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_TimeTicks time_stamp, 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct PP_Var text, 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t segment_number, 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const uint32_t* segment_offsets, 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int32_t target_segment, 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t selection_start, 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t selection_end) { 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (event_type != PP_INPUTEVENT_TYPE_IME_COMPOSITION_START && 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_type != PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE && 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_type != PP_INPUTEVENT_TYPE_IME_COMPOSITION_END && 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_type != PP_INPUTEVENT_TYPE_IME_TEXT) 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org InputEventData data; 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.event_type = event_type; 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.event_time_stamp = time_stamp; 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (text.type == PP_VARTYPE_STRING) { 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org StringVar* text_str = StringVar::FromPPVar(text); 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!text_str) 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.character_text = text_str->value(); 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.composition_target_segment = target_segment; 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (segment_number != 0) { 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.composition_segment_offsets.assign( 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &segment_offsets[0], &segment_offsets[segment_number + 1]); 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.composition_selection_start = selection_start; 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.composition_selection_end = selection_end; 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (new PPB_InputEvent_Shared(type, instance, data))->GetReference(); 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// static 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_Resource PPB_InputEvent_Shared::CreateKeyboardInputEvent( 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ResourceObjectType type, 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_Instance instance, 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_InputEvent_Type event_type, 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_TimeTicks time_stamp, 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t modifiers, 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t key_code, 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct PP_Var character_text, 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct PP_Var code) { 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (event_type != PP_INPUTEVENT_TYPE_RAWKEYDOWN && 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_type != PP_INPUTEVENT_TYPE_KEYDOWN && 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_type != PP_INPUTEVENT_TYPE_KEYUP && 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_type != PP_INPUTEVENT_TYPE_CHAR) 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org InputEventData data; 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.event_type = event_type; 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.event_time_stamp = time_stamp; 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.event_modifiers = modifiers; 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.key_code = key_code; 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (character_text.type == PP_VARTYPE_STRING) { 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org StringVar* text_str = StringVar::FromPPVar(character_text); 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!text_str) 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.character_text = text_str->value(); 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (code.type == PP_VARTYPE_STRING) { 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org StringVar* code_str = StringVar::FromPPVar(code); 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!code_str) 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.code = code_str->value(); 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (new PPB_InputEvent_Shared(type, instance, data))->GetReference(); 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// static 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_Resource PPB_InputEvent_Shared::CreateMouseInputEvent( 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ResourceObjectType type, 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_Instance instance, 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_InputEvent_Type event_type, 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_TimeTicks time_stamp, 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t modifiers, 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_InputEvent_MouseButton mouse_button, 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const PP_Point* mouse_position, 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int32_t click_count, 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const PP_Point* mouse_movement) { 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (event_type != PP_INPUTEVENT_TYPE_MOUSEDOWN && 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_type != PP_INPUTEVENT_TYPE_MOUSEUP && 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_type != PP_INPUTEVENT_TYPE_MOUSEMOVE && 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_type != PP_INPUTEVENT_TYPE_MOUSEENTER && 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_type != PP_INPUTEVENT_TYPE_MOUSELEAVE) 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org InputEventData data; 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.event_type = event_type; 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.event_time_stamp = time_stamp; 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.event_modifiers = modifiers; 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.mouse_button = mouse_button; 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.mouse_position = *mouse_position; 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.mouse_click_count = click_count; 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.mouse_movement = *mouse_movement; 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (new PPB_InputEvent_Shared(type, instance, data))->GetReference(); 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// static 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_Resource PPB_InputEvent_Shared::CreateWheelInputEvent( 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ResourceObjectType type, 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_Instance instance, 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_TimeTicks time_stamp, 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t modifiers, 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const PP_FloatPoint* wheel_delta, 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const PP_FloatPoint* wheel_ticks, 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_Bool scroll_by_page) { 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org InputEventData data; 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.event_type = PP_INPUTEVENT_TYPE_WHEEL; 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.event_time_stamp = time_stamp; 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.event_modifiers = modifiers; 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.wheel_delta = *wheel_delta; 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.wheel_ticks = *wheel_ticks; 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.wheel_scroll_by_page = PP_ToBool(scroll_by_page); 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (new PPB_InputEvent_Shared(type, instance, data))->GetReference(); 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// static 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPP_Resource PPB_InputEvent_Shared::CreateTouchInputEvent( 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ResourceObjectType type, 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_Instance instance, 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_InputEvent_Type event_type, 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PP_TimeTicks time_stamp, 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t modifiers) { 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (event_type != PP_INPUTEVENT_TYPE_TOUCHSTART && 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_type != PP_INPUTEVENT_TYPE_TOUCHMOVE && 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_type != PP_INPUTEVENT_TYPE_TOUCHEND && 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org event_type != PP_INPUTEVENT_TYPE_TOUCHCANCEL) 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org InputEventData data; 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.event_type = event_type; 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.event_time_stamp = time_stamp; 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data.event_modifiers = modifiers; 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (new PPB_InputEvent_Shared(type, instance, data))->GetReference(); 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} // namespace ppapi 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org