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

Side by Side Diff: content/browser/renderer_host/input/web_input_event_builders_mac.mm

Issue 2573073003: Collapse the API surface on WebInputEvent via accessor functions. (Closed)
Patch Set: Fix nits Created 3 years, 11 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 /* 5 /*
6 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved. 6 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved.
7 * Copyright (C) 2006-2009 Google Inc. 7 * Copyright (C) 2006-2009 Google Inc.
8 * 8 *
9 * Redistribution and use in source and binary forms, with or without 9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions 10 * modification, are permitted provided that the following conditions
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 139
140 bool IsSystemKeyEvent(const blink::WebKeyboardEvent& event) { 140 bool IsSystemKeyEvent(const blink::WebKeyboardEvent& event) {
141 // Windows and Linux set |isSystemKey| if alt is down. Blink looks at this 141 // Windows and Linux set |isSystemKey| if alt is down. Blink looks at this
142 // flag to decide if it should handle a key or not. E.g. alt-left/right 142 // flag to decide if it should handle a key or not. E.g. alt-left/right
143 // shouldn't be used by Blink to scroll the current page, because we want 143 // shouldn't be used by Blink to scroll the current page, because we want
144 // to get that key back for it to do history navigation. Hence, the 144 // to get that key back for it to do history navigation. Hence, the
145 // corresponding situation on OS X is to set this for cmd key presses. 145 // corresponding situation on OS X is to set this for cmd key presses.
146 146
147 // cmd-b and and cmd-i are system wide key bindings that OS X doesn't 147 // cmd-b and and cmd-i are system wide key bindings that OS X doesn't
148 // handle for us, so the editor handles them. 148 // handle for us, so the editor handles them.
149 int modifiers = event.modifiers & blink::WebInputEvent::InputModifiers; 149 int modifiers = event.modifiers() & blink::WebInputEvent::InputModifiers;
150 if (modifiers == blink::WebInputEvent::MetaKey && 150 if (modifiers == blink::WebInputEvent::MetaKey &&
151 event.windowsKeyCode == ui::VKEY_B) 151 event.windowsKeyCode == ui::VKEY_B)
152 return false; 152 return false;
153 if (modifiers == blink::WebInputEvent::MetaKey && 153 if (modifiers == blink::WebInputEvent::MetaKey &&
154 event.windowsKeyCode == ui::VKEY_I) 154 event.windowsKeyCode == ui::VKEY_I)
155 return false; 155 return false;
156 156
157 return event.modifiers & blink::WebInputEvent::MetaKey; 157 return event.modifiers() & blink::WebInputEvent::MetaKey;
158 } 158 }
159 159
160 blink::WebMouseWheelEvent::Phase PhaseForNSEventPhase( 160 blink::WebMouseWheelEvent::Phase PhaseForNSEventPhase(
161 NSEventPhase event_phase) { 161 NSEventPhase event_phase) {
162 uint32_t phase = blink::WebMouseWheelEvent::PhaseNone; 162 uint32_t phase = blink::WebMouseWheelEvent::PhaseNone;
163 if (event_phase & NSEventPhaseBegan) 163 if (event_phase & NSEventPhaseBegan)
164 phase |= blink::WebMouseWheelEvent::PhaseBegan; 164 phase |= blink::WebMouseWheelEvent::PhaseBegan;
165 if (event_phase & NSEventPhaseStationary) 165 if (event_phase & NSEventPhaseStationary)
166 phase |= blink::WebMouseWheelEvent::PhaseStationary; 166 phase |= blink::WebMouseWheelEvent::PhaseStationary;
167 if (event_phase & NSEventPhaseChanged) 167 if (event_phase & NSEventPhaseChanged)
(...skipping 26 matching lines...) Expand all
194 ui::DomKey DomKeyFromEvent(NSEvent* event) { 194 ui::DomKey DomKeyFromEvent(NSEvent* event) {
195 ui::DomKey key = ui::DomKeyFromNSEvent(event); 195 ui::DomKey key = ui::DomKeyFromNSEvent(event);
196 if (key != ui::DomKey::NONE) 196 if (key != ui::DomKey::NONE)
197 return key; 197 return key;
198 return ui::DomKey::UNIDENTIFIED; 198 return ui::DomKey::UNIDENTIFIED;
199 } 199 }
200 200
201 } // namespace 201 } // namespace
202 202
203 blink::WebKeyboardEvent WebKeyboardEventBuilder::Build(NSEvent* event) { 203 blink::WebKeyboardEvent WebKeyboardEventBuilder::Build(NSEvent* event) {
204 blink::WebKeyboardEvent result; 204 ui::DomCode dom_code = ui::DomCodeFromNSEvent(event);
205 205 int modifiers =
206 result.type = ui::IsKeyUpEvent(event) ? blink::WebInputEvent::KeyUp 206 ModifiersFromEvent(event) | ui::DomCodeToWebInputEventModifiers(dom_code);
207 : blink::WebInputEvent::RawKeyDown;
208
209 result.modifiers = ModifiersFromEvent(event);
210 207
211 if (([event type] != NSFlagsChanged) && [event isARepeat]) 208 if (([event type] != NSFlagsChanged) && [event isARepeat])
212 result.modifiers |= blink::WebInputEvent::IsAutoRepeat; 209 modifiers |= blink::WebInputEvent::IsAutoRepeat;
213 210
214 ui::DomCode dom_code = ui::DomCodeFromNSEvent(event); 211 blink::WebKeyboardEvent result(ui::IsKeyUpEvent(event)
212 ? blink::WebInputEvent::KeyUp
213 : blink::WebInputEvent::RawKeyDown,
214 modifiers, [event timestamp]);
215 result.windowsKeyCode = 215 result.windowsKeyCode =
216 ui::LocatedToNonLocatedKeyboardCode(ui::KeyboardCodeFromNSEvent(event)); 216 ui::LocatedToNonLocatedKeyboardCode(ui::KeyboardCodeFromNSEvent(event));
217 result.modifiers |= ui::DomCodeToWebInputEventModifiers(dom_code);
218 result.nativeKeyCode = [event keyCode]; 217 result.nativeKeyCode = [event keyCode];
219 result.domCode = static_cast<int>(dom_code); 218 result.domCode = static_cast<int>(dom_code);
220 result.domKey = DomKeyFromEvent(event); 219 result.domKey = DomKeyFromEvent(event);
221 NSString* text_str = TextFromEvent(event); 220 NSString* text_str = TextFromEvent(event);
222 NSString* unmodified_str = UnmodifiedTextFromEvent(event); 221 NSString* unmodified_str = UnmodifiedTextFromEvent(event);
223 222
224 // Begin Apple code, copied from KeyEventMac.mm 223 // Begin Apple code, copied from KeyEventMac.mm
225 224
226 // Always use 13 for Enter/Return -- we don't want to use AppKit's 225 // Always use 13 for Enter/Return -- we don't want to use AppKit's
227 // different character for Enter. 226 // different character for Enter.
(...skipping 11 matching lines...) Expand all
239 238
240 // End Apple code. 239 // End Apple code.
241 240
242 if ([text_str length] < blink::WebKeyboardEvent::textLengthCap && 241 if ([text_str length] < blink::WebKeyboardEvent::textLengthCap &&
243 [unmodified_str length] < blink::WebKeyboardEvent::textLengthCap) { 242 [unmodified_str length] < blink::WebKeyboardEvent::textLengthCap) {
244 [text_str getCharacters:&result.text[0]]; 243 [text_str getCharacters:&result.text[0]];
245 [unmodified_str getCharacters:&result.unmodifiedText[0]]; 244 [unmodified_str getCharacters:&result.unmodifiedText[0]];
246 } else 245 } else
247 NOTIMPLEMENTED(); 246 NOTIMPLEMENTED();
248 247
249 result.timeStampSeconds = [event timestamp];
250 result.isSystemKey = IsSystemKeyEvent(result); 248 result.isSystemKey = IsSystemKeyEvent(result);
251 249
252 return result; 250 return result;
253 } 251 }
254 252
255 // WebMouseEvent -------------------------------------------------------------- 253 // WebMouseEvent --------------------------------------------------------------
256 254
257 blink::WebMouseEvent WebMouseEventBuilder::Build(NSEvent* event, NSView* view) { 255 blink::WebMouseEvent WebMouseEventBuilder::Build(NSEvent* event, NSView* view) {
258 blink::WebMouseEvent result; 256 blink::WebInputEvent::Type event_type = blink::WebInputEvent::Type::Undefined;
259 257 int click_count = 0;
260 result.clickCount = 0; 258 blink::WebMouseEvent::Button button = blink::WebMouseEvent::Button::NoButton;
261 259
262 NSEventType type = [event type]; 260 NSEventType type = [event type];
263 switch (type) { 261 switch (type) {
264 case NSMouseExited: 262 case NSMouseExited:
265 result.type = blink::WebInputEvent::MouseLeave; 263 event_type = blink::WebInputEvent::MouseLeave;
266 result.button = blink::WebMouseEvent::Button::NoButton;
267 break; 264 break;
268 case NSLeftMouseDown: 265 case NSLeftMouseDown:
269 result.type = blink::WebInputEvent::MouseDown; 266 event_type = blink::WebInputEvent::MouseDown;
270 result.clickCount = [event clickCount]; 267 click_count = [event clickCount];
271 result.button = blink::WebMouseEvent::Button::Left; 268 button = blink::WebMouseEvent::Button::Left;
272 break; 269 break;
273 case NSOtherMouseDown: 270 case NSOtherMouseDown:
274 result.type = blink::WebInputEvent::MouseDown; 271 event_type = blink::WebInputEvent::MouseDown;
275 result.clickCount = [event clickCount]; 272 click_count = [event clickCount];
276 result.button = blink::WebMouseEvent::Button::Middle; 273 button = blink::WebMouseEvent::Button::Middle;
277 break; 274 break;
278 case NSRightMouseDown: 275 case NSRightMouseDown:
279 result.type = blink::WebInputEvent::MouseDown; 276 event_type = blink::WebInputEvent::MouseDown;
280 result.clickCount = [event clickCount]; 277 click_count = [event clickCount];
281 result.button = blink::WebMouseEvent::Button::Right; 278 button = blink::WebMouseEvent::Button::Right;
282 break; 279 break;
283 case NSLeftMouseUp: 280 case NSLeftMouseUp:
284 result.type = blink::WebInputEvent::MouseUp; 281 event_type = blink::WebInputEvent::MouseUp;
285 result.clickCount = [event clickCount]; 282 click_count = [event clickCount];
286 result.button = blink::WebMouseEvent::Button::Left; 283 button = blink::WebMouseEvent::Button::Left;
287 break; 284 break;
288 case NSOtherMouseUp: 285 case NSOtherMouseUp:
289 result.type = blink::WebInputEvent::MouseUp; 286 event_type = blink::WebInputEvent::MouseUp;
290 result.clickCount = [event clickCount]; 287 click_count = [event clickCount];
291 result.button = blink::WebMouseEvent::Button::Middle; 288 button = blink::WebMouseEvent::Button::Middle;
292 break; 289 break;
293 case NSRightMouseUp: 290 case NSRightMouseUp:
294 result.type = blink::WebInputEvent::MouseUp; 291 event_type = blink::WebInputEvent::MouseUp;
295 result.clickCount = [event clickCount]; 292 click_count = [event clickCount];
296 result.button = blink::WebMouseEvent::Button::Right; 293 button = blink::WebMouseEvent::Button::Right;
297 break; 294 break;
298 case NSMouseMoved: 295 case NSMouseMoved:
299 case NSMouseEntered: 296 case NSMouseEntered:
300 result.type = blink::WebInputEvent::MouseMove; 297 event_type = blink::WebInputEvent::MouseMove;
301 break; 298 break;
302 case NSLeftMouseDragged: 299 case NSLeftMouseDragged:
303 result.type = blink::WebInputEvent::MouseMove; 300 event_type = blink::WebInputEvent::MouseMove;
304 result.button = blink::WebMouseEvent::Button::Left; 301 button = blink::WebMouseEvent::Button::Left;
305 break; 302 break;
306 case NSOtherMouseDragged: 303 case NSOtherMouseDragged:
307 result.type = blink::WebInputEvent::MouseMove; 304 event_type = blink::WebInputEvent::MouseMove;
308 result.button = blink::WebMouseEvent::Button::Middle; 305 button = blink::WebMouseEvent::Button::Middle;
309 break; 306 break;
310 case NSRightMouseDragged: 307 case NSRightMouseDragged:
311 result.type = blink::WebInputEvent::MouseMove; 308 event_type = blink::WebInputEvent::MouseMove;
312 result.button = blink::WebMouseEvent::Button::Right; 309 button = blink::WebMouseEvent::Button::Right;
313 break; 310 break;
314 default: 311 default:
315 NOTIMPLEMENTED(); 312 NOTIMPLEMENTED();
316 } 313 }
317 314
315 blink::WebMouseEvent result(event_type, ModifiersFromEvent(event),
316 [event timestamp]);
317 result.clickCount = click_count;
318 result.button = button;
318 SetWebEventLocationFromEventInView(&result, event, view); 319 SetWebEventLocationFromEventInView(&result, event, view);
319 320
320 result.modifiers = ModifiersFromEvent(event);
321
322 result.timeStampSeconds = [event timestamp];
323
324 // For NSMouseExited and NSMouseEntered, they do not have a subtype. Styluses 321 // For NSMouseExited and NSMouseEntered, they do not have a subtype. Styluses
325 // and mouses share the same cursor, so we will set their pointerType as 322 // and mouses share the same cursor, so we will set their pointerType as
326 // Unknown for now. 323 // Unknown for now.
327 if (type == NSMouseExited || type == NSMouseEntered) { 324 if (type == NSMouseExited || type == NSMouseEntered) {
328 result.pointerType = blink::WebPointerProperties::PointerType::Unknown; 325 result.pointerType = blink::WebPointerProperties::PointerType::Unknown;
329 return result; 326 return result;
330 } 327 }
331 328
332 // For other mouse events and touchpad events, the pointer type is mouse. 329 // For other mouse events and touchpad events, the pointer type is mouse.
333 // For all other tablet events, the pointer type will be just pen. 330 // For all other tablet events, the pointer type will be just pen.
(...skipping 15 matching lines...) Expand all
349 result.tiltY = lround(tilt.y * 90); 346 result.tiltY = lround(tilt.y * 90);
350 } 347 }
351 return result; 348 return result;
352 } 349 }
353 350
354 // WebMouseWheelEvent --------------------------------------------------------- 351 // WebMouseWheelEvent ---------------------------------------------------------
355 352
356 blink::WebMouseWheelEvent WebMouseWheelEventBuilder::Build( 353 blink::WebMouseWheelEvent WebMouseWheelEventBuilder::Build(
357 NSEvent* event, 354 NSEvent* event,
358 NSView* view) { 355 NSView* view) {
359 blink::WebMouseWheelEvent result; 356 blink::WebMouseWheelEvent result(blink::WebInputEvent::MouseWheel,
360 357 ModifiersFromEvent(event),
361 result.type = blink::WebInputEvent::MouseWheel; 358 [event timestamp]);
362 result.button = blink::WebMouseEvent::Button::NoButton; 359 result.button = blink::WebMouseEvent::Button::NoButton;
363 360
364 result.modifiers = ModifiersFromEvent(event);
365
366 SetWebEventLocationFromEventInView(&result, event, view); 361 SetWebEventLocationFromEventInView(&result, event, view);
367 362
368 // Of Mice and Men 363 // Of Mice and Men
369 // --------------- 364 // ---------------
370 // 365 //
371 // There are three types of scroll data available on a scroll wheel CGEvent. 366 // There are three types of scroll data available on a scroll wheel CGEvent.
372 // Apple's documentation ([1]) is rather vague in their differences, and not 367 // Apple's documentation ([1]) is rather vague in their differences, and not
373 // terribly helpful in deciding which to use. This is what's really going on. 368 // terribly helpful in deciding which to use. This is what's really going on.
374 // 369 //
375 // First, these events behave very differently depending on whether a standard 370 // First, these events behave very differently depending on whether a standard
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 result.hasPreciseScrollingDeltas = true; 483 result.hasPreciseScrollingDeltas = true;
489 } else { 484 } else {
490 result.deltaX = [event deltaX] * ui::kScrollbarPixelsPerCocoaTick; 485 result.deltaX = [event deltaX] * ui::kScrollbarPixelsPerCocoaTick;
491 result.deltaY = [event deltaY] * ui::kScrollbarPixelsPerCocoaTick; 486 result.deltaY = [event deltaY] * ui::kScrollbarPixelsPerCocoaTick;
492 result.wheelTicksY = 487 result.wheelTicksY =
493 CGEventGetIntegerValueField(cg_event, kCGScrollWheelEventDeltaAxis1); 488 CGEventGetIntegerValueField(cg_event, kCGScrollWheelEventDeltaAxis1);
494 result.wheelTicksX = 489 result.wheelTicksX =
495 CGEventGetIntegerValueField(cg_event, kCGScrollWheelEventDeltaAxis2); 490 CGEventGetIntegerValueField(cg_event, kCGScrollWheelEventDeltaAxis2);
496 } 491 }
497 492
498 result.timeStampSeconds = [event timestamp];
499
500 result.phase = PhaseForEvent(event); 493 result.phase = PhaseForEvent(event);
501 result.momentumPhase = MomentumPhaseForEvent(event); 494 result.momentumPhase = MomentumPhaseForEvent(event);
502 495
503 return result; 496 return result;
504 } 497 }
505 498
506 blink::WebGestureEvent WebGestureEventBuilder::Build(NSEvent* event, 499 blink::WebGestureEvent WebGestureEventBuilder::Build(NSEvent* event,
507 NSView* view) { 500 NSView* view) {
508 blink::WebGestureEvent result; 501 blink::WebGestureEvent result;
509 502
510 // Use a temporary WebMouseEvent to get the location. 503 // Use a temporary WebMouseEvent to get the location.
511 blink::WebMouseEvent temp; 504 blink::WebMouseEvent temp;
512 505
513 SetWebEventLocationFromEventInView(&temp, event, view); 506 SetWebEventLocationFromEventInView(&temp, event, view);
514 result.x = temp.x; 507 result.x = temp.x;
515 result.y = temp.y; 508 result.y = temp.y;
516 result.globalX = temp.globalX; 509 result.globalX = temp.globalX;
517 result.globalY = temp.globalY; 510 result.globalY = temp.globalY;
518 511
519 result.modifiers = ModifiersFromEvent(event); 512 result.setModifiers(ModifiersFromEvent(event));
520 result.timeStampSeconds = [event timestamp]; 513 result.setTimeStampSeconds([event timestamp]);
521 514
522 result.sourceDevice = blink::WebGestureDeviceTouchpad; 515 result.sourceDevice = blink::WebGestureDeviceTouchpad;
523 switch ([event type]) { 516 switch ([event type]) {
524 case NSEventTypeMagnify: 517 case NSEventTypeMagnify:
525 result.type = blink::WebInputEvent::GesturePinchUpdate; 518 result.setType(blink::WebInputEvent::GesturePinchUpdate);
526 result.data.pinchUpdate.scale = [event magnification] + 1.0; 519 result.data.pinchUpdate.scale = [event magnification] + 1.0;
527 break; 520 break;
528 case NSEventTypeSmartMagnify: 521 case NSEventTypeSmartMagnify:
529 // Map the Cocoa "double-tap with two fingers" zoom gesture to regular 522 // Map the Cocoa "double-tap with two fingers" zoom gesture to regular
530 // GestureDoubleTap, because the effect is similar to single-finger 523 // GestureDoubleTap, because the effect is similar to single-finger
531 // double-tap zoom on mobile platforms. Note that tapCount is set to 1 524 // double-tap zoom on mobile platforms. Note that tapCount is set to 1
532 // because the gesture type already encodes that information. 525 // because the gesture type already encodes that information.
533 result.type = blink::WebInputEvent::GestureDoubleTap; 526 result.setType(blink::WebInputEvent::GestureDoubleTap);
534 result.data.tap.tapCount = 1; 527 result.data.tap.tapCount = 1;
535 break; 528 break;
536 case NSEventTypeBeginGesture: 529 case NSEventTypeBeginGesture:
537 case NSEventTypeEndGesture: 530 case NSEventTypeEndGesture:
538 // The specific type of a gesture is not defined when the gesture begin 531 // The specific type of a gesture is not defined when the gesture begin
539 // and end NSEvents come in. Leave them undefined. The caller will need 532 // and end NSEvents come in. Leave them undefined. The caller will need
540 // to specify them when the gesture is differentiated. 533 // to specify them when the gesture is differentiated.
541 result.type = blink::WebInputEvent::Undefined;
542 break; 534 break;
543 default: 535 default:
544 NOTIMPLEMENTED(); 536 NOTIMPLEMENTED();
545 result.type = blink::WebInputEvent::Undefined;
546 } 537 }
547 538
548 return result; 539 return result;
549 } 540 }
550 541
551 } // namespace content 542 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698