OLD | NEW |
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/renderer/pepper/event_conversion.h" | 5 #include "content/renderer/pepper/event_conversion.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 #include <string.h> | 9 #include <string.h> |
10 | 10 |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
385 &web_event->touchesLength); | 385 &web_event->touchesLength); |
386 SetWebTouchPointsIfNotYetSet(event.touches, | 386 SetWebTouchPointsIfNotYetSet(event.touches, |
387 WebTouchPoint::StateStationary, | 387 WebTouchPoint::StateStationary, |
388 web_event->touches, | 388 web_event->touches, |
389 &web_event->touchesLength); | 389 &web_event->touchesLength); |
390 | 390 |
391 return web_event; | 391 return web_event; |
392 } | 392 } |
393 | 393 |
394 WebKeyboardEvent* BuildKeyEvent(const InputEventData& event) { | 394 WebKeyboardEvent* BuildKeyEvent(const InputEventData& event) { |
395 WebKeyboardEvent* key_event = new WebKeyboardEvent(); | 395 WebInputEvent::Type type = WebInputEvent::Type::Undefined; |
396 switch (event.event_type) { | 396 switch (event.event_type) { |
397 case PP_INPUTEVENT_TYPE_RAWKEYDOWN: | 397 case PP_INPUTEVENT_TYPE_RAWKEYDOWN: |
398 key_event->type = WebInputEvent::RawKeyDown; | 398 type = WebInputEvent::RawKeyDown; |
399 break; | 399 break; |
400 case PP_INPUTEVENT_TYPE_KEYDOWN: | 400 case PP_INPUTEVENT_TYPE_KEYDOWN: |
401 key_event->type = WebInputEvent::KeyDown; | 401 type = WebInputEvent::KeyDown; |
402 break; | 402 break; |
403 case PP_INPUTEVENT_TYPE_KEYUP: | 403 case PP_INPUTEVENT_TYPE_KEYUP: |
404 key_event->type = WebInputEvent::KeyUp; | 404 type = WebInputEvent::KeyUp; |
405 break; | 405 break; |
406 default: | 406 default: |
407 NOTREACHED(); | 407 NOTREACHED(); |
408 } | 408 } |
409 key_event->timeStampSeconds = event.event_time_stamp; | 409 WebKeyboardEvent* key_event = |
410 key_event->modifiers = event.event_modifiers; | 410 new WebKeyboardEvent(type, event.event_modifiers, event.event_time_stamp); |
411 key_event->windowsKeyCode = event.key_code; | 411 key_event->windowsKeyCode = event.key_code; |
412 return key_event; | 412 return key_event; |
413 } | 413 } |
414 | 414 |
415 WebKeyboardEvent* BuildCharEvent(const InputEventData& event) { | 415 WebKeyboardEvent* BuildCharEvent(const InputEventData& event) { |
416 WebKeyboardEvent* key_event = new WebKeyboardEvent(); | 416 WebKeyboardEvent* key_event = new WebKeyboardEvent( |
417 key_event->type = WebInputEvent::Char; | 417 WebInputEvent::Char, event.event_modifiers, event.event_time_stamp); |
418 key_event->timeStampSeconds = event.event_time_stamp; | |
419 key_event->modifiers = event.event_modifiers; | |
420 | 418 |
421 // Make sure to not read beyond the buffer in case some bad code doesn't | 419 // Make sure to not read beyond the buffer in case some bad code doesn't |
422 // NULL-terminate it (this is called from plugins). | 420 // NULL-terminate it (this is called from plugins). |
423 size_t text_length_cap = WebKeyboardEvent::textLengthCap; | 421 size_t text_length_cap = WebKeyboardEvent::textLengthCap; |
424 base::string16 text16 = base::UTF8ToUTF16(event.character_text); | 422 base::string16 text16 = base::UTF8ToUTF16(event.character_text); |
425 | 423 |
426 memset(key_event->text, 0, text_length_cap); | 424 memset(key_event->text, 0, text_length_cap); |
427 memset(key_event->unmodifiedText, 0, text_length_cap); | 425 memset(key_event->unmodifiedText, 0, text_length_cap); |
428 for (size_t i = 0; i < std::min(text_length_cap, text16.size()); ++i) | 426 for (size_t i = 0; i < std::min(text_length_cap, text16.size()); ++i) |
429 key_event->text[i] = text16[i]; | 427 key_event->text[i] = text16[i]; |
430 return key_event; | 428 return key_event; |
431 } | 429 } |
432 | 430 |
433 WebMouseEvent* BuildMouseEvent(const InputEventData& event) { | 431 WebMouseEvent* BuildMouseEvent(const InputEventData& event) { |
434 WebMouseEvent* mouse_event = new WebMouseEvent(); | 432 WebInputEvent::Type type = WebInputEvent::Undefined; |
435 mouse_event->pointerType = blink::WebPointerProperties::PointerType::Mouse; | |
436 | |
437 switch (event.event_type) { | 433 switch (event.event_type) { |
438 case PP_INPUTEVENT_TYPE_MOUSEDOWN: | 434 case PP_INPUTEVENT_TYPE_MOUSEDOWN: |
439 mouse_event->type = WebInputEvent::MouseDown; | 435 type = WebInputEvent::MouseDown; |
440 break; | 436 break; |
441 case PP_INPUTEVENT_TYPE_MOUSEUP: | 437 case PP_INPUTEVENT_TYPE_MOUSEUP: |
442 mouse_event->type = WebInputEvent::MouseUp; | 438 type = WebInputEvent::MouseUp; |
443 break; | 439 break; |
444 case PP_INPUTEVENT_TYPE_MOUSEMOVE: | 440 case PP_INPUTEVENT_TYPE_MOUSEMOVE: |
445 mouse_event->type = WebInputEvent::MouseMove; | 441 type = WebInputEvent::MouseMove; |
446 break; | 442 break; |
447 case PP_INPUTEVENT_TYPE_MOUSEENTER: | 443 case PP_INPUTEVENT_TYPE_MOUSEENTER: |
448 mouse_event->type = WebInputEvent::MouseEnter; | 444 type = WebInputEvent::MouseEnter; |
449 break; | 445 break; |
450 case PP_INPUTEVENT_TYPE_MOUSELEAVE: | 446 case PP_INPUTEVENT_TYPE_MOUSELEAVE: |
451 mouse_event->type = WebInputEvent::MouseLeave; | 447 type = WebInputEvent::MouseLeave; |
452 break; | 448 break; |
453 case PP_INPUTEVENT_TYPE_CONTEXTMENU: | 449 case PP_INPUTEVENT_TYPE_CONTEXTMENU: |
454 mouse_event->type = WebInputEvent::ContextMenu; | 450 type = WebInputEvent::ContextMenu; |
455 break; | 451 break; |
456 default: | 452 default: |
457 NOTREACHED(); | 453 NOTREACHED(); |
458 } | 454 } |
459 mouse_event->timeStampSeconds = event.event_time_stamp; | 455 WebMouseEvent* mouse_event = |
460 mouse_event->modifiers = event.event_modifiers; | 456 new WebMouseEvent(type, event.event_modifiers, event.event_time_stamp); |
| 457 mouse_event->pointerType = blink::WebPointerProperties::PointerType::Mouse; |
461 mouse_event->button = static_cast<WebMouseEvent::Button>(event.mouse_button); | 458 mouse_event->button = static_cast<WebMouseEvent::Button>(event.mouse_button); |
462 if (mouse_event->type == WebInputEvent::MouseMove) { | 459 if (mouse_event->type == WebInputEvent::MouseMove) { |
463 if (mouse_event->modifiers & WebInputEvent::LeftButtonDown) | 460 if (mouse_event->modifiers & WebInputEvent::LeftButtonDown) |
464 mouse_event->button = WebMouseEvent::Button::Left; | 461 mouse_event->button = WebMouseEvent::Button::Left; |
465 else if (mouse_event->modifiers & WebInputEvent::MiddleButtonDown) | 462 else if (mouse_event->modifiers & WebInputEvent::MiddleButtonDown) |
466 mouse_event->button = WebMouseEvent::Button::Middle; | 463 mouse_event->button = WebMouseEvent::Button::Middle; |
467 else if (mouse_event->modifiers & WebInputEvent::RightButtonDown) | 464 else if (mouse_event->modifiers & WebInputEvent::RightButtonDown) |
468 mouse_event->button = WebMouseEvent::Button::Right; | 465 mouse_event->button = WebMouseEvent::Button::Right; |
469 } | 466 } |
470 mouse_event->x = event.mouse_position.x; | 467 mouse_event->x = event.mouse_position.x; |
471 mouse_event->y = event.mouse_position.y; | 468 mouse_event->y = event.mouse_position.y; |
472 mouse_event->clickCount = event.mouse_click_count; | 469 mouse_event->clickCount = event.mouse_click_count; |
473 mouse_event->movementX = event.mouse_movement.x; | 470 mouse_event->movementX = event.mouse_movement.x; |
474 mouse_event->movementY = event.mouse_movement.y; | 471 mouse_event->movementY = event.mouse_movement.y; |
475 return mouse_event; | 472 return mouse_event; |
476 } | 473 } |
477 | 474 |
478 WebMouseWheelEvent* BuildMouseWheelEvent(const InputEventData& event) { | 475 WebMouseWheelEvent* BuildMouseWheelEvent(const InputEventData& event) { |
479 WebMouseWheelEvent* mouse_wheel_event = new WebMouseWheelEvent(); | 476 WebMouseWheelEvent* mouse_wheel_event = new WebMouseWheelEvent( |
480 mouse_wheel_event->type = WebInputEvent::MouseWheel; | 477 WebInputEvent::MouseWheel, event.event_modifiers, event.event_time_stamp); |
481 mouse_wheel_event->timeStampSeconds = event.event_time_stamp; | |
482 mouse_wheel_event->modifiers = event.event_modifiers; | |
483 mouse_wheel_event->deltaX = event.wheel_delta.x; | 478 mouse_wheel_event->deltaX = event.wheel_delta.x; |
484 mouse_wheel_event->deltaY = event.wheel_delta.y; | 479 mouse_wheel_event->deltaY = event.wheel_delta.y; |
485 mouse_wheel_event->wheelTicksX = event.wheel_ticks.x; | 480 mouse_wheel_event->wheelTicksX = event.wheel_ticks.x; |
486 mouse_wheel_event->wheelTicksY = event.wheel_ticks.y; | 481 mouse_wheel_event->wheelTicksY = event.wheel_ticks.y; |
487 mouse_wheel_event->scrollByPage = event.wheel_scroll_by_page; | 482 mouse_wheel_event->scrollByPage = event.wheel_scroll_by_page; |
488 return mouse_wheel_event; | 483 return mouse_wheel_event; |
489 } | 484 } |
490 | 485 |
491 #if !defined(OS_WIN) | 486 #if !defined(OS_WIN) |
492 #define VK_RETURN 0x0D | 487 #define VK_RETURN 0x0D |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 | 699 |
705 WebUChar code = 0, text = 0; | 700 WebUChar code = 0, text = 0; |
706 bool needs_shift_modifier = false, generate_char = false; | 701 bool needs_shift_modifier = false, generate_char = false; |
707 GetKeyCode(event.character_text, | 702 GetKeyCode(event.character_text, |
708 &code, | 703 &code, |
709 &text, | 704 &text, |
710 &needs_shift_modifier, | 705 &needs_shift_modifier, |
711 &generate_char); | 706 &generate_char); |
712 | 707 |
713 // Synthesize key down and key up events in all cases. | 708 // Synthesize key down and key up events in all cases. |
714 std::unique_ptr<WebKeyboardEvent> key_down_event(new WebKeyboardEvent()); | 709 std::unique_ptr<WebKeyboardEvent> key_down_event(new WebKeyboardEvent( |
| 710 WebInputEvent::RawKeyDown, |
| 711 needs_shift_modifier ? WebInputEvent::ShiftKey |
| 712 : WebInputEvent::NoModifiers, |
| 713 web_char_event->timeStampSeconds)); |
715 std::unique_ptr<WebKeyboardEvent> key_up_event(new WebKeyboardEvent()); | 714 std::unique_ptr<WebKeyboardEvent> key_up_event(new WebKeyboardEvent()); |
716 | 715 |
717 key_down_event->type = WebInputEvent::RawKeyDown; | |
718 key_down_event->windowsKeyCode = code; | 716 key_down_event->windowsKeyCode = code; |
719 key_down_event->nativeKeyCode = code; | 717 key_down_event->nativeKeyCode = code; |
720 if (needs_shift_modifier) | |
721 key_down_event->modifiers |= WebInputEvent::ShiftKey; | |
722 | 718 |
723 // If a char event is needed, set the text fields. | 719 // If a char event is needed, set the text fields. |
724 if (generate_char) { | 720 if (generate_char) { |
725 key_down_event->text[0] = text; | 721 key_down_event->text[0] = text; |
726 key_down_event->unmodifiedText[0] = text; | 722 key_down_event->unmodifiedText[0] = text; |
727 } | 723 } |
728 | 724 |
729 *key_up_event = *web_char_event = *key_down_event; | 725 *key_up_event = *web_char_event = *key_down_event; |
730 | 726 |
731 events.push_back(std::move(key_down_event)); | 727 events.push_back(std::move(key_down_event)); |
732 | 728 |
733 if (generate_char) { | 729 if (generate_char) { |
734 web_char_event->type = WebInputEvent::Char; | 730 web_char_event->setType(WebInputEvent::Char); |
735 events.push_back(std::move(original_event)); | 731 events.push_back(std::move(original_event)); |
736 } | 732 } |
737 | 733 |
738 key_up_event->type = WebInputEvent::KeyUp; | 734 key_up_event->setType(WebInputEvent::KeyUp); |
739 events.push_back(std::move(key_up_event)); | 735 events.push_back(std::move(key_up_event)); |
740 break; | 736 break; |
741 } | 737 } |
742 | 738 |
743 default: | 739 default: |
744 break; | 740 break; |
745 } | 741 } |
746 return events; | 742 return events; |
747 } | 743 } |
748 | 744 |
(...skipping 20 matching lines...) Expand all Loading... |
769 return PP_INPUTEVENT_CLASS_TOUCH; | 765 return PP_INPUTEVENT_CLASS_TOUCH; |
770 case WebInputEvent::TouchScrollStarted: | 766 case WebInputEvent::TouchScrollStarted: |
771 return PP_InputEvent_Class(0); | 767 return PP_InputEvent_Class(0); |
772 default: | 768 default: |
773 CHECK(WebInputEvent::isGestureEventType(event.type)); | 769 CHECK(WebInputEvent::isGestureEventType(event.type)); |
774 return PP_InputEvent_Class(0); | 770 return PP_InputEvent_Class(0); |
775 } | 771 } |
776 } | 772 } |
777 | 773 |
778 } // namespace content | 774 } // namespace content |
OLD | NEW |