1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef PPAPI_SHARED_IMPL_PPB_INPUT_EVENT_SHARED_H_
6 #define PPAPI_SHARED_IMPL_PPB_INPUT_EVENT_SHARED_H_
11 #include "base/basictypes.h"
12 #include "base/compiler_specific.h"
13 #include "ppapi/c/ppb_input_event.h"
14 #include "ppapi/shared_impl/resource.h"
15 #include "ppapi/thunk/ppb_input_event_api.h"
16 #include "ui/events/latency_info.h"
20 // IF YOU ADD STUFF TO THIS CLASS
21 // ==============================
22 // Be sure to add it to the STRUCT_TRAITS at the top of ppapi_messages.h
23 struct PPAPI_SHARED_EXPORT InputEventData
{
27 // Internal-only value. Set to true when this input event is filtered, that
28 // is, should be delivered synchronously. This is used by the proxy.
31 PP_InputEvent_Type event_type
;
32 PP_TimeTicks event_time_stamp
;
33 uint32_t event_modifiers
;
35 PP_InputEvent_MouseButton mouse_button
;
36 PP_Point mouse_position
;
37 int32_t mouse_click_count
;
38 PP_Point mouse_movement
;
40 PP_FloatPoint wheel_delta
;
41 PP_FloatPoint wheel_ticks
;
42 bool wheel_scroll_by_page
;
46 // The key event's |code| attribute as defined in:
47 // http://www.w3.org/TR/uievents/
50 std::string character_text
;
52 std::vector
<uint32_t> composition_segment_offsets
;
53 int32_t composition_target_segment
;
54 uint32_t composition_selection_start
;
55 uint32_t composition_selection_end
;
57 std::vector
<PP_TouchPoint
> touches
;
58 std::vector
<PP_TouchPoint
> changed_touches
;
59 std::vector
<PP_TouchPoint
> target_touches
;
61 ui::LatencyInfo latency_info
;
64 // This simple class implements the PPB_InputEvent_API in terms of the
65 // shared InputEventData structure
66 class PPAPI_SHARED_EXPORT PPB_InputEvent_Shared
68 public thunk::PPB_InputEvent_API
{
70 PPB_InputEvent_Shared(ResourceObjectType type
,
72 const InputEventData
& data
);
74 // Resource overrides.
75 PPB_InputEvent_API
* AsPPB_InputEvent_API() override
;
77 // PPB_InputEvent_API implementation.
78 const InputEventData
& GetInputEventData() const override
;
79 PP_InputEvent_Type
GetType() override
;
80 PP_TimeTicks
GetTimeStamp() override
;
81 uint32_t GetModifiers() override
;
82 PP_InputEvent_MouseButton
GetMouseButton() override
;
83 PP_Point
GetMousePosition() override
;
84 int32_t GetMouseClickCount() override
;
85 PP_Point
GetMouseMovement() override
;
86 PP_FloatPoint
GetWheelDelta() override
;
87 PP_FloatPoint
GetWheelTicks() override
;
88 PP_Bool
GetWheelScrollByPage() override
;
89 uint32_t GetKeyCode() override
;
90 PP_Var
GetCharacterText() override
;
91 PP_Var
GetCode() override
;
92 uint32_t GetIMESegmentNumber() override
;
93 uint32_t GetIMESegmentOffset(uint32_t index
) override
;
94 int32_t GetIMETargetSegment() override
;
95 void GetIMESelection(uint32_t* start
, uint32_t* end
) override
;
96 void AddTouchPoint(PP_TouchListType list
,
97 const PP_TouchPoint
& point
) override
;
98 uint32_t GetTouchCount(PP_TouchListType list
) override
;
99 PP_TouchPoint
GetTouchByIndex(PP_TouchListType list
, uint32_t index
) override
;
100 PP_TouchPoint
GetTouchById(PP_TouchListType list
, uint32_t id
) override
;
101 PP_Bool
TraceInputLatency(PP_Bool has_damage
) override
;
103 // Implementations for event creation.
104 static PP_Resource
CreateIMEInputEvent(ResourceObjectType type
,
105 PP_Instance instance
,
106 PP_InputEvent_Type event_type
,
107 PP_TimeTicks time_stamp
,
109 uint32_t segment_number
,
110 const uint32_t* segment_offsets
,
111 int32_t target_segment
,
112 uint32_t selection_start
,
113 uint32_t selection_end
);
114 static PP_Resource
CreateKeyboardInputEvent(ResourceObjectType type
,
115 PP_Instance instance
,
116 PP_InputEvent_Type event_type
,
117 PP_TimeTicks time_stamp
,
120 struct PP_Var character_text
,
122 static PP_Resource
CreateMouseInputEvent(
123 ResourceObjectType type
,
124 PP_Instance instance
,
125 PP_InputEvent_Type event_type
,
126 PP_TimeTicks time_stamp
,
128 PP_InputEvent_MouseButton mouse_button
,
129 const PP_Point
* mouse_position
,
131 const PP_Point
* mouse_movement
);
132 static PP_Resource
CreateWheelInputEvent(ResourceObjectType type
,
133 PP_Instance instance
,
134 PP_TimeTicks time_stamp
,
136 const PP_FloatPoint
* wheel_delta
,
137 const PP_FloatPoint
* wheel_ticks
,
138 PP_Bool scroll_by_page
);
139 static PP_Resource
CreateTouchInputEvent(ResourceObjectType type
,
140 PP_Instance instance
,
141 PP_InputEvent_Type event_type
,
142 PP_TimeTicks time_stamp
,
146 InputEventData data_
;
148 DISALLOW_IMPLICIT_CONSTRUCTORS(PPB_InputEvent_Shared
);
153 #endif // PPAPI_SHARED_IMPL_PPB_INPUT_EVENT_SHARED_H_