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

Side by Side Diff: ui/events/blink/web_input_event.cc

Issue 2234023002: Refactor WebInputEventAura to ui/events/blink (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 4 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/web_input_event_aura.h" 5 #include "ui/events/blink/web_input_event.h"
6 6
7 #include "build/build_config.h"
8 #include "content/browser/renderer_host/input/web_input_event_util.h"
9 #include "ui/aura/client/screen_position_client.h"
10 #include "ui/aura/window.h"
11 #include "ui/events/base_event_utils.h" 7 #include "ui/events/base_event_utils.h"
12 #include "ui/events/blink/blink_event_util.h" 8 #include "ui/events/blink/blink_event_util.h"
13 #include "ui/events/event.h" 9 #include "ui/events/event.h"
14 #include "ui/events/event_utils.h" 10 #include "ui/events/event_utils.h"
15 #include "ui/events/keycodes/dom/keycode_converter.h" 11 #include "ui/events/keycodes/dom/keycode_converter.h"
16 #include "ui/events/keycodes/keyboard_code_conversion.h" 12 #include "ui/events/keycodes/keyboard_code_conversion.h"
17 13
18 namespace content { 14 #if defined(OS_WIN)
15 #include "ui/events/blink/web_input_event_builders_win.h"
16 #endif
17
18 namespace ui {
19 19
20 namespace { 20 namespace {
21 // Used for scrolling. This matches Firefox behavior.
22 const int kPixelsPerTick = 53;
21 23
22 gfx::Point GetScreenLocationFromEvent(const ui::LocatedEvent& event) { 24 gfx::Point GetScreenLocationFromEvent(
23 if (!event.target()) 25 const LocatedEvent& event,
24 return event.root_location(); 26 const base::Callback<gfx::Point(const LocatedEvent& event)>&
25 27 screen_location_callback) {
26 aura::Window* root = 28 return event.target() ? screen_location_callback.Run(event)
sadrul 2016/08/15 15:55:12 DCHECK that screen_location_callback is non-null
jonross 2016/08/16 15:25:16 Done.
27 static_cast<aura::Window*>(event.target())->GetRootWindow(); 29 : event.root_location();
28 aura::client::ScreenPositionClient* spc =
29 aura::client::GetScreenPositionClient(root);
30 if (!spc)
31 return event.root_location();
32
33 gfx::Point screen_location(event.root_location());
34 spc->ConvertPointToScreen(root, &screen_location);
35 return screen_location;
36 } 30 }
37 31
38 blink::WebPointerProperties::PointerType EventPointerTypeToWebPointerType( 32 blink::WebPointerProperties::PointerType EventPointerTypeToWebPointerType(
39 ui::EventPointerType pointer_type) { 33 EventPointerType pointer_type) {
40 switch (pointer_type) { 34 switch (pointer_type) {
41 case ui::EventPointerType::POINTER_TYPE_UNKNOWN: 35 case EventPointerType::POINTER_TYPE_UNKNOWN:
42 return blink::WebPointerProperties::PointerType::Unknown; 36 return blink::WebPointerProperties::PointerType::Unknown;
43 case ui::EventPointerType::POINTER_TYPE_MOUSE: 37 case EventPointerType::POINTER_TYPE_MOUSE:
44 return blink::WebPointerProperties::PointerType::Mouse; 38 return blink::WebPointerProperties::PointerType::Mouse;
45 case ui::EventPointerType::POINTER_TYPE_PEN: 39 case EventPointerType::POINTER_TYPE_PEN:
46 return blink::WebPointerProperties::PointerType::Pen; 40 return blink::WebPointerProperties::PointerType::Pen;
47 case ui::EventPointerType::POINTER_TYPE_TOUCH: 41 case EventPointerType::POINTER_TYPE_TOUCH:
48 return blink::WebPointerProperties::PointerType::Touch; 42 return blink::WebPointerProperties::PointerType::Touch;
49 } 43 }
50 NOTREACHED() << "Unexpected EventPointerType"; 44 NOTREACHED() << "Unexpected EventPointerType";
51 return blink::WebPointerProperties::PointerType::Unknown; 45 return blink::WebPointerProperties::PointerType::Unknown;
52 } 46 }
53 47
54 // Creates a WebGestureEvent from a ui::GestureEvent. Note that it does not 48 // Creates a WebGestureEvent from a GestureEvent. Note that it does not
55 // populate the event coordinates (i.e. |x|, |y|, |globalX|, and |globalY|). So 49 // populate the event coordinates (i.e. |x|, |y|, |globalX|, and |globalY|). So
56 // the caller must populate these fields. 50 // the caller must populate these fields.
57 blink::WebGestureEvent MakeWebGestureEventFromUIEvent( 51 blink::WebGestureEvent MakeWebGestureEventFromUIEvent(
58 const ui::GestureEvent& event) { 52 const GestureEvent& event) {
59 return ui::CreateWebGestureEvent( 53 return CreateWebGestureEvent(event.details(), event.time_stamp(),
60 event.details(), event.time_stamp(), event.location_f(), 54 event.location_f(), event.root_location_f(),
61 event.root_location_f(), event.flags(), event.unique_touch_event_id()); 55 event.flags(), event.unique_touch_event_id());
62 } 56 }
63 57
64 } // namespace 58 } // namespace
65 59
66 #if defined(OS_WIN) 60 #if defined(OS_WIN)
61 // On Windows, we can just use the builtin WebKit factory methods to fully
62 // construct our pre-translated events.
63
67 blink::WebMouseEvent MakeUntranslatedWebMouseEventFromNativeEvent( 64 blink::WebMouseEvent MakeUntranslatedWebMouseEventFromNativeEvent(
68 const base::NativeEvent& native_event, 65 const base::NativeEvent& native_event,
69 const base::TimeTicks& time_stamp, 66 const base::TimeTicks& time_stamp,
70 blink::WebPointerProperties::PointerType pointer_type); 67 blink::WebPointerProperties::PointerType pointer_type) {
68 return WebMouseEventBuilder::Build(native_event.hwnd, native_event.message,
69 native_event.wParam, native_event.lParam,
70 ui::EventTimeStampToSeconds(time_stamp),
71 pointer_type);
72 }
73
71 blink::WebMouseWheelEvent MakeUntranslatedWebMouseWheelEventFromNativeEvent( 74 blink::WebMouseWheelEvent MakeUntranslatedWebMouseWheelEventFromNativeEvent(
72 const base::NativeEvent& native_event, 75 const base::NativeEvent& native_event,
73 const base::TimeTicks& time_stamp, 76 const base::TimeTicks& time_stamp,
74 blink::WebPointerProperties::PointerType pointer_type); 77 blink::WebPointerProperties::PointerType pointer_type) {
78 return WebMouseWheelEventBuilder::Build(
79 native_event.hwnd, native_event.message, native_event.wParam,
80 native_event.lParam, ui::EventTimeStampToSeconds(time_stamp),
81 pointer_type);
82 }
83
75 blink::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent( 84 blink::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent(
76 const base::NativeEvent& native_event, 85 const base::NativeEvent& native_event,
77 const base::TimeTicks& time_stamp); 86 const base::TimeTicks& time_stamp) {
87 return WebKeyboardEventBuilder::Build(
88 native_event.hwnd, native_event.message, native_event.wParam,
89 native_event.lParam, ui::EventTimeStampToSeconds(time_stamp));
90 }
91
78 blink::WebGestureEvent MakeWebGestureEventFromNativeEvent( 92 blink::WebGestureEvent MakeWebGestureEventFromNativeEvent(
sadrul 2016/08/15 15:55:12 We should just remove this (maybe in a follow up C
jonross 2016/08/16 15:25:16 I've noted this on the bug.
79 const base::NativeEvent& native_event, 93 const base::NativeEvent& native_event,
80 const base::TimeTicks& time_stamp); 94 const base::TimeTicks& time_stamp) {
81 #endif 95 // TODO: Create gestures from native event.
96 NOTIMPLEMENTED();
97 return blink::WebGestureEvent();
98 }
82 99
83 blink::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent( 100 #endif // defined(OS_WIN)
84 const ui::KeyEvent& event) { 101
102 blink::WebKeyboardEvent MakeWebKeyboardEventFromUiEvent(
103 const KeyEvent& event) {
85 blink::WebKeyboardEvent webkit_event; 104 blink::WebKeyboardEvent webkit_event;
86 105
87 webkit_event.timeStampSeconds = 106 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp());
88 ui::EventTimeStampToSeconds(event.time_stamp()); 107 webkit_event.modifiers = EventFlagsToWebEventModifiers(event.flags()) |
89 webkit_event.modifiers = ui::EventFlagsToWebEventModifiers(event.flags()) |
90 DomCodeToWebInputEventModifiers(event.code()); 108 DomCodeToWebInputEventModifiers(event.code());
91 109
92 switch (event.type()) { 110 switch (event.type()) {
93 case ui::ET_KEY_PRESSED: 111 case ET_KEY_PRESSED:
94 webkit_event.type = event.is_char() ? blink::WebInputEvent::Char : 112 webkit_event.type = event.is_char() ? blink::WebInputEvent::Char
95 blink::WebInputEvent::RawKeyDown; 113 : blink::WebInputEvent::RawKeyDown;
96 break; 114 break;
97 case ui::ET_KEY_RELEASED: 115 case ET_KEY_RELEASED:
98 webkit_event.type = blink::WebInputEvent::KeyUp; 116 webkit_event.type = blink::WebInputEvent::KeyUp;
99 break; 117 break;
100 default: 118 default:
101 NOTREACHED(); 119 NOTREACHED();
102 } 120 }
103 121
104 if (webkit_event.modifiers & blink::WebInputEvent::AltKey) 122 if (webkit_event.modifiers & blink::WebInputEvent::AltKey)
105 webkit_event.isSystemKey = true; 123 webkit_event.isSystemKey = true;
106 124
107 // TODO(dtapuska): crbug.com/570388. Ozone appears to deliver 125 // TODO(dtapuska): crbug.com/570388. Ozone appears to deliver
108 // key_code events that aren't "located" for the keypad like 126 // key_code events that aren't "located" for the keypad like
109 // Windows and X11 do and blink expects. 127 // Windows and X11 do and blink expects.
110 webkit_event.windowsKeyCode = 128 webkit_event.windowsKeyCode =
111 ui::NonLocatedToLocatedKeypadKeyboardCode(event.key_code(), event.code()); 129 NonLocatedToLocatedKeypadKeyboardCode(event.key_code(), event.code());
112 webkit_event.nativeKeyCode = 130 webkit_event.nativeKeyCode =
113 ui::KeycodeConverter::DomCodeToNativeKeycode(event.code()); 131 KeycodeConverter::DomCodeToNativeKeycode(event.code());
114 webkit_event.domCode = static_cast<int>(event.code()); 132 webkit_event.domCode = static_cast<int>(event.code());
115 webkit_event.domKey = static_cast<int>(event.GetDomKey()); 133 webkit_event.domKey = static_cast<int>(event.GetDomKey());
116 webkit_event.unmodifiedText[0] = event.GetUnmodifiedText(); 134 webkit_event.unmodifiedText[0] = event.GetUnmodifiedText();
117 webkit_event.text[0] = event.GetText(); 135 webkit_event.text[0] = event.GetText();
118 136
119 return webkit_event; 137 return webkit_event;
120 } 138 }
121 139
122 blink::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( 140 blink::WebMouseWheelEvent MakeWebMouseWheelEventFromUiEvent(
123 const ui::ScrollEvent& event) { 141 const ScrollEvent& event) {
124 blink::WebMouseWheelEvent webkit_event; 142 blink::WebMouseWheelEvent webkit_event;
125 143
126 webkit_event.type = blink::WebInputEvent::MouseWheel; 144 webkit_event.type = blink::WebInputEvent::MouseWheel;
127 webkit_event.button = blink::WebMouseEvent::ButtonNone; 145 webkit_event.button = blink::WebMouseEvent::ButtonNone;
128 webkit_event.modifiers = ui::EventFlagsToWebEventModifiers(event.flags()); 146 webkit_event.modifiers = EventFlagsToWebEventModifiers(event.flags());
129 webkit_event.timeStampSeconds = 147 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp());
130 ui::EventTimeStampToSeconds(event.time_stamp());
131 webkit_event.hasPreciseScrollingDeltas = true; 148 webkit_event.hasPreciseScrollingDeltas = true;
132 149
133 float offset_ordinal_x = 0.f; 150 float offset_ordinal_x = 0.f;
134 float offset_ordinal_y = 0.f; 151 float offset_ordinal_y = 0.f;
135 if ((event.flags() & ui::EF_SHIFT_DOWN) != 0 && event.x_offset() == 0) { 152 if ((event.flags() & EF_SHIFT_DOWN) != 0 && event.x_offset() == 0) {
136 webkit_event.deltaX = event.y_offset(); 153 webkit_event.deltaX = event.y_offset();
137 webkit_event.deltaY = 0; 154 webkit_event.deltaY = 0;
138 offset_ordinal_x = event.y_offset_ordinal(); 155 offset_ordinal_x = event.y_offset_ordinal();
139 offset_ordinal_y = event.x_offset_ordinal(); 156 offset_ordinal_y = event.x_offset_ordinal();
140 } else { 157 } else {
141 webkit_event.deltaX = event.x_offset(); 158 webkit_event.deltaX = event.x_offset();
142 webkit_event.deltaY = event.y_offset(); 159 webkit_event.deltaY = event.y_offset();
143 offset_ordinal_x = event.x_offset_ordinal(); 160 offset_ordinal_x = event.x_offset_ordinal();
144 offset_ordinal_y = event.y_offset_ordinal(); 161 offset_ordinal_y = event.y_offset_ordinal();
145 } 162 }
146 163
147 if (offset_ordinal_x != 0.f && webkit_event.deltaX != 0.f) 164 if (offset_ordinal_x != 0.f && webkit_event.deltaX != 0.f)
148 webkit_event.accelerationRatioX = offset_ordinal_x / webkit_event.deltaX; 165 webkit_event.accelerationRatioX = offset_ordinal_x / webkit_event.deltaX;
149 webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick; 166 webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick;
150 webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; 167 webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick;
151 if (offset_ordinal_y != 0.f && webkit_event.deltaY != 0.f) 168 if (offset_ordinal_y != 0.f && webkit_event.deltaY != 0.f)
152 webkit_event.accelerationRatioY = offset_ordinal_y / webkit_event.deltaY; 169 webkit_event.accelerationRatioY = offset_ordinal_y / webkit_event.deltaY;
153 170
154 webkit_event.pointerType = 171 webkit_event.pointerType =
155 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type); 172 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type);
156 return webkit_event; 173 return webkit_event;
157 } 174 }
158 175
159 blink::WebGestureEvent MakeWebGestureEventFromAuraEvent( 176 blink::WebGestureEvent MakeWebGestureEventFromUiEvent(
160 const ui::ScrollEvent& event) { 177 const ScrollEvent& event) {
161 blink::WebGestureEvent webkit_event; 178 blink::WebGestureEvent webkit_event;
162 179
163 switch (event.type()) { 180 switch (event.type()) {
164 case ui::ET_SCROLL_FLING_START: 181 case ET_SCROLL_FLING_START:
165 webkit_event.type = blink::WebInputEvent::GestureFlingStart; 182 webkit_event.type = blink::WebInputEvent::GestureFlingStart;
166 webkit_event.data.flingStart.velocityX = event.x_offset(); 183 webkit_event.data.flingStart.velocityX = event.x_offset();
167 webkit_event.data.flingStart.velocityY = event.y_offset(); 184 webkit_event.data.flingStart.velocityY = event.y_offset();
168 break; 185 break;
169 case ui::ET_SCROLL_FLING_CANCEL: 186 case ET_SCROLL_FLING_CANCEL:
170 webkit_event.type = blink::WebInputEvent::GestureFlingCancel; 187 webkit_event.type = blink::WebInputEvent::GestureFlingCancel;
171 break; 188 break;
172 case ui::ET_SCROLL: 189 case ET_SCROLL:
173 NOTREACHED() << "Invalid gesture type: " << event.type(); 190 NOTREACHED() << "Invalid gesture type: " << event.type();
174 break; 191 break;
175 default: 192 default:
176 NOTREACHED() << "Unknown gesture type: " << event.type(); 193 NOTREACHED() << "Unknown gesture type: " << event.type();
177 } 194 }
178 195
179 webkit_event.sourceDevice = blink::WebGestureDeviceTouchpad; 196 webkit_event.sourceDevice = blink::WebGestureDeviceTouchpad;
180 webkit_event.modifiers = ui::EventFlagsToWebEventModifiers(event.flags()); 197 webkit_event.modifiers = EventFlagsToWebEventModifiers(event.flags());
181 webkit_event.timeStampSeconds = 198 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp());
182 ui::EventTimeStampToSeconds(event.time_stamp());
183 return webkit_event; 199 return webkit_event;
184 } 200 }
185 201
186 blink::WebMouseEvent MakeWebMouseEventFromAuraEvent( 202 blink::WebMouseEvent MakeWebMouseEventFromUiEvent(const MouseEvent& event);
187 const ui::MouseEvent& event); 203 blink::WebMouseWheelEvent MakeWebMouseWheelEventFromUiEvent(
188 blink::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( 204 const MouseWheelEvent& event);
189 const ui::MouseWheelEvent& event);
190 205
191 // General approach: 206 // General approach:
192 // 207 //
193 // ui::Event only carries a subset of possible event data provided to Aura by 208 // Event only carries a subset of possible event data provided to UI by the host
194 // the host platform. WebKit utilizes a larger subset of that information than 209 // platform. WebKit utilizes a larger subset of that information, and includes
195 // Aura itself. WebKit includes some built in cracking functionality that we 210 // some built in cracking functionality that we rely on to obtain this
196 // rely on to obtain this information cleanly and consistently. 211 // information cleanly and consistently.
197 // 212 //
198 // The only place where an ui::Event's data differs from what the underlying 213 // The only place where an Event's data differs from what the underlying
199 // base::NativeEvent would provide is position data, since we would like to 214 // base::NativeEvent would provide is position data. We would like to provide
200 // provide coordinates relative to the aura::Window that is hosting the 215 // coordinates relative to its hosting window, rather than the top level
201 // renderer, not the top level platform window. 216 // platform window. To do this a callback is accepted to allow for clients to
217 // map the coordinates.
202 // 218 //
203 // The approach is to fully construct a blink::WebInputEvent from the 219 // The approach is to fully construct a blink::WebInputEvent from the
204 // ui::Event's base::NativeEvent, and then replace the coordinate fields with 220 // Event's base::NativeEvent, and then replace the coordinate fields with
205 // the translated values from the ui::Event. 221 // the translated values from the Event.
206 // 222 //
207 // The exception is mouse events on linux. The ui::MouseEvent contains enough 223 // The exception is mouse events on linux. The MouseEvent contains enough
208 // necessary information to construct a WebMouseEvent. So instead of extracting 224 // necessary information to construct a WebMouseEvent. So instead of extracting
209 // the information from the XEvent, which can be tricky when supporting both 225 // the information from the XEvent, which can be tricky when supporting both
210 // XInput2 and XInput, the WebMouseEvent is constructed from the 226 // XInput2 and XInput, the WebMouseEvent is constructed from the
211 // ui::MouseEvent. This will not be necessary once only XInput2 is supported. 227 // MouseEvent. This will not be necessary once only XInput2 is supported.
212 // 228 //
213 229
214 blink::WebMouseEvent MakeWebMouseEvent(const ui::MouseEvent& event) { 230 blink::WebMouseEvent MakeWebMouseEvent(
231 const MouseEvent& event,
232 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>&
233 screen_location_callback) {
215 // Construct an untranslated event from the platform event data. 234 // Construct an untranslated event from the platform event data.
216 blink::WebMouseEvent webkit_event = 235 blink::WebMouseEvent webkit_event =
217 #if defined(OS_WIN) 236 #if defined(OS_WIN)
218 // On Windows we have WM_ events comming from desktop and pure aura 237 // On Windows we have WM_ events comming from desktop and pure ui::Events
219 // events comming from metro mode. 238 // comming from metro mode.
220 event.native_event().message && (event.type() != ui::ET_MOUSE_EXITED) 239 event.native_event().message && (event.type() != ET_MOUSE_EXITED)
221 ? MakeUntranslatedWebMouseEventFromNativeEvent( 240 ? MakeUntranslatedWebMouseEventFromNativeEvent(
222 event.native_event(), event.time_stamp(), 241 event.native_event(), event.time_stamp(),
223 EventPointerTypeToWebPointerType( 242 EventPointerTypeToWebPointerType(
224 event.pointer_details().pointer_type)) 243 event.pointer_details().pointer_type))
225 : MakeWebMouseEventFromAuraEvent(event); 244 : MakeWebMouseEventFromUiEvent(event);
226 #else 245 #else
227 MakeWebMouseEventFromAuraEvent(event); 246 MakeWebMouseEventFromUiEvent(event);
228 #endif 247 #endif
229 // Replace the event's coordinate fields with translated position data from 248 // Replace the event's coordinate fields with translated position data from
230 // |event|. 249 // |event|.
231 webkit_event.windowX = webkit_event.x = event.x(); 250 webkit_event.windowX = webkit_event.x = event.x();
232 webkit_event.windowY = webkit_event.y = event.y(); 251 webkit_event.windowY = webkit_event.y = event.y();
233 252
234 #if defined(OS_WIN) 253 #if defined(OS_WIN)
235 if (event.native_event().message) 254 if (event.native_event().message)
236 return webkit_event; 255 return webkit_event;
237 #endif 256 #endif
238 const gfx::Point screen_point = GetScreenLocationFromEvent(event); 257
258 const gfx::Point screen_point =
259 GetScreenLocationFromEvent(event, screen_location_callback);
239 webkit_event.globalX = screen_point.x(); 260 webkit_event.globalX = screen_point.x();
240 webkit_event.globalY = screen_point.y(); 261 webkit_event.globalY = screen_point.y();
241 262
242 return webkit_event; 263 return webkit_event;
243 } 264 }
244 265
245 blink::WebMouseWheelEvent MakeWebMouseWheelEvent( 266 blink::WebMouseWheelEvent MakeWebMouseWheelEvent(
246 const ui::MouseWheelEvent& event) { 267 const MouseWheelEvent& event,
268 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>&
269 screen_location_callback) {
247 #if defined(OS_WIN) 270 #if defined(OS_WIN)
248 // Construct an untranslated event from the platform event data. 271 // Construct an untranslated event from the platform event data.
249 blink::WebMouseWheelEvent webkit_event = 272 blink::WebMouseWheelEvent webkit_event =
250 event.native_event().message 273 event.native_event().message
251 ? MakeUntranslatedWebMouseWheelEventFromNativeEvent( 274 ? MakeUntranslatedWebMouseWheelEventFromNativeEvent(
252 event.native_event(), event.time_stamp(), 275 event.native_event(), event.time_stamp(),
253 EventPointerTypeToWebPointerType( 276 EventPointerTypeToWebPointerType(
254 event.pointer_details().pointer_type)) 277 event.pointer_details().pointer_type))
255 : MakeWebMouseWheelEventFromAuraEvent(event); 278 : MakeWebMouseWheelEventFromUiEvent(event);
256 #else 279 #else
257 blink::WebMouseWheelEvent webkit_event = 280 blink::WebMouseWheelEvent webkit_event =
258 MakeWebMouseWheelEventFromAuraEvent(event); 281 MakeWebMouseWheelEventFromUiEvent(event);
259 #endif 282 #endif
260 283
261 // Replace the event's coordinate fields with translated position data from 284 // Replace the event's coordinate fields with translated position data from
262 // |event|. 285 // |event|.
263 webkit_event.windowX = webkit_event.x = event.x(); 286 webkit_event.windowX = webkit_event.x = event.x();
264 webkit_event.windowY = webkit_event.y = event.y(); 287 webkit_event.windowY = webkit_event.y = event.y();
265 288
266 const gfx::Point screen_point = GetScreenLocationFromEvent(event); 289 const gfx::Point screen_point =
290 GetScreenLocationFromEvent(event, screen_location_callback);
267 webkit_event.globalX = screen_point.x(); 291 webkit_event.globalX = screen_point.x();
268 webkit_event.globalY = screen_point.y(); 292 webkit_event.globalY = screen_point.y();
269 293
270 return webkit_event; 294 return webkit_event;
271 } 295 }
272 296
273 blink::WebMouseWheelEvent MakeWebMouseWheelEvent(const ui::ScrollEvent& event) { 297 blink::WebMouseWheelEvent MakeWebMouseWheelEvent(
298 const ScrollEvent& event,
299 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>&
300 screen_location_callback) {
274 #if defined(OS_WIN) 301 #if defined(OS_WIN)
275 // Construct an untranslated event from the platform event data. 302 // Construct an untranslated event from the platform event data.
276 blink::WebMouseWheelEvent webkit_event = 303 blink::WebMouseWheelEvent webkit_event =
277 event.native_event().message 304 event.native_event().message
278 ? MakeUntranslatedWebMouseWheelEventFromNativeEvent( 305 ? MakeUntranslatedWebMouseWheelEventFromNativeEvent(
279 event.native_event(), event.time_stamp(), 306 event.native_event(), event.time_stamp(),
280 EventPointerTypeToWebPointerType( 307 EventPointerTypeToWebPointerType(
281 event.pointer_details().pointer_type)) 308 event.pointer_details().pointer_type))
282 : MakeWebMouseWheelEventFromAuraEvent(event); 309 : MakeWebMouseWheelEventFromUiEvent(event);
283 #else 310 #else
284 blink::WebMouseWheelEvent webkit_event = 311 blink::WebMouseWheelEvent webkit_event =
285 MakeWebMouseWheelEventFromAuraEvent(event); 312 MakeWebMouseWheelEventFromUiEvent(event);
286 #endif 313 #endif
287 314
288 // Replace the event's coordinate fields with translated position data from 315 // Replace the event's coordinate fields with translated position data from
289 // |event|. 316 // |event|.
290 webkit_event.windowX = webkit_event.x = event.x(); 317 webkit_event.windowX = webkit_event.x = event.x();
291 webkit_event.windowY = webkit_event.y = event.y(); 318 webkit_event.windowY = webkit_event.y = event.y();
292 319
293 const gfx::Point screen_point = GetScreenLocationFromEvent(event); 320 const gfx::Point screen_point =
321 GetScreenLocationFromEvent(event, screen_location_callback);
294 webkit_event.globalX = screen_point.x(); 322 webkit_event.globalX = screen_point.x();
295 webkit_event.globalY = screen_point.y(); 323 webkit_event.globalY = screen_point.y();
296 324
297 return webkit_event; 325 return webkit_event;
298 } 326 }
299 327
300 blink::WebKeyboardEvent MakeWebKeyboardEvent(const ui::KeyEvent& event) { 328 blink::WebKeyboardEvent MakeWebKeyboardEvent(const KeyEvent& event) {
301 // Windows can figure out whether or not to construct a RawKeyDown or a Char 329 // Windows can figure out whether or not to construct a RawKeyDown or a Char
302 // WebInputEvent based on the type of message carried in 330 // WebInputEvent based on the type of message carried in
303 // event.native_event(). X11 is not so fortunate, there is no separate 331 // event.native_event(). X11 is not so fortunate, there is no separate
304 // translated event type, so DesktopHostLinux sends an extra KeyEvent with 332 // translated event type, so DesktopHostLinux sends an extra KeyEvent with
305 // is_char() == true. We need to pass the ui::KeyEvent to the X11 function 333 // is_char() == true. We need to pass the KeyEvent to the X11 function
306 // to detect this case so the right event type can be constructed. 334 // to detect this case so the right event type can be constructed.
307 #if defined(OS_WIN) 335 #if defined(OS_WIN)
308 if (event.HasNativeEvent()) { 336 if (event.HasNativeEvent()) {
309 // Key events require no translation by the aura system. 337 // Key events require no translation.
310 blink::WebKeyboardEvent webkit_event(MakeWebKeyboardEventFromNativeEvent( 338 blink::WebKeyboardEvent webkit_event(MakeWebKeyboardEventFromNativeEvent(
311 event.native_event(), event.time_stamp())); 339 event.native_event(), event.time_stamp()));
312 webkit_event.modifiers |= DomCodeToWebInputEventModifiers(event.code()); 340 webkit_event.modifiers |= DomCodeToWebInputEventModifiers(event.code());
313 webkit_event.domCode = static_cast<int>(event.code()); 341 webkit_event.domCode = static_cast<int>(event.code());
314 webkit_event.domKey = static_cast<int>(event.GetDomKey()); 342 webkit_event.domKey = static_cast<int>(event.GetDomKey());
315 return webkit_event; 343 return webkit_event;
316 } 344 }
317 #endif 345 #endif
318 return MakeWebKeyboardEventFromAuraEvent(event); 346 return MakeWebKeyboardEventFromUiEvent(event);
319 } 347 }
320 348
321 blink::WebGestureEvent MakeWebGestureEvent(const ui::GestureEvent& event) { 349 blink::WebGestureEvent MakeWebGestureEvent(
350 const GestureEvent& event,
351 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>&
352 screen_location_callback) {
322 blink::WebGestureEvent gesture_event; 353 blink::WebGestureEvent gesture_event;
323 #if defined(OS_WIN) 354 #if defined(OS_WIN)
324 if (event.HasNativeEvent()) 355 if (event.HasNativeEvent())
325 gesture_event = MakeWebGestureEventFromNativeEvent(event.native_event(), 356 gesture_event = MakeWebGestureEventFromNativeEvent(event.native_event(),
326 event.time_stamp()); 357 event.time_stamp());
327 else 358 else
328 gesture_event = MakeWebGestureEventFromUIEvent(event); 359 gesture_event = MakeWebGestureEventFromUIEvent(event);
329 #else 360 #else
330 gesture_event = MakeWebGestureEventFromUIEvent(event); 361 gesture_event = MakeWebGestureEventFromUIEvent(event);
331 #endif 362 #endif
332 363
333 gesture_event.x = event.x(); 364 gesture_event.x = event.x();
334 gesture_event.y = event.y(); 365 gesture_event.y = event.y();
335 366
336 const gfx::Point screen_point = GetScreenLocationFromEvent(event); 367 const gfx::Point screen_point =
368 GetScreenLocationFromEvent(event, screen_location_callback);
337 gesture_event.globalX = screen_point.x(); 369 gesture_event.globalX = screen_point.x();
338 gesture_event.globalY = screen_point.y(); 370 gesture_event.globalY = screen_point.y();
339 371
340 return gesture_event; 372 return gesture_event;
341 } 373 }
342 374
343 blink::WebGestureEvent MakeWebGestureEvent(const ui::ScrollEvent& event) { 375 blink::WebGestureEvent MakeWebGestureEvent(
376 const ScrollEvent& event,
377 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>&
378 screen_location_callback) {
344 blink::WebGestureEvent gesture_event; 379 blink::WebGestureEvent gesture_event;
345 380
346 #if defined(OS_WIN) 381 #if defined(OS_WIN)
347 gesture_event = MakeWebGestureEventFromNativeEvent(event.native_event(), 382 gesture_event = MakeWebGestureEventFromNativeEvent(event.native_event(),
348 event.time_stamp()); 383 event.time_stamp());
349 #else 384 #else
350 gesture_event = MakeWebGestureEventFromAuraEvent(event); 385 gesture_event = MakeWebGestureEventFromUiEvent(event);
351 #endif 386 #endif
352 387
353 gesture_event.x = event.x(); 388 gesture_event.x = event.x();
354 gesture_event.y = event.y(); 389 gesture_event.y = event.y();
355 390
356 const gfx::Point screen_point = GetScreenLocationFromEvent(event); 391 const gfx::Point screen_point =
392 GetScreenLocationFromEvent(event, screen_location_callback);
357 gesture_event.globalX = screen_point.x(); 393 gesture_event.globalX = screen_point.x();
358 gesture_event.globalY = screen_point.y(); 394 gesture_event.globalY = screen_point.y();
359 395
360 return gesture_event; 396 return gesture_event;
361 } 397 }
362 398
363 blink::WebGestureEvent MakeWebGestureEventFlingCancel() { 399 blink::WebGestureEvent MakeWebGestureEventFlingCancel() {
364 blink::WebGestureEvent gesture_event; 400 blink::WebGestureEvent gesture_event;
365 401
366 // All other fields are ignored on a GestureFlingCancel event. 402 // All other fields are ignored on a GestureFlingCancel event.
367 gesture_event.type = blink::WebInputEvent::GestureFlingCancel; 403 gesture_event.type = blink::WebInputEvent::GestureFlingCancel;
368 gesture_event.timeStampSeconds = 404 gesture_event.timeStampSeconds = EventTimeStampToSeconds(EventTimeForNow());
369 ui::EventTimeStampToSeconds(ui::EventTimeForNow());
370 gesture_event.sourceDevice = blink::WebGestureDeviceTouchpad; 405 gesture_event.sourceDevice = blink::WebGestureDeviceTouchpad;
371 return gesture_event; 406 return gesture_event;
372 } 407 }
373 408
374 blink::WebMouseEvent MakeWebMouseEventFromAuraEvent( 409 blink::WebMouseEvent MakeWebMouseEventFromUiEvent(const MouseEvent& event) {
375 const ui::MouseEvent& event) {
376 blink::WebMouseEvent webkit_event; 410 blink::WebMouseEvent webkit_event;
377 411
378 webkit_event.modifiers = ui::EventFlagsToWebEventModifiers(event.flags()); 412 webkit_event.modifiers = EventFlagsToWebEventModifiers(event.flags());
379 webkit_event.timeStampSeconds = 413 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp());
380 ui::EventTimeStampToSeconds(event.time_stamp());
381 webkit_event.button = blink::WebMouseEvent::ButtonNone; 414 webkit_event.button = blink::WebMouseEvent::ButtonNone;
382 int button_flags = event.flags(); 415 int button_flags = event.flags();
383 if (event.type() == ui::ET_MOUSE_PRESSED || 416 if (event.type() == ET_MOUSE_PRESSED || event.type() == ET_MOUSE_RELEASED) {
384 event.type() == ui::ET_MOUSE_RELEASED) {
385 // We want to use changed_button_flags() for mouse pressed & released. 417 // We want to use changed_button_flags() for mouse pressed & released.
386 // These flags can be used only if they are set which is not always the case 418 // These flags can be used only if they are set which is not always the case
387 // (see e.g. GetChangedMouseButtonFlagsFromNative() in events_win.cc). 419 // (see e.g. GetChangedMouseButtonFlagsFromNative() in events_win.cc).
388 if (event.changed_button_flags()) 420 if (event.changed_button_flags())
389 button_flags = event.changed_button_flags(); 421 button_flags = event.changed_button_flags();
390 } 422 }
391 if (button_flags & ui::EF_LEFT_MOUSE_BUTTON) 423 if (button_flags & EF_LEFT_MOUSE_BUTTON)
392 webkit_event.button = blink::WebMouseEvent::ButtonLeft; 424 webkit_event.button = blink::WebMouseEvent::ButtonLeft;
393 if (button_flags & ui::EF_MIDDLE_MOUSE_BUTTON) 425 if (button_flags & EF_MIDDLE_MOUSE_BUTTON)
394 webkit_event.button = blink::WebMouseEvent::ButtonMiddle; 426 webkit_event.button = blink::WebMouseEvent::ButtonMiddle;
395 if (button_flags & ui::EF_RIGHT_MOUSE_BUTTON) 427 if (button_flags & EF_RIGHT_MOUSE_BUTTON)
396 webkit_event.button = blink::WebMouseEvent::ButtonRight; 428 webkit_event.button = blink::WebMouseEvent::ButtonRight;
397 429
398 switch (event.type()) { 430 switch (event.type()) {
399 case ui::ET_MOUSE_PRESSED: 431 case ET_MOUSE_PRESSED:
400 webkit_event.type = blink::WebInputEvent::MouseDown; 432 webkit_event.type = blink::WebInputEvent::MouseDown;
401 webkit_event.clickCount = event.GetClickCount(); 433 webkit_event.clickCount = event.GetClickCount();
402 break; 434 break;
403 case ui::ET_MOUSE_RELEASED: 435 case ET_MOUSE_RELEASED:
404 webkit_event.type = blink::WebInputEvent::MouseUp; 436 webkit_event.type = blink::WebInputEvent::MouseUp;
405 webkit_event.clickCount = event.GetClickCount(); 437 webkit_event.clickCount = event.GetClickCount();
406 break; 438 break;
407 case ui::ET_MOUSE_ENTERED: 439 case ET_MOUSE_ENTERED:
408 case ui::ET_MOUSE_EXITED: 440 case ET_MOUSE_EXITED:
409 case ui::ET_MOUSE_MOVED: 441 case ET_MOUSE_MOVED:
410 case ui::ET_MOUSE_DRAGGED: 442 case ET_MOUSE_DRAGGED:
411 webkit_event.type = blink::WebInputEvent::MouseMove; 443 webkit_event.type = blink::WebInputEvent::MouseMove;
412 break; 444 break;
413 default: 445 default:
414 NOTIMPLEMENTED() << "Received unexpected event: " << event.type(); 446 NOTIMPLEMENTED() << "Received unexpected event: " << event.type();
415 break; 447 break;
416 } 448 }
417 449
418 webkit_event.tiltX = roundf(event.pointer_details().tilt_x); 450 webkit_event.tiltX = roundf(event.pointer_details().tilt_x);
419 webkit_event.tiltY = roundf(event.pointer_details().tilt_y); 451 webkit_event.tiltY = roundf(event.pointer_details().tilt_y);
420 webkit_event.force = event.pointer_details().force; 452 webkit_event.force = event.pointer_details().force;
421 webkit_event.pointerType = 453 webkit_event.pointerType =
422 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type); 454 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type);
423 455
424 return webkit_event; 456 return webkit_event;
425 } 457 }
426 458
427 blink::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( 459 blink::WebMouseWheelEvent MakeWebMouseWheelEventFromUiEvent(
428 const ui::MouseWheelEvent& event) { 460 const MouseWheelEvent& event) {
429 blink::WebMouseWheelEvent webkit_event; 461 blink::WebMouseWheelEvent webkit_event;
430 462
431 webkit_event.type = blink::WebInputEvent::MouseWheel; 463 webkit_event.type = blink::WebInputEvent::MouseWheel;
432 webkit_event.button = blink::WebMouseEvent::ButtonNone; 464 webkit_event.button = blink::WebMouseEvent::ButtonNone;
433 webkit_event.modifiers = ui::EventFlagsToWebEventModifiers(event.flags()); 465 webkit_event.modifiers = EventFlagsToWebEventModifiers(event.flags());
434 webkit_event.timeStampSeconds = 466 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp());
435 ui::EventTimeStampToSeconds(event.time_stamp());
436 467
437 if ((event.flags() & ui::EF_SHIFT_DOWN) != 0 && event.x_offset() == 0) { 468 if ((event.flags() & EF_SHIFT_DOWN) != 0 && event.x_offset() == 0) {
438 webkit_event.deltaX = event.y_offset(); 469 webkit_event.deltaX = event.y_offset();
439 webkit_event.deltaY = 0; 470 webkit_event.deltaY = 0;
440 } else { 471 } else {
441 webkit_event.deltaX = event.x_offset(); 472 webkit_event.deltaX = event.x_offset();
442 webkit_event.deltaY = event.y_offset(); 473 webkit_event.deltaY = event.y_offset();
443 } 474 }
444 475
445 webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick; 476 webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick;
446 webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; 477 webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick;
447 478
448 webkit_event.tiltX = roundf(event.pointer_details().tilt_x); 479 webkit_event.tiltX = roundf(event.pointer_details().tilt_x);
449 webkit_event.tiltY = roundf(event.pointer_details().tilt_y); 480 webkit_event.tiltY = roundf(event.pointer_details().tilt_y);
450 webkit_event.force = event.pointer_details().force; 481 webkit_event.force = event.pointer_details().force;
451 webkit_event.pointerType = 482 webkit_event.pointerType =
452 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type); 483 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type);
453 484
454 return webkit_event; 485 return webkit_event;
455 } 486 }
456 487
457 } // namespace content 488 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698