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

Side by Side Diff: webkit/glue/plugins/pepper_event_conversion.cc

Issue 2884016: Chrome side of Pepper v2 scrollbar widget. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 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
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 "webkit/glue/plugins/pepper_event_conversion.h"
6
7 #include "base/logging.h"
8 #include "base/scoped_ptr.h"
9 #include "third_party/ppapi/c/pp_event.h"
10 #include "third_party/WebKit/WebKit/chromium/public/WebInputEvent.h"
11
12 using WebKit::WebInputEvent;
13 using WebKit::WebKeyboardEvent;
14 using WebKit::WebMouseEvent;
15 using WebKit::WebMouseWheelEvent;
16
17 namespace {
18 // Anonymous namespace for functions converting WebInputEvent to PP_Event and
19 // back.
20 PP_Event_Type ConvertEventTypes(WebInputEvent::Type wetype) {
21 switch (wetype) {
22 case WebInputEvent::MouseDown:
23 return PP_Event_Type_MouseDown;
24 case WebInputEvent::MouseUp:
25 return PP_Event_Type_MouseUp;
26 case WebInputEvent::MouseMove:
27 return PP_Event_Type_MouseMove;
28 case WebInputEvent::MouseEnter:
29 return PP_Event_Type_MouseEnter;
30 case WebInputEvent::MouseLeave:
31 return PP_Event_Type_MouseLeave;
32 case WebInputEvent::MouseWheel:
33 return PP_Event_Type_MouseWheel;
34 case WebInputEvent::RawKeyDown:
35 return PP_Event_Type_RawKeyDown;
36 case WebInputEvent::KeyDown:
37 return PP_Event_Type_KeyDown;
38 case WebInputEvent::KeyUp:
39 return PP_Event_Type_KeyUp;
40 case WebInputEvent::Char:
41 return PP_Event_Type_Char;
42 case WebInputEvent::Undefined:
43 default:
44 return PP_Event_Type_Undefined;
45 }
46 }
47
48 void BuildKeyEvent(const WebInputEvent* event, PP_Event* pp_event) {
49 const WebKeyboardEvent* key_event =
50 reinterpret_cast<const WebKeyboardEvent*>(event);
51 pp_event->u.key.modifier = key_event->modifiers;
52 pp_event->u.key.normalizedKeyCode = key_event->windowsKeyCode;
53 }
54
55 void BuildCharEvent(const WebInputEvent* event, PP_Event* pp_event) {
56 const WebKeyboardEvent* key_event =
57 reinterpret_cast<const WebKeyboardEvent*>(event);
58 pp_event->u.character.modifier = key_event->modifiers;
59 // For consistency, check that the sizes of the texts agree.
60 DCHECK(sizeof(pp_event->u.character.text) == sizeof(key_event->text));
61 DCHECK(sizeof(pp_event->u.character.unmodifiedText) ==
62 sizeof(key_event->unmodifiedText));
63 for (size_t i = 0; i < WebKeyboardEvent::textLengthCap; ++i) {
64 pp_event->u.character.text[i] = key_event->text[i];
65 pp_event->u.character.unmodifiedText[i] = key_event->unmodifiedText[i];
66 }
67 }
68
69 void BuildMouseEvent(const WebInputEvent* event, PP_Event* pp_event) {
70 const WebMouseEvent* mouse_event =
71 reinterpret_cast<const WebMouseEvent*>(event);
72 pp_event->u.mouse.modifier = mouse_event->modifiers;
73 pp_event->u.mouse.button = mouse_event->button;
74 pp_event->u.mouse.x = mouse_event->x;
75 pp_event->u.mouse.y = mouse_event->y;
76 pp_event->u.mouse.clickCount = mouse_event->clickCount;
77 }
78
79 void BuildMouseWheelEvent(const WebInputEvent* event, PP_Event* pp_event) {
80 const WebMouseWheelEvent* mouse_wheel_event =
81 reinterpret_cast<const WebMouseWheelEvent*>(event);
82 pp_event->u.wheel.modifier = mouse_wheel_event->modifiers;
83 pp_event->u.wheel.deltaX = mouse_wheel_event->deltaX;
84 pp_event->u.wheel.deltaY = mouse_wheel_event->deltaY;
85 pp_event->u.wheel.wheelTicksX = mouse_wheel_event->wheelTicksX;
86 pp_event->u.wheel.wheelTicksY = mouse_wheel_event->wheelTicksY;
87 pp_event->u.wheel.scrollByPage = mouse_wheel_event->scrollByPage;
88 }
89
90
91 WebKeyboardEvent* BuildKeyEvent(const PP_Event& event) {
92 WebKeyboardEvent* key_event = new WebKeyboardEvent();
93 switch (event.type) {
94 case PP_Event_Type_RawKeyDown:
95 key_event->type = WebInputEvent::RawKeyDown;
96 break;
97 case PP_Event_Type_KeyDown:
98 key_event->type = WebInputEvent::KeyDown;
99 break;
100 case PP_Event_Type_KeyUp:
101 key_event->type = WebInputEvent::KeyUp;
102 break;
103 }
104 key_event->timeStampSeconds = event.timeStampSeconds;
105 key_event->modifiers = event.u.key.modifier;
106 key_event->windowsKeyCode = event.u.key.normalizedKeyCode;
107 return key_event;
108 }
109
110 WebKeyboardEvent* BuildCharEvent(const PP_Event& event) {
111 WebKeyboardEvent* key_event = new WebKeyboardEvent();
112 key_event->type = WebInputEvent::Char;
113 key_event->timeStampSeconds = event.timeStampSeconds;
114 key_event->modifiers = event.u.character.modifier;
115 // For consistency, check that the sizes of the texts agree.
116 DCHECK(sizeof(event.u.character.text) == sizeof(key_event->text));
117 DCHECK(sizeof(event.u.character.unmodifiedText) ==
118 sizeof(key_event->unmodifiedText));
119 for (size_t i = 0; i < WebKeyboardEvent::textLengthCap; ++i) {
120 key_event->text[i] = event.u.character.text[i];
121 key_event->unmodifiedText[i] = event.u.character.unmodifiedText[i];
122 }
123 return key_event;
124 }
125
126 WebMouseEvent* BuildMouseEvent(const PP_Event& event) {
127 WebMouseEvent* mouse_event = new WebMouseEvent();
128 switch (event.type) {
129 case PP_Event_Type_MouseDown:
130 mouse_event->type = WebInputEvent::MouseDown;
131 break;
132 case PP_Event_Type_MouseUp:
133 mouse_event->type = WebInputEvent::MouseUp;
134 break;
135 case PP_Event_Type_MouseMove:
136 mouse_event->type = WebInputEvent::MouseMove;
137 break;
138 case PP_Event_Type_MouseEnter:
139 mouse_event->type = WebInputEvent::MouseEnter;
140 break;
141 case PP_Event_Type_MouseLeave:
142 mouse_event->type = WebInputEvent::MouseLeave;
143 break;
144 }
145 mouse_event->timeStampSeconds = event.timeStampSeconds;
146 mouse_event->modifiers = event.u.mouse.modifier;
147 mouse_event->button =
148 static_cast<WebMouseEvent::Button>(event.u.mouse.button);
149 mouse_event->x = event.u.mouse.x;
150 mouse_event->y = event.u.mouse.y;
151 mouse_event->clickCount = event.u.mouse.clickCount;
152 return mouse_event;
153 }
154
155 WebMouseWheelEvent* BuildMouseWheelEvent(const PP_Event& event) {
156 WebMouseWheelEvent* mouse_wheel_event = new WebMouseWheelEvent();
157 mouse_wheel_event->type = WebInputEvent::MouseWheel;
158 mouse_wheel_event->timeStampSeconds = event.timeStampSeconds;
159 mouse_wheel_event->modifiers = event.u.wheel.modifier;
160 mouse_wheel_event->deltaX = event.u.wheel.deltaX;
161 mouse_wheel_event->deltaY = event.u.wheel.deltaY;
162 mouse_wheel_event->wheelTicksX = event.u.wheel.wheelTicksX;
163 mouse_wheel_event->wheelTicksY = event.u.wheel.wheelTicksY;
164 mouse_wheel_event->scrollByPage = event.u.wheel.scrollByPage;
165 return mouse_wheel_event;
166 }
167
168 } // namespace
169
170 namespace pepper {
171
172 PP_Event* CreatePP_Event(const WebInputEvent& event) {
173 scoped_ptr<PP_Event> pp_event(new PP_Event);
174
175 pp_event->type = ConvertEventTypes(event.type);
176 pp_event->size = sizeof(pp_event);
177 pp_event->timeStampSeconds = event.timeStampSeconds;
178 switch (pp_event->type) {
179 case PP_Event_Type_Undefined:
180 return NULL;
181 case PP_Event_Type_MouseDown:
182 case PP_Event_Type_MouseUp:
183 case PP_Event_Type_MouseMove:
184 case PP_Event_Type_MouseEnter:
185 case PP_Event_Type_MouseLeave:
186 BuildMouseEvent(&event, pp_event.get());
187 break;
188 case PP_Event_Type_MouseWheel:
189 BuildMouseWheelEvent(&event, pp_event.get());
190 break;
191 case PP_Event_Type_RawKeyDown:
192 case PP_Event_Type_KeyDown:
193 case PP_Event_Type_KeyUp:
194 BuildKeyEvent(&event, pp_event.get());
195 break;
196 case PP_Event_Type_Char:
197 BuildCharEvent(&event, pp_event.get());
198 break;
199 }
200
201 return pp_event.release();
202 }
203
204 WebInputEvent* CreateWebInputEvent(const PP_Event& event) {
205 scoped_ptr<WebInputEvent> web_input_event;
206 switch (event.type) {
207 case PP_Event_Type_Undefined:
208 return NULL;
209 case PP_Event_Type_MouseDown:
210 case PP_Event_Type_MouseUp:
211 case PP_Event_Type_MouseMove:
212 case PP_Event_Type_MouseEnter:
213 case PP_Event_Type_MouseLeave:
214 web_input_event.reset(BuildMouseEvent(event));
215 break;
216 case PP_Event_Type_MouseWheel:
217 web_input_event.reset(BuildMouseWheelEvent(event));
218 break;
219 case PP_Event_Type_RawKeyDown:
220 case PP_Event_Type_KeyDown:
221 case PP_Event_Type_KeyUp:
222 web_input_event.reset(BuildKeyEvent(event));
223 break;
224 case PP_Event_Type_Char:
225 web_input_event.reset(BuildCharEvent(event));
226 break;
227 case PP_Event_Type_Focus:
228 // NOTIMPLEMENTED();
229 return NULL;
230 }
231
232 return web_input_event.release();
233 }
234
235 } // namespace pepper
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698