• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #ifndef PPAPI_SHARED_IMPL_PPB_INPUT_EVENT_SHARED_H_
6 #define PPAPI_SHARED_IMPL_PPB_INPUT_EVENT_SHARED_H_
7 
8 #include <string>
9 #include <vector>
10 
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"
17 
18 namespace ppapi {
19 
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 {
24   InputEventData();
25   ~InputEventData();
26 
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.
29   bool is_filtered;
30 
31   PP_InputEvent_Type event_type;
32   PP_TimeTicks event_time_stamp;
33   uint32_t event_modifiers;
34 
35   PP_InputEvent_MouseButton mouse_button;
36   PP_Point mouse_position;
37   int32_t mouse_click_count;
38   PP_Point mouse_movement;
39 
40   PP_FloatPoint wheel_delta;
41   PP_FloatPoint wheel_ticks;
42   bool wheel_scroll_by_page;
43 
44   uint32_t key_code;
45 
46   // The key event's |code| attribute as defined in:
47   // http://www.w3.org/TR/uievents/
48   std::string code;
49 
50   std::string character_text;
51 
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;
56 
57   std::vector<PP_TouchPoint> touches;
58   std::vector<PP_TouchPoint> changed_touches;
59   std::vector<PP_TouchPoint> target_touches;
60 
61   ui::LatencyInfo latency_info;
62 };
63 
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
67     : public Resource,
68       public thunk::PPB_InputEvent_API {
69  public:
70   PPB_InputEvent_Shared(ResourceObjectType type,
71                         PP_Instance instance,
72                         const InputEventData& data);
73 
74   // Resource overrides.
75   virtual PPB_InputEvent_API* AsPPB_InputEvent_API() OVERRIDE;
76 
77   // PPB_InputEvent_API implementation.
78   virtual const InputEventData& GetInputEventData() const OVERRIDE;
79   virtual PP_InputEvent_Type GetType() OVERRIDE;
80   virtual PP_TimeTicks GetTimeStamp() OVERRIDE;
81   virtual uint32_t GetModifiers() OVERRIDE;
82   virtual PP_InputEvent_MouseButton GetMouseButton() OVERRIDE;
83   virtual PP_Point GetMousePosition() OVERRIDE;
84   virtual int32_t GetMouseClickCount() OVERRIDE;
85   virtual PP_Point GetMouseMovement() OVERRIDE;
86   virtual PP_FloatPoint GetWheelDelta() OVERRIDE;
87   virtual PP_FloatPoint GetWheelTicks() OVERRIDE;
88   virtual PP_Bool GetWheelScrollByPage() OVERRIDE;
89   virtual uint32_t GetKeyCode() OVERRIDE;
90   virtual PP_Var GetCharacterText() OVERRIDE;
91   virtual PP_Var GetCode() OVERRIDE;
92   virtual uint32_t GetIMESegmentNumber() OVERRIDE;
93   virtual uint32_t GetIMESegmentOffset(uint32_t index) OVERRIDE;
94   virtual int32_t GetIMETargetSegment() OVERRIDE;
95   virtual void GetIMESelection(uint32_t* start, uint32_t* end) OVERRIDE;
96   virtual void AddTouchPoint(PP_TouchListType list,
97                              const PP_TouchPoint& point) OVERRIDE;
98   virtual uint32_t GetTouchCount(PP_TouchListType list) OVERRIDE;
99   virtual PP_TouchPoint GetTouchByIndex(PP_TouchListType list,
100                                         uint32_t index) OVERRIDE;
101   virtual PP_TouchPoint GetTouchById(PP_TouchListType list,
102                                      uint32_t id) OVERRIDE;
103   virtual PP_Bool TraceInputLatency(PP_Bool has_damage) OVERRIDE;
104 
105   // Implementations for event creation.
106   static PP_Resource CreateIMEInputEvent(ResourceObjectType type,
107                                          PP_Instance instance,
108                                          PP_InputEvent_Type event_type,
109                                          PP_TimeTicks time_stamp,
110                                          struct PP_Var text,
111                                          uint32_t segment_number,
112                                          const uint32_t* segment_offsets,
113                                          int32_t target_segment,
114                                          uint32_t selection_start,
115                                          uint32_t selection_end);
116   static PP_Resource CreateKeyboardInputEvent(ResourceObjectType type,
117                                               PP_Instance instance,
118                                               PP_InputEvent_Type event_type,
119                                               PP_TimeTicks time_stamp,
120                                               uint32_t modifiers,
121                                               uint32_t key_code,
122                                               struct PP_Var character_text,
123                                               struct PP_Var code);
124   static PP_Resource CreateMouseInputEvent(
125       ResourceObjectType type,
126       PP_Instance instance,
127       PP_InputEvent_Type event_type,
128       PP_TimeTicks time_stamp,
129       uint32_t modifiers,
130       PP_InputEvent_MouseButton mouse_button,
131       const PP_Point* mouse_position,
132       int32_t click_count,
133       const PP_Point* mouse_movement);
134   static PP_Resource CreateWheelInputEvent(ResourceObjectType type,
135                                            PP_Instance instance,
136                                            PP_TimeTicks time_stamp,
137                                            uint32_t modifiers,
138                                            const PP_FloatPoint* wheel_delta,
139                                            const PP_FloatPoint* wheel_ticks,
140                                            PP_Bool scroll_by_page);
141   static PP_Resource CreateTouchInputEvent(ResourceObjectType type,
142                                            PP_Instance instance,
143                                            PP_InputEvent_Type event_type,
144                                            PP_TimeTicks time_stamp,
145                                            uint32_t modifiers);
146 
147  private:
148   InputEventData data_;
149 
150   DISALLOW_IMPLICIT_CONSTRUCTORS(PPB_InputEvent_Shared);
151 };
152 
153 }  // namespace ppapi
154 
155 #endif  // PPAPI_SHARED_IMPL_PPB_INPUT_EVENT_SHARED_H_
156