Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: src/shared/ppapi_proxy/plugin_ppb_input_event.cc

Issue 7395005: Proxy PPB_Input_Event, PPP_Input_Event, and associated IFs. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: Another gyp fix, windows build fix Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Native Client Authors. All rights reserved.
sehr (please use chromium) 2011/07/20 00:33:41 2011
2 // Use of this source code is governed by a BSD-style license that can
3 // be found in the LICENSE file.
4
5 #include "native_client/src/shared/ppapi_proxy/plugin_ppb_input_event.h"
6
7 #include <stdio.h>
8 #include <string.h>
9
10 #include "native_client/src/include/portability.h"
11 #include "native_client/src/shared/ppapi_proxy/plugin_globals.h"
12 #include "native_client/src/shared/ppapi_proxy/plugin_resource.h"
13 #include "native_client/src/shared/ppapi_proxy/untrusted/srpcgen/ppb_rpc.h"
14 #include "native_client/src/shared/ppapi_proxy/utility.h"
15 #include "native_client/src/shared/srpc/nacl_srpc.h"
16 #include "native_client/src/third_party/ppapi/c/pp_errors.h"
17 #include "native_client/src/third_party/ppapi/c/ppb_input_event.h"
18
19 namespace {
20
21 using ppapi_proxy::DebugPrintf;
22 using ppapi_proxy::GetMainSrpcChannel;
23 using ppapi_proxy::PluginInputEvent;
24 using ppapi_proxy::PluginResource;
25
26 // InputEvent ------------------------------------------------------------------
27
28 int32_t RequestInputEvents(PP_Instance instance, uint32_t event_classes) {
29 DebugPrintf("PPB_InputEvent::RequestInputEvents: instance=%"NACL_PRIu32", "
30 "event_classes=%"NACL_PRIu32"\n",
31 instance, event_classes);
32 uint32_t success = 0;
33 NaClSrpcError srpc_result =
34 PpbInputEventRpcClient::PPB_InputEvent_RequestInputEvents(
35 GetMainSrpcChannel(),
36 instance,
37 static_cast<int32_t>(event_classes),
38 false, // false -> Don't filter.
39 reinterpret_cast<int32_t*>(&success));
40 if (srpc_result == NACL_SRPC_RESULT_OK) {
41 return success;
42 }
43 return PP_ERROR_FAILED;
44 }
45
46 int32_t RequestFilteringInputEvents(PP_Instance instance,
47 uint32_t event_classes) {
48 DebugPrintf("PPB_InputEvent::RequestFilteringInputEvents: instance="
49 "%"NACL_PRIu32", event_classes=%"NACL_PRIu32"\n",
50 instance, event_classes);
51 uint32_t success = 0;
52 NaClSrpcError srpc_result =
53 PpbInputEventRpcClient::PPB_InputEvent_RequestInputEvents(
54 GetMainSrpcChannel(),
55 instance,
56 static_cast<int32_t>(event_classes),
57 true, // true -> Filter.
58 reinterpret_cast<int32_t*>(&success));
59 if (srpc_result == NACL_SRPC_RESULT_OK) {
60 return success;
61 }
62 return PP_ERROR_FAILED;
63 }
64
65 void ClearInputEventRequest(PP_Instance instance,
66 uint32_t event_classes) {
67 DebugPrintf("PPB_InputEvent::ClearInputEventRequest: instance=%"NACL_PRIu32
68 ", event_classes=%"NACL_PRIu32"\n",
69 instance, event_classes);
70 PpbInputEventRpcClient::PPB_InputEvent_ClearInputEventRequest(
71 GetMainSrpcChannel(),
72 instance,
73 static_cast<int32_t>(event_classes));
74 }
75
76 // Helper RAII class to get the PluginInputEvent from the PP_Resource and hold
77 // it with a scoped_refptr. Also does a DebugPrintf.
78 class InputEventGetter {
79 public:
80 InputEventGetter(PP_Resource resource, const char* function_name) {
81 DebugPrintf("PPB_InputEvent::%s: resource=%"NACL_PRIu32"\n",
82 function_name,
83 resource);
84 input_event_ =
85 PluginResource::GetAs<PluginInputEvent>(resource);
86 }
87
88 PluginInputEvent* get() {
89 return input_event_.get();
90 }
91
92 private:
93 NACL_DISALLOW_COPY_AND_ASSIGN(InputEventGetter);
94 scoped_refptr<PluginInputEvent> input_event_;
95 };
96 // This macro is for starting a resource function. It makes sure resource_arg
97 // is of type PluginInputEvent, and returns error_return if it's not.
98 #define BEGIN_RESOURCE_THUNK(function_name, resource_arg, error_return) \
99 InputEventGetter input_event(resource_arg, function_name); \
100 if (!input_event.get()) { \
101 return error_return; \
102 } \
103 do {} while(0)
104
105 PP_Bool IsInputEvent(PP_Resource resource) {
106 BEGIN_RESOURCE_THUNK("IsInputEvent", resource, PP_FALSE);
107 return PP_TRUE;
108 }
109
110 #define IMPLEMENT_RESOURCE_THUNK(function, resource_arg, error_return) \
111 BEGIN_RESOURCE_THUNK(#function, resource_arg, error_return); \
112 return input_event.get()->function()
113
114 PP_InputEvent_Type GetType(PP_Resource event) {
115 IMPLEMENT_RESOURCE_THUNK(GetType, event, PP_INPUTEVENT_TYPE_UNDEFINED);
116 }
117
118 PP_TimeTicks GetTimeStamp(PP_Resource event) {
119 IMPLEMENT_RESOURCE_THUNK(GetTimeStamp, event, 0.0);
120 }
121
122 uint32_t GetModifiers(PP_Resource event) {
123 IMPLEMENT_RESOURCE_THUNK(GetModifiers, event, 0);
124 }
125
126 // Mouse -----------------------------------------------------------------------
127
128 PP_Bool IsMouseInputEvent(PP_Resource resource) {
129 if (!IsInputEvent(resource))
130 return PP_FALSE;
131 PP_InputEvent_Type type = GetType(resource);
132 return PP_FromBool(type == PP_INPUTEVENT_TYPE_MOUSEDOWN ||
133 type == PP_INPUTEVENT_TYPE_MOUSEUP ||
134 type == PP_INPUTEVENT_TYPE_MOUSEMOVE ||
135 type == PP_INPUTEVENT_TYPE_MOUSEENTER ||
136 type == PP_INPUTEVENT_TYPE_MOUSELEAVE ||
137 type == PP_INPUTEVENT_TYPE_CONTEXTMENU);
138 }
139
140 PP_InputEvent_MouseButton GetMouseButton(PP_Resource mouse_event) {
141 IMPLEMENT_RESOURCE_THUNK(GetMouseButton, mouse_event,
142 PP_INPUTEVENT_MOUSEBUTTON_NONE);
143 }
144
145 PP_Point GetMousePosition(PP_Resource mouse_event) {
146 IMPLEMENT_RESOURCE_THUNK(GetMousePosition, mouse_event, PP_MakePoint(0, 0));
147 }
148
149 int32_t GetMouseClickCount(PP_Resource mouse_event) {
150 IMPLEMENT_RESOURCE_THUNK(GetMouseClickCount, mouse_event, 0);
151 }
152
153 // Wheel -----------------------------------------------------------------------
154
155 PP_Bool IsWheelInputEvent(PP_Resource resource) {
156 if (!IsInputEvent(resource))
157 return PP_FALSE;
158 PP_InputEvent_Type type = GetType(resource);
159 return PP_FromBool(type == PP_INPUTEVENT_TYPE_MOUSEWHEEL);
160 }
161
162 PP_FloatPoint GetWheelDelta(PP_Resource wheel_event) {
163 IMPLEMENT_RESOURCE_THUNK(GetWheelDelta, wheel_event, PP_MakeFloatPoint(0, 0));
164 }
165
166 PP_FloatPoint GetWheelTicks(PP_Resource wheel_event) {
167 IMPLEMENT_RESOURCE_THUNK(GetWheelTicks, wheel_event, PP_MakeFloatPoint(0, 0));
168 }
169
170 PP_Bool GetWheelScrollByPage(PP_Resource wheel_event) {
171 IMPLEMENT_RESOURCE_THUNK(GetWheelScrollByPage, wheel_event, PP_FALSE);
172 }
173
174 PP_Bool IsKeyboardInputEvent(PP_Resource resource) {
175 if (!IsInputEvent(resource))
176 return PP_FALSE;
177 PP_InputEvent_Type type = GetType(resource);
178 return PP_FromBool(type == PP_INPUTEVENT_TYPE_KEYDOWN ||
179 type == PP_INPUTEVENT_TYPE_KEYUP ||
180 type == PP_INPUTEVENT_TYPE_CHAR);
181 }
182
183 uint32_t GetKeyCode(PP_Resource key_event) {
184 IMPLEMENT_RESOURCE_THUNK(GetKeyCode, key_event, 0);
185 }
186
187 PP_Var GetCharacterText(PP_Resource character_event) {
188 IMPLEMENT_RESOURCE_THUNK(GetCharacterText, character_event,
189 PP_MakeUndefined());
190 }
191
192 } // namespace
193
194 namespace ppapi_proxy {
195
196 // static
197 const PPB_InputEvent* PluginInputEvent::GetInterface() {
198 static const PPB_InputEvent input_event_interface = {
199 &::RequestInputEvents,
sehr (please use chromium) 2011/07/20 00:33:41 I think in the rest of the proxy we've not used th
dmichael (off chromium) 2011/07/20 03:50:22 Good point. The & is definitely unnecessary. The l
200 &::RequestFilteringInputEvents,
201 &::ClearInputEventRequest,
202 &::IsInputEvent,
203 &::GetType,
204 &::GetTimeStamp,
205 &::GetModifiers
206 };
207 return &input_event_interface;
208 }
209
210 // static
211 const PPB_MouseInputEvent* PluginInputEvent::GetMouseInterface() {
212 static const PPB_MouseInputEvent mouse_input_event_interface = {
213 &::IsMouseInputEvent,
214 &::GetMouseButton,
215 &::GetMousePosition,
216 &::GetMouseClickCount
217 };
218 return &mouse_input_event_interface;
219 }
220
221 // static
222 const PPB_WheelInputEvent* PluginInputEvent::GetWheelInterface() {
223 static const PPB_WheelInputEvent wheel_input_event_interface = {
224 &::IsWheelInputEvent,
225 &::GetWheelDelta,
226 &::GetWheelTicks,
227 &::GetWheelScrollByPage
228 };
229 return &wheel_input_event_interface;
230 }
231
232 // static
233 const PPB_KeyboardInputEvent* PluginInputEvent::GetKeyboardInterface() {
234 static const PPB_KeyboardInputEvent keyboard_input_event_interface = {
235 &::IsKeyboardInputEvent,
236 &::GetKeyCode,
237 &::GetCharacterText
238 };
239 return &keyboard_input_event_interface;
240 }
241
242 PluginInputEvent::PluginInputEvent()
243 : character_text_(PP_MakeUndefined()) {
244 }
245
246 void PluginInputEvent::Init(const InputEventData& input_event_data,
247 PP_Var character_text) {
248 input_event_data_ = input_event_data;
249 character_text_ = character_text;
250 }
251
252 PluginInputEvent::~PluginInputEvent() {
253 // Release the character text. This is a no-op if it's not a string.
254 PPBVarInterface()->Release(character_text_);
255 }
256
257 PP_InputEvent_Type PluginInputEvent::GetType() const {
258 return input_event_data_.event_type;
259 }
260
261 PP_TimeTicks PluginInputEvent::GetTimeStamp() const {
262 return input_event_data_.event_time_stamp;
263 }
264
265 uint32_t PluginInputEvent::GetModifiers() const {
266 return input_event_data_.event_modifiers;
267 }
268
269 PP_InputEvent_MouseButton PluginInputEvent::GetMouseButton() const {
270 return input_event_data_.mouse_button;
271 }
272
273 PP_Point PluginInputEvent::GetMousePosition() const {
274 return input_event_data_.mouse_position;
275 }
276
277 int32_t PluginInputEvent::GetMouseClickCount() const {
278 return input_event_data_.mouse_click_count;
279 }
280
281 PP_FloatPoint PluginInputEvent::GetWheelDelta() const {
282 return input_event_data_.wheel_delta;
283 }
284
285 PP_FloatPoint PluginInputEvent::GetWheelTicks() const {
286 return input_event_data_.wheel_ticks;
287 }
288
289 PP_Bool PluginInputEvent::GetWheelScrollByPage() const {
290 return PP_FromBool(input_event_data_.wheel_scroll_by_page);
291 }
292
293 uint32_t PluginInputEvent::GetKeyCode() const {
294 return input_event_data_.key_code;
295 }
296
297 PP_Var PluginInputEvent::GetCharacterText() const {
298 PPBVarInterface()->AddRef(character_text_);
299 return character_text_;
300 }
301
302 } // namespace ppapi_proxy
303
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698