| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |