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