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

Side by Side Diff: third_party/WebKit/Source/web/WebPluginContainerImpl.cpp

Issue 2844823002: Support Coalesced Touch in ppapi (Closed)
Patch Set: Support Coalesced Touch in ppapi Created 3 years, 7 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 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * Copyright (C) 2014 Opera Software ASA. All rights reserved. 3 * Copyright (C) 2014 Opera Software ASA. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 #include "platform/geometry/LayoutRect.h" 79 #include "platform/geometry/LayoutRect.h"
80 #include "platform/graphics/GraphicsContext.h" 80 #include "platform/graphics/GraphicsContext.h"
81 #include "platform/graphics/GraphicsLayer.h" 81 #include "platform/graphics/GraphicsLayer.h"
82 #include "platform/graphics/paint/CullRect.h" 82 #include "platform/graphics/paint/CullRect.h"
83 #include "platform/graphics/paint/ForeignLayerDisplayItem.h" 83 #include "platform/graphics/paint/ForeignLayerDisplayItem.h"
84 #include "platform/scroll/ScrollAnimatorBase.h" 84 #include "platform/scroll/ScrollAnimatorBase.h"
85 #include "platform/scroll/ScrollbarTheme.h" 85 #include "platform/scroll/ScrollbarTheme.h"
86 #include "platform/wtf/Assertions.h" 86 #include "platform/wtf/Assertions.h"
87 #include "public/platform/Platform.h" 87 #include "public/platform/Platform.h"
88 #include "public/platform/WebClipboard.h" 88 #include "public/platform/WebClipboard.h"
89 #include "public/platform/WebCoalescedInputEvent.h"
89 #include "public/platform/WebCompositorSupport.h" 90 #include "public/platform/WebCompositorSupport.h"
90 #include "public/platform/WebCursorInfo.h" 91 #include "public/platform/WebCursorInfo.h"
91 #include "public/platform/WebDragData.h" 92 #include "public/platform/WebDragData.h"
92 #include "public/platform/WebExternalTextureLayer.h" 93 #include "public/platform/WebExternalTextureLayer.h"
93 #include "public/platform/WebInputEvent.h" 94 #include "public/platform/WebInputEvent.h"
94 #include "public/platform/WebRect.h" 95 #include "public/platform/WebRect.h"
95 #include "public/platform/WebString.h" 96 #include "public/platform/WebString.h"
96 #include "public/platform/WebURL.h" 97 #include "public/platform/WebURL.h"
97 #include "public/platform/WebURLError.h" 98 #include "public/platform/WebURLError.h"
98 #include "public/platform/WebURLRequest.h" 99 #include "public/platform/WebURLRequest.h"
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 // in this class. 714 // in this class.
714 WebMouseEventBuilder transformed_event( 715 WebMouseEventBuilder transformed_event(
715 parent_, LayoutItem(element_->GetLayoutObject()), *event); 716 parent_, LayoutItem(element_->GetLayoutObject()), *event);
716 if (transformed_event.GetType() == WebInputEvent::kUndefined) 717 if (transformed_event.GetType() == WebInputEvent::kUndefined)
717 return; 718 return;
718 719
719 if (event->type() == EventTypeNames::mousedown) 720 if (event->type() == EventTypeNames::mousedown)
720 FocusPlugin(); 721 FocusPlugin();
721 722
722 WebCursorInfo cursor_info; 723 WebCursorInfo cursor_info;
723 if (web_plugin_ && 724 if (web_plugin_ && web_plugin_->HandleInputEvent(
724 web_plugin_->HandleInputEvent(transformed_event, cursor_info) != 725 WebCoalescedInputEvent(transformed_event),
725 WebInputEventResult::kNotHandled) 726 cursor_info) != WebInputEventResult::kNotHandled)
726 event->SetDefaultHandled(); 727 event->SetDefaultHandled();
727 728
728 // A windowless plugin can change the cursor in response to a mouse move 729 // A windowless plugin can change the cursor in response to a mouse move
729 // event. We need to reflect the changed cursor in the frame view as the 730 // event. We need to reflect the changed cursor in the frame view as the
730 // mouse is moved in the boundaries of the windowless plugin. 731 // mouse is moved in the boundaries of the windowless plugin.
731 Page* page = parent_view->GetFrame().GetPage(); 732 Page* page = parent_view->GetFrame().GetPage();
732 if (!page) 733 if (!page)
733 return; 734 return;
734 ToChromeClientImpl(page->GetChromeClient()) 735 ToChromeClientImpl(page->GetChromeClient())
735 .SetCursorForPlugin(cursor_info, 736 .SetCursorForPlugin(cursor_info,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 absolute_location = parent_->RootFrameToContents(absolute_location); 775 absolute_location = parent_->RootFrameToContents(absolute_location);
775 } 776 }
776 777
777 IntPoint local_point = 778 IntPoint local_point =
778 RoundedIntPoint(element_->GetLayoutObject()->AbsoluteToLocal( 779 RoundedIntPoint(element_->GetLayoutObject()->AbsoluteToLocal(
779 absolute_location, kUseTransforms)); 780 absolute_location, kUseTransforms));
780 WebMouseWheelEvent translated_event = event->NativeEvent().FlattenTransform(); 781 WebMouseWheelEvent translated_event = event->NativeEvent().FlattenTransform();
781 translated_event.SetPositionInWidget(local_point.X(), local_point.Y()); 782 translated_event.SetPositionInWidget(local_point.X(), local_point.Y());
782 783
783 WebCursorInfo cursor_info; 784 WebCursorInfo cursor_info;
784 if (web_plugin_->HandleInputEvent(translated_event, cursor_info) != 785 if (web_plugin_->HandleInputEvent(WebCoalescedInputEvent(translated_event),
786 cursor_info) !=
785 WebInputEventResult::kNotHandled) 787 WebInputEventResult::kNotHandled)
786 event->SetDefaultHandled(); 788 event->SetDefaultHandled();
787 } 789 }
788 790
789 void WebPluginContainerImpl::HandleKeyboardEvent(KeyboardEvent* event) { 791 void WebPluginContainerImpl::HandleKeyboardEvent(KeyboardEvent* event) {
790 WebKeyboardEventBuilder web_event(*event); 792 WebKeyboardEventBuilder web_event(*event);
791 if (web_event.GetType() == WebInputEvent::kUndefined) 793 if (web_event.GetType() == WebInputEvent::kUndefined)
792 return; 794 return;
793 795
794 if (web_event.GetType() == WebInputEvent::kKeyDown) { 796 if (web_event.GetType() == WebInputEvent::kKeyDown) {
(...skipping 16 matching lines...) Expand all
811 } 813 }
812 } 814 }
813 815
814 // Give the client a chance to issue edit comamnds. 816 // Give the client a chance to issue edit comamnds.
815 WebLocalFrameBase* web_frame = 817 WebLocalFrameBase* web_frame =
816 WebLocalFrameBase::FromFrame(element_->GetDocument().GetFrame()); 818 WebLocalFrameBase::FromFrame(element_->GetDocument().GetFrame());
817 if (web_plugin_->SupportsEditCommands()) 819 if (web_plugin_->SupportsEditCommands())
818 web_frame->Client()->HandleCurrentKeyboardEvent(); 820 web_frame->Client()->HandleCurrentKeyboardEvent();
819 821
820 WebCursorInfo cursor_info; 822 WebCursorInfo cursor_info;
821 if (web_plugin_->HandleInputEvent(web_event, cursor_info) != 823 if (web_plugin_->HandleInputEvent(WebCoalescedInputEvent(web_event),
824 cursor_info) !=
822 WebInputEventResult::kNotHandled) 825 WebInputEventResult::kNotHandled)
823 event->SetDefaultHandled(); 826 event->SetDefaultHandled();
824 } 827 }
825 828
829 WebTouchEvent WebPluginContainerImpl::TransformTouchEvent(
830 const WebInputEvent& event) {
831 DCHECK(blink::WebInputEvent::IsTouchEventType(event.GetType()));
832 const WebTouchEvent* touch_event = static_cast<const WebTouchEvent*>(&event);
833 WebTouchEvent transformed_event = touch_event->FlattenTransform();
834
835 for (unsigned i = 0; i < transformed_event.touches_length; ++i) {
836 WebFloatPoint absolute_location = transformed_event.touches[i].position;
837
838 // Translate the root frame position to content coordinates.
839 if (parent_) {
840 absolute_location = parent_->RootFrameToContents(absolute_location);
841 }
842
843 IntPoint local_point =
844 RoundedIntPoint(element_->GetLayoutObject()->AbsoluteToLocal(
845 absolute_location, kUseTransforms));
846 transformed_event.touches[i].position.x = local_point.X();
847 transformed_event.touches[i].position.y = local_point.Y();
848 }
849 return transformed_event;
850 }
851
852 WebCoalescedInputEvent WebPluginContainerImpl::TransformCoalescedTouchEvent(
853 const WebCoalescedInputEvent& coalesced_event) {
854 WebCoalescedInputEvent transformed_event(
855 TransformTouchEvent(coalesced_event.Event()),
856 std::vector<const WebInputEvent*>());
857 for (size_t i = 0; i < coalesced_event.CoalescedEventSize(); ++i) {
858 transformed_event.AddCoalescedEvent(
859 TransformTouchEvent(coalesced_event.CoalescedEvent(i)));
860 }
861 return transformed_event;
862 }
863
826 void WebPluginContainerImpl::HandleTouchEvent(TouchEvent* event) { 864 void WebPluginContainerImpl::HandleTouchEvent(TouchEvent* event) {
827 switch (touch_event_request_type_) { 865 switch (touch_event_request_type_) {
828 case kTouchEventRequestTypeNone: 866 case kTouchEventRequestTypeNone:
829 return; 867 return;
830 case kTouchEventRequestTypeRaw: { 868 case kTouchEventRequestTypeRaw: {
831 if (!event->NativeEvent()) 869 if (!event->NativeEvent())
832 return; 870 return;
833 871
834 if (event->type() == EventTypeNames::touchstart) 872 if (event->type() == EventTypeNames::touchstart)
835 FocusPlugin(); 873 FocusPlugin();
836 874
837 WebTouchEvent transformed_event = 875 WebCoalescedInputEvent transformed_event =
838 event->NativeEvent()->FlattenTransform(); 876 TransformCoalescedTouchEvent(*event->NativeEvent());
839
840 for (unsigned i = 0; i < transformed_event.touches_length; ++i) {
841 WebFloatPoint absolute_location = transformed_event.touches[i].position;
842
843 // Translate the root frame position to content coordinates.
844 if (parent_) {
845 absolute_location = parent_->RootFrameToContents(absolute_location);
846 }
847
848 IntPoint local_point =
849 RoundedIntPoint(element_->GetLayoutObject()->AbsoluteToLocal(
850 absolute_location, kUseTransforms));
851 transformed_event.touches[i].position.x = local_point.X();
852 transformed_event.touches[i].position.y = local_point.Y();
853 }
854 877
855 WebCursorInfo cursor_info; 878 WebCursorInfo cursor_info;
856 if (web_plugin_->HandleInputEvent(transformed_event, cursor_info) != 879 if (web_plugin_->HandleInputEvent(transformed_event, cursor_info) !=
857 WebInputEventResult::kNotHandled) 880 WebInputEventResult::kNotHandled)
858 event->SetDefaultHandled(); 881 event->SetDefaultHandled();
859 // FIXME: Can a plugin change the cursor from a touch-event callback? 882 // FIXME: Can a plugin change the cursor from a touch-event callback?
860 return; 883 return;
861 } 884 }
862 case kTouchEventRequestTypeSynthesizedMouse: 885 case kTouchEventRequestTypeSynthesizedMouse:
863 SynthesizeMouseEventIfPossible(event); 886 SynthesizeMouseEventIfPossible(event);
(...skipping 13 matching lines...) Expand all
877 WebFloatPoint absolute_root_frame_location = 900 WebFloatPoint absolute_root_frame_location =
878 event->NativeEvent().PositionInRootFrame(); 901 event->NativeEvent().PositionInRootFrame();
879 IntPoint local_point = 902 IntPoint local_point =
880 RoundedIntPoint(element_->GetLayoutObject()->AbsoluteToLocal( 903 RoundedIntPoint(element_->GetLayoutObject()->AbsoluteToLocal(
881 absolute_root_frame_location, kUseTransforms)); 904 absolute_root_frame_location, kUseTransforms));
882 translated_event.FlattenTransform(); 905 translated_event.FlattenTransform();
883 translated_event.x = local_point.X(); 906 translated_event.x = local_point.X();
884 translated_event.y = local_point.Y(); 907 translated_event.y = local_point.Y();
885 908
886 WebCursorInfo cursor_info; 909 WebCursorInfo cursor_info;
887 if (web_plugin_->HandleInputEvent(translated_event, cursor_info) != 910 if (web_plugin_->HandleInputEvent(WebCoalescedInputEvent(translated_event),
911 cursor_info) !=
888 WebInputEventResult::kNotHandled) { 912 WebInputEventResult::kNotHandled) {
889 event->SetDefaultHandled(); 913 event->SetDefaultHandled();
890 return; 914 return;
891 } 915 }
892 916
893 // FIXME: Can a plugin change the cursor from a touch-event callback? 917 // FIXME: Can a plugin change the cursor from a touch-event callback?
894 } 918 }
895 919
896 void WebPluginContainerImpl::SynthesizeMouseEventIfPossible(TouchEvent* event) { 920 void WebPluginContainerImpl::SynthesizeMouseEventIfPossible(TouchEvent* event) {
897 WebMouseEventBuilder web_event( 921 WebMouseEventBuilder web_event(
898 parent_, LayoutItem(element_->GetLayoutObject()), *event); 922 parent_, LayoutItem(element_->GetLayoutObject()), *event);
899 if (web_event.GetType() == WebInputEvent::kUndefined) 923 if (web_event.GetType() == WebInputEvent::kUndefined)
900 return; 924 return;
901 925
902 WebCursorInfo cursor_info; 926 WebCursorInfo cursor_info;
903 if (web_plugin_->HandleInputEvent(web_event, cursor_info) != 927 if (web_plugin_->HandleInputEvent(WebCoalescedInputEvent(web_event),
928 cursor_info) !=
904 WebInputEventResult::kNotHandled) 929 WebInputEventResult::kNotHandled)
905 event->SetDefaultHandled(); 930 event->SetDefaultHandled();
906 } 931 }
907 932
908 void WebPluginContainerImpl::FocusPlugin() { 933 void WebPluginContainerImpl::FocusPlugin() {
909 LocalFrame& containing_frame = parent_->GetFrame(); 934 LocalFrame& containing_frame = parent_->GetFrame();
910 if (Page* current_page = containing_frame.GetPage()) 935 if (Page* current_page = containing_frame.GetPage())
911 current_page->GetFocusController().SetFocusedElement(element_, 936 current_page->GetFocusController().SetFocusedElement(element_,
912 &containing_frame); 937 &containing_frame);
913 else 938 else
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1002 .GetLayoutViewItem() 1027 .GetLayoutViewItem()
1003 .IsNull()) { 1028 .IsNull()) {
1004 // Take our element and get the clip rect from the enclosing layer and 1029 // Take our element and get the clip rect from the enclosing layer and
1005 // frame view. 1030 // frame view.
1006 ComputeClipRectsForPlugin(element_, window_rect, clip_rect, 1031 ComputeClipRectsForPlugin(element_, window_rect, clip_rect,
1007 unobscured_rect); 1032 unobscured_rect);
1008 } 1033 }
1009 } 1034 }
1010 1035
1011 } // namespace blink 1036 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/web/WebPluginContainerImpl.h ('k') | third_party/WebKit/Source/web/tests/FakeWebPlugin.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698