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

Side by Side Diff: remoting/host/event_executor_win.cc

Issue 2690003: Copy the (early prototype of) remoting in Chrome into the public tree.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 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
« no previous file with comments | « remoting/host/event_executor_win.h ('k') | remoting/host/heartbeat_sender.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2010 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 #include "remoting/host/event_executor_win.h"
6
7 #include <windows.h>
8 #include "base/keyboard_codes.h"
9 #include "base/stl_util-inl.h"
10
11 namespace remoting {
12
13 // TODO(hclam): Move this method to base.
14 // TODO(hclam): Using values look ugly, change it to something else.
15 static base::KeyboardCode WindowsKeyCodeForPosixKeyCode(int keycode) {
16 switch (keycode) {
17 case 0x08:
18 return base::VKEY_BACK;
19 case 0x09:
20 return base::VKEY_TAB;
21 case 0x0C:
22 return base::VKEY_CLEAR;
23 case 0x0D:
24 return base::VKEY_RETURN;
25 case 0x10:
26 return base::VKEY_SHIFT;
27 case 0x11:
28 return base::VKEY_CONTROL;
29 case 0x12:
30 return base::VKEY_MENU;
31 case 0x13:
32 return base::VKEY_PAUSE;
33 case 0x14:
34 return base::VKEY_CAPITAL;
35 case 0x15:
36 return base::VKEY_KANA;
37 case 0x17:
38 return base::VKEY_JUNJA;
39 case 0x18:
40 return base::VKEY_FINAL;
41 case 0x19:
42 return base::VKEY_KANJI;
43 case 0x1B:
44 return base::VKEY_ESCAPE;
45 case 0x1C:
46 return base::VKEY_CONVERT;
47 case 0x1D:
48 return base::VKEY_NONCONVERT;
49 case 0x1E:
50 return base::VKEY_ACCEPT;
51 case 0x1F:
52 return base::VKEY_MODECHANGE;
53 case 0x20:
54 return base::VKEY_SPACE;
55 case 0x21:
56 return base::VKEY_PRIOR;
57 case 0x22:
58 return base::VKEY_NEXT;
59 case 0x23:
60 return base::VKEY_END;
61 case 0x24:
62 return base::VKEY_HOME;
63 case 0x25:
64 return base::VKEY_LEFT;
65 case 0x26:
66 return base::VKEY_UP;
67 case 0x27:
68 return base::VKEY_RIGHT;
69 case 0x28:
70 return base::VKEY_DOWN;
71 case 0x29:
72 return base::VKEY_SELECT;
73 case 0x2A:
74 return base::VKEY_PRINT;
75 case 0x2B:
76 return base::VKEY_EXECUTE;
77 case 0x2C:
78 return base::VKEY_SNAPSHOT;
79 case 0x2D:
80 return base::VKEY_INSERT;
81 case 0x2E:
82 return base::VKEY_DELETE;
83 case 0x2F:
84 return base::VKEY_HELP;
85 case 0x30:
86 return base::VKEY_0;
87 case 0x31:
88 return base::VKEY_1;
89 case 0x32:
90 return base::VKEY_2;
91 case 0x33:
92 return base::VKEY_3;
93 case 0x34:
94 return base::VKEY_4;
95 case 0x35:
96 return base::VKEY_5;
97 case 0x36:
98 return base::VKEY_6;
99 case 0x37:
100 return base::VKEY_7;
101 case 0x38:
102 return base::VKEY_8;
103 case 0x39:
104 return base::VKEY_9;
105 case 0x41:
106 return base::VKEY_A;
107 case 0x42:
108 return base::VKEY_B;
109 case 0x43:
110 return base::VKEY_C;
111 case 0x44:
112 return base::VKEY_D;
113 case 0x45:
114 return base::VKEY_E;
115 case 0x46:
116 return base::VKEY_F;
117 case 0x47:
118 return base::VKEY_G;
119 case 0x48:
120 return base::VKEY_H;
121 case 0x49:
122 return base::VKEY_I;
123 case 0x4A:
124 return base::VKEY_J;
125 case 0x4B:
126 return base::VKEY_K;
127 case 0x4C:
128 return base::VKEY_L;
129 case 0x4D:
130 return base::VKEY_M;
131 case 0x4E:
132 return base::VKEY_N;
133 case 0x4F:
134 return base::VKEY_O;
135 case 0x50:
136 return base::VKEY_P;
137 case 0x51:
138 return base::VKEY_Q;
139 case 0x52:
140 return base::VKEY_R;
141 case 0x53:
142 return base::VKEY_S;
143 case 0x54:
144 return base::VKEY_T;
145 case 0x55:
146 return base::VKEY_U;
147 case 0x56:
148 return base::VKEY_V;
149 case 0x57:
150 return base::VKEY_W;
151 case 0x58:
152 return base::VKEY_X;
153 case 0x59:
154 return base::VKEY_Y;
155 case 0x5A:
156 return base::VKEY_Z;
157 case 0x5B:
158 return base::VKEY_LWIN;
159 case 0x5C:
160 return base::VKEY_RWIN;
161 case 0x5D:
162 return base::VKEY_APPS;
163 case 0x5F:
164 return base::VKEY_SLEEP;
165 case 0x60:
166 return base::VKEY_NUMPAD0;
167 case 0x61:
168 return base::VKEY_NUMPAD1;
169 case 0x62:
170 return base::VKEY_NUMPAD2;
171 case 0x63:
172 return base::VKEY_NUMPAD3;
173 case 0x64:
174 return base::VKEY_NUMPAD4;
175 case 0x65:
176 return base::VKEY_NUMPAD5;
177 case 0x66:
178 return base::VKEY_NUMPAD6;
179 case 0x67:
180 return base::VKEY_NUMPAD7;
181 case 0x68:
182 return base::VKEY_NUMPAD8;
183 case 0x69:
184 return base::VKEY_NUMPAD9;
185 case 0x6A:
186 return base::VKEY_MULTIPLY;
187 case 0x6B:
188 return base::VKEY_ADD;
189 case 0x6C:
190 return base::VKEY_SEPARATOR;
191 case 0x6D:
192 return base::VKEY_SUBTRACT;
193 case 0x6E:
194 return base::VKEY_DECIMAL;
195 case 0x6F:
196 return base::VKEY_DIVIDE;
197 case 0x70:
198 return base::VKEY_F1;
199 case 0x71:
200 return base::VKEY_F2;
201 case 0x72:
202 return base::VKEY_F3;
203 case 0x73:
204 return base::VKEY_F4;
205 case 0x74:
206 return base::VKEY_F5;
207 case 0x75:
208 return base::VKEY_F6;
209 case 0x76:
210 return base::VKEY_F7;
211 case 0x77:
212 return base::VKEY_F8;
213 case 0x78:
214 return base::VKEY_F9;
215 case 0x79:
216 return base::VKEY_F10;
217 case 0x7A:
218 return base::VKEY_F11;
219 case 0x7B:
220 return base::VKEY_F12;
221 case 0x7C:
222 return base::VKEY_F13;
223 case 0x7D:
224 return base::VKEY_F14;
225 case 0x7E:
226 return base::VKEY_F15;
227 case 0x7F:
228 return base::VKEY_F16;
229 case 0x80:
230 return base::VKEY_F17;
231 case 0x81:
232 return base::VKEY_F18;
233 case 0x82:
234 return base::VKEY_F19;
235 case 0x83:
236 return base::VKEY_F20;
237 case 0x84:
238 return base::VKEY_F21;
239 case 0x85:
240 return base::VKEY_F22;
241 case 0x86:
242 return base::VKEY_F23;
243 case 0x87:
244 return base::VKEY_F24;
245 case 0x90:
246 return base::VKEY_NUMLOCK;
247 case 0x91:
248 return base::VKEY_SCROLL;
249 case 0xA0:
250 return base::VKEY_LSHIFT;
251 case 0xA1:
252 return base::VKEY_RSHIFT;
253 case 0xA2:
254 return base::VKEY_LCONTROL;
255 case 0xA3:
256 return base::VKEY_RCONTROL;
257 case 0xA4:
258 return base::VKEY_LMENU;
259 case 0xA5:
260 return base::VKEY_RMENU;
261 case 0xA6:
262 return base::VKEY_BROWSER_BACK;
263 case 0xA7:
264 return base::VKEY_BROWSER_FORWARD;
265 case 0xA8:
266 return base::VKEY_BROWSER_REFRESH;
267 case 0xA9:
268 return base::VKEY_BROWSER_STOP;
269 case 0xAA:
270 return base::VKEY_BROWSER_SEARCH;
271 case 0xAB:
272 return base::VKEY_BROWSER_FAVORITES;
273 case 0xAC:
274 return base::VKEY_BROWSER_HOME;
275 case 0xAD:
276 return base::VKEY_VOLUME_MUTE;
277 case 0xAE:
278 return base::VKEY_VOLUME_DOWN;
279 case 0xAF:
280 return base::VKEY_VOLUME_UP;
281 case 0xB0:
282 return base::VKEY_MEDIA_NEXT_TRACK;
283 case 0xB1:
284 return base::VKEY_MEDIA_PREV_TRACK;
285 case 0xB2:
286 return base::VKEY_MEDIA_STOP;
287 case 0xB3:
288 return base::VKEY_MEDIA_PLAY_PAUSE;
289 case 0xB4:
290 return base::VKEY_MEDIA_LAUNCH_MAIL;
291 case 0xB5:
292 return base::VKEY_MEDIA_LAUNCH_MEDIA_SELECT;
293 case 0xB6:
294 return base::VKEY_MEDIA_LAUNCH_APP1;
295 case 0xB7:
296 return base::VKEY_MEDIA_LAUNCH_APP2;
297 case 0xBA:
298 return base::VKEY_OEM_1;
299 case 0xBB:
300 return base::VKEY_OEM_PLUS;
301 case 0xBC:
302 return base::VKEY_OEM_COMMA;
303 case 0xBD:
304 return base::VKEY_OEM_MINUS;
305 case 0xBE:
306 return base::VKEY_OEM_PERIOD;
307 case 0xBF:
308 return base::VKEY_OEM_2;
309 case 0xC0:
310 return base::VKEY_OEM_3;
311 case 0xDB:
312 return base::VKEY_OEM_4;
313 case 0xDC:
314 return base::VKEY_OEM_5;
315 case 0xDD:
316 return base::VKEY_OEM_6;
317 case 0xDE:
318 return base::VKEY_OEM_7;
319 case 0xDF:
320 return base::VKEY_OEM_8;
321 case 0xE2:
322 return base::VKEY_OEM_102;
323 case 0xE5:
324 return base::VKEY_PROCESSKEY;
325 case 0xE7:
326 return base::VKEY_PACKET;
327 case 0xF6:
328 return base::VKEY_ATTN;
329 case 0xF7:
330 return base::VKEY_CRSEL;
331 case 0xF8:
332 return base::VKEY_EXSEL;
333 case 0xF9:
334 return base::VKEY_EREOF;
335 case 0xFA:
336 return base::VKEY_PLAY;
337 case 0xFB:
338 return base::VKEY_ZOOM;
339 case 0xFC:
340 return base::VKEY_NONAME;
341 case 0xFD:
342 return base::VKEY_PA1;
343 case 0xFE:
344 return base::VKEY_OEM_CLEAR;
345 default:
346 return base::VKEY_UNKNOWN;
347 }
348 }
349
350 EventExecutorWin::EventExecutorWin() {
351 }
352
353 EventExecutorWin::~EventExecutorWin() {
354 }
355
356 void EventExecutorWin::HandleInputEvents(ClientMessageList* messages) {
357 for (size_t i = 0; i < messages->size(); ++i) {
358 chromotocol_pb::ClientMessage* msg = (*messages)[i];
359 if (msg->has_mouse_set_position_event()) {
360 mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE,
361 static_cast<int>((msg->mouse_set_position_event().x() * 65535)),
362 static_cast<int>((msg->mouse_set_position_event().y() * 65535)),
363 0, 0);
364 } else if (msg->has_mouse_move_event()) {
365 mouse_event(MOUSEEVENTF_MOVE,
366 msg->mouse_move_event().offset_x(),
367 msg->mouse_move_event().offset_y(), 0, 0);
368 } else if (msg->has_mouse_wheel_event()) {
369 // TODO(hclam): Handle wheel events.
370 } else if (msg->has_mouse_down_event()) {
371 if (msg->mouse_down_event().button() ==
372 chromotocol_pb::MouseDownEvent::LEFT) {
373 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
374 } else if (msg->mouse_down_event().button() ==
375 chromotocol_pb::MouseDownEvent::RIGHT) {
376 mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
377 } else {
378 // TODO(hclam): Handle other buttons.
379 }
380 } else if (msg->has_mouse_up_event()) {
381 if (msg->mouse_up_event().button() ==
382 chromotocol_pb::MouseUpEvent::LEFT) {
383 mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
384 } else if (msg->mouse_up_event().button() ==
385 chromotocol_pb::MouseUpEvent::RIGHT) {
386 mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
387 } else {
388 // TODO(hclam): Handle other buttons.
389 }
390 } else if (msg->has_key_event()) {
391 base::KeyboardCode key_code =
392 WindowsKeyCodeForPosixKeyCode(msg->key_event().key());
393 if (key_code != base::VKEY_UNKNOWN) {
394 keybd_event(key_code, MapVirtualKey(key_code, 0),
395 msg->key_event().pressed() ? 0 : KEYEVENTF_KEYUP,
396 NULL);
397 }
398 }
399 }
400 // We simply delete all messages.
401 // TODO(hclam): Delete messages processed.
402 STLDeleteElements<ClientMessageList>(messages);
403 }
404
405 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/event_executor_win.h ('k') | remoting/host/heartbeat_sender.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698