| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. |
| 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
| 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) | 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 #include "core/events/TextEvent.h" | 49 #include "core/events/TextEvent.h" |
| 50 #include "core/events/TouchEvent.h" | 50 #include "core/events/TouchEvent.h" |
| 51 #include "core/events/WheelEvent.h" | 51 #include "core/events/WheelEvent.h" |
| 52 #include "core/fetch/ImageResource.h" | 52 #include "core/fetch/ImageResource.h" |
| 53 #include "core/frame/EventHandlerRegistry.h" | 53 #include "core/frame/EventHandlerRegistry.h" |
| 54 #include "core/frame/FrameHost.h" | 54 #include "core/frame/FrameHost.h" |
| 55 #include "core/frame/FrameView.h" | 55 #include "core/frame/FrameView.h" |
| 56 #include "core/frame/LocalFrame.h" | 56 #include "core/frame/LocalFrame.h" |
| 57 #include "core/frame/Settings.h" | 57 #include "core/frame/Settings.h" |
| 58 #include "core/frame/VisualViewport.h" | 58 #include "core/frame/VisualViewport.h" |
| 59 #include "core/html/HTMLCanvasElement.h" |
| 59 #include "core/html/HTMLDialogElement.h" | 60 #include "core/html/HTMLDialogElement.h" |
| 60 #include "core/html/HTMLFrameElementBase.h" | 61 #include "core/html/HTMLFrameElementBase.h" |
| 61 #include "core/html/HTMLFrameSetElement.h" | 62 #include "core/html/HTMLFrameSetElement.h" |
| 62 #include "core/html/HTMLInputElement.h" | 63 #include "core/html/HTMLInputElement.h" |
| 63 #include "core/input/InputDeviceCapabilities.h" | 64 #include "core/input/InputDeviceCapabilities.h" |
| 64 #include "core/input/TouchActionUtil.h" | 65 #include "core/input/TouchActionUtil.h" |
| 65 #include "core/layout/HitTestRequest.h" | 66 #include "core/layout/HitTestRequest.h" |
| 66 #include "core/layout/HitTestResult.h" | 67 #include "core/layout/HitTestResult.h" |
| 67 #include "core/layout/LayoutPart.h" | 68 #include "core/layout/LayoutPart.h" |
| 68 #include "core/layout/LayoutTextControlSingleLine.h" | 69 #include "core/layout/LayoutTextControlSingleLine.h" |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 visitor->trace(m_resizeScrollableArea); | 282 visitor->trace(m_resizeScrollableArea); |
| 282 visitor->trace(m_capturingMouseEventsNode); | 283 visitor->trace(m_capturingMouseEventsNode); |
| 283 visitor->trace(m_nodeUnderMouse); | 284 visitor->trace(m_nodeUnderMouse); |
| 284 visitor->trace(m_lastMouseMoveEventSubframe); | 285 visitor->trace(m_lastMouseMoveEventSubframe); |
| 285 visitor->trace(m_lastScrollbarUnderMouse); | 286 visitor->trace(m_lastScrollbarUnderMouse); |
| 286 visitor->trace(m_clickNode); | 287 visitor->trace(m_clickNode); |
| 287 visitor->trace(m_dragTarget); | 288 visitor->trace(m_dragTarget); |
| 288 visitor->trace(m_frameSetBeingResized); | 289 visitor->trace(m_frameSetBeingResized); |
| 289 visitor->trace(m_scrollbarHandlingScrollGesture); | 290 visitor->trace(m_scrollbarHandlingScrollGesture); |
| 290 visitor->trace(m_targetForTouchID); | 291 visitor->trace(m_targetForTouchID); |
| 292 visitor->trace(m_regionForTouchID); |
| 291 visitor->trace(m_touchSequenceDocument); | 293 visitor->trace(m_touchSequenceDocument); |
| 292 visitor->trace(m_scrollGestureHandlingNode); | 294 visitor->trace(m_scrollGestureHandlingNode); |
| 293 visitor->trace(m_previousGestureScrolledNode); | 295 visitor->trace(m_previousGestureScrolledNode); |
| 294 visitor->trace(m_lastDeferredTapElement); | 296 visitor->trace(m_lastDeferredTapElement); |
| 295 visitor->trace(m_selectionController); | 297 visitor->trace(m_selectionController); |
| 296 visitor->trace(m_pointerEventManager); | 298 visitor->trace(m_pointerEventManager); |
| 297 #endif | 299 #endif |
| 298 } | 300 } |
| 299 | 301 |
| 300 DragState& EventHandler::dragState() | 302 DragState& EventHandler::dragState() |
| (...skipping 3378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3679 continue; | 3681 continue; |
| 3680 | 3682 |
| 3681 RefPtrWillBeRawPtr<Touch> touch = Touch::create( | 3683 RefPtrWillBeRawPtr<Touch> touch = Touch::create( |
| 3682 touchInfo.targetFrame.get(), | 3684 touchInfo.targetFrame.get(), |
| 3683 touchInfo.touchTarget.get(), | 3685 touchInfo.touchTarget.get(), |
| 3684 point.id(), | 3686 point.id(), |
| 3685 point.screenPos(), | 3687 point.screenPos(), |
| 3686 touchInfo.adjustedPagePoint, | 3688 touchInfo.adjustedPagePoint, |
| 3687 touchInfo.adjustedRadius, | 3689 touchInfo.adjustedRadius, |
| 3688 point.rotationAngle(), | 3690 point.rotationAngle(), |
| 3689 point.force()); | 3691 point.force(), |
| 3692 touchInfo.region); |
| 3690 | 3693 |
| 3691 // Ensure this target's touch list exists, even if it ends up empty, so | 3694 // Ensure this target's touch list exists, even if it ends up empty, so |
| 3692 // it can always be passed to TouchEvent::Create below. | 3695 // it can always be passed to TouchEvent::Create below. |
| 3693 TargetTouchesHeapMap::iterator targetTouchesIterator = touchesByTarget.f
ind(touchInfo.touchTarget.get()); | 3696 TargetTouchesHeapMap::iterator targetTouchesIterator = touchesByTarget.f
ind(touchInfo.touchTarget.get()); |
| 3694 if (targetTouchesIterator == touchesByTarget.end()) { | 3697 if (targetTouchesIterator == touchesByTarget.end()) { |
| 3695 touchesByTarget.set(touchInfo.touchTarget.get(), TouchList::create()
); | 3698 touchesByTarget.set(touchInfo.touchTarget.get(), TouchList::create()
); |
| 3696 targetTouchesIterator = touchesByTarget.find(touchInfo.touchTarget.g
et()); | 3699 targetTouchesIterator = touchesByTarget.find(touchInfo.touchTarget.g
et()); |
| 3697 } | 3700 } |
| 3698 | 3701 |
| 3699 // touches and targetTouches should only contain information about | 3702 // touches and targetTouches should only contain information about |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3805 LayoutPoint framePoint = roundedLayoutPoint(m_touchSequenceDocum
ent->frame()->view()->rootFrameToContents(point.pos())); | 3808 LayoutPoint framePoint = roundedLayoutPoint(m_touchSequenceDocum
ent->frame()->view()->rootFrameToContents(point.pos())); |
| 3806 result = hitTestResultInFrame(m_touchSequenceDocument->frame(),
framePoint, hitType); | 3809 result = hitTestResultInFrame(m_touchSequenceDocument->frame(),
framePoint, hitType); |
| 3807 } else { | 3810 } else { |
| 3808 continue; | 3811 continue; |
| 3809 } | 3812 } |
| 3810 | 3813 |
| 3811 Node* node = result.innerNode(); | 3814 Node* node = result.innerNode(); |
| 3812 if (!node) | 3815 if (!node) |
| 3813 continue; | 3816 continue; |
| 3814 | 3817 |
| 3818 if (isHTMLCanvasElement(node)) { |
| 3819 std::pair<Element*, String> regionInfo = toHTMLCanvasElement(nod
e)->getControlAndIdIfHitRegionExists(result.pointInInnerNodeFrame()); |
| 3820 if (regionInfo.first) |
| 3821 node = regionInfo.first; |
| 3822 m_regionForTouchID.set(point.id(), regionInfo.second); |
| 3823 } |
| 3824 |
| 3815 // Touch events should not go to text nodes | 3825 // Touch events should not go to text nodes |
| 3816 if (node->isTextNode()) | 3826 if (node->isTextNode()) |
| 3817 node = FlatTreeTraversal::parent(*node); | 3827 node = FlatTreeTraversal::parent(*node); |
| 3818 | 3828 |
| 3819 if (!m_touchSequenceDocument) { | 3829 if (!m_touchSequenceDocument) { |
| 3820 // Keep track of which document should receive all touch events | 3830 // Keep track of which document should receive all touch events |
| 3821 // in the active sequence. This must be a single document to | 3831 // in the active sequence. This must be a single document to |
| 3822 // ensure we don't leak Nodes between documents. | 3832 // ensure we don't leak Nodes between documents. |
| 3823 m_touchSequenceDocument = &(result.innerNode()->document()); | 3833 m_touchSequenceDocument = &(result.innerNode()->document()); |
| 3824 ASSERT(m_touchSequenceDocument->frame()->view()); | 3834 ASSERT(m_touchSequenceDocument->frame()->view()); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 3851 return WebInputEventResult::NotHandled; | 3861 return WebInputEventResult::NotHandled; |
| 3852 } | 3862 } |
| 3853 | 3863 |
| 3854 // Compute and store the common info used by both PointerEvent and TouchEven
t. | 3864 // Compute and store the common info used by both PointerEvent and TouchEven
t. |
| 3855 WillBeHeapVector<TouchInfo> touchInfos(points.size()); | 3865 WillBeHeapVector<TouchInfo> touchInfos(points.size()); |
| 3856 | 3866 |
| 3857 for (unsigned i = 0; i < points.size(); ++i) { | 3867 for (unsigned i = 0; i < points.size(); ++i) { |
| 3858 const PlatformTouchPoint& point = points[i]; | 3868 const PlatformTouchPoint& point = points[i]; |
| 3859 PlatformTouchPoint::TouchState pointState = point.state(); | 3869 PlatformTouchPoint::TouchState pointState = point.state(); |
| 3860 RefPtrWillBeRawPtr<EventTarget> touchTarget = nullptr; | 3870 RefPtrWillBeRawPtr<EventTarget> touchTarget = nullptr; |
| 3871 String regionID; |
| 3861 | 3872 |
| 3862 if (pointState == PlatformTouchPoint::TouchReleased || pointState == Pla
tformTouchPoint::TouchCancelled) { | 3873 if (pointState == PlatformTouchPoint::TouchReleased || pointState == Pla
tformTouchPoint::TouchCancelled) { |
| 3863 // The target should be the original target for this touch, so get | 3874 // The target should be the original target for this touch, so get |
| 3864 // it from the hashmap. As it's a release or cancel we also remove | 3875 // it from the hashmap. As it's a release or cancel we also remove |
| 3865 // it from the map. | 3876 // it from the map. |
| 3866 touchTarget = m_targetForTouchID.take(point.id()); | 3877 touchTarget = m_targetForTouchID.take(point.id()); |
| 3878 regionID = m_regionForTouchID.take(point.id()); |
| 3867 } else { | 3879 } else { |
| 3868 // No hittest is performed on move or stationary, since the target | 3880 // No hittest is performed on move or stationary, since the target |
| 3869 // is not allowed to change anyway. | 3881 // is not allowed to change anyway. |
| 3870 touchTarget = m_targetForTouchID.get(point.id()); | 3882 touchTarget = m_targetForTouchID.get(point.id()); |
| 3883 regionID = m_regionForTouchID.get(point.id()); |
| 3871 } | 3884 } |
| 3872 | 3885 |
| 3873 LocalFrame* targetFrame = nullptr; | 3886 LocalFrame* targetFrame = nullptr; |
| 3874 bool knownTarget = false; | 3887 bool knownTarget = false; |
| 3875 if (touchTarget) { | 3888 if (touchTarget) { |
| 3876 Document& doc = touchTarget->toNode()->document(); | 3889 Document& doc = touchTarget->toNode()->document(); |
| 3877 // If the target node has moved to a new document while it was being
touched, | 3890 // If the target node has moved to a new document while it was being
touched, |
| 3878 // we can't send events to the new document because that could leak
nodes | 3891 // we can't send events to the new document because that could leak
nodes |
| 3879 // from one document to another. See http://crbug.com/394339. | 3892 // from one document to another. See http://crbug.com/394339. |
| 3880 if (&doc == m_touchSequenceDocument.get()) { | 3893 if (&doc == m_touchSequenceDocument.get()) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 3906 float scaleFactor = 1.0f / targetFrame->pageZoomFactor(); | 3919 float scaleFactor = 1.0f / targetFrame->pageZoomFactor(); |
| 3907 | 3920 |
| 3908 TouchInfo& touchInfo = touchInfos[i]; | 3921 TouchInfo& touchInfo = touchInfos[i]; |
| 3909 touchInfo.point = point; | 3922 touchInfo.point = point; |
| 3910 touchInfo.touchTarget = touchTarget; | 3923 touchInfo.touchTarget = touchTarget; |
| 3911 touchInfo.targetFrame = targetFrame; | 3924 touchInfo.targetFrame = targetFrame; |
| 3912 touchInfo.adjustedPagePoint = pagePoint.scaledBy(scaleFactor); | 3925 touchInfo.adjustedPagePoint = pagePoint.scaledBy(scaleFactor); |
| 3913 touchInfo.adjustedRadius = point.radius().scaledBy(scaleFactor); | 3926 touchInfo.adjustedRadius = point.radius().scaledBy(scaleFactor); |
| 3914 touchInfo.knownTarget = knownTarget; | 3927 touchInfo.knownTarget = knownTarget; |
| 3915 touchInfo.consumed = false; | 3928 touchInfo.consumed = false; |
| 3929 touchInfo.region = regionID; |
| 3916 } | 3930 } |
| 3917 | 3931 |
| 3918 if (!m_inPointerCanceledState) { | 3932 if (!m_inPointerCanceledState) { |
| 3919 dispatchPointerEvents(event, touchInfos); | 3933 dispatchPointerEvents(event, touchInfos); |
| 3920 // Note that the disposition of any pointer events affects only the gene
ration of touch | 3934 // Note that the disposition of any pointer events affects only the gene
ration of touch |
| 3921 // events. If all pointer events were handled (and hence no touch events
were fired), that | 3935 // events. If all pointer events were handled (and hence no touch events
were fired), that |
| 3922 // is still equivalent to the touch events going unhandled because point
er event handler | 3936 // is still equivalent to the touch events going unhandled because point
er event handler |
| 3923 // don't block scroll gesture generation. | 3937 // don't block scroll gesture generation. |
| 3924 } | 3938 } |
| 3925 | 3939 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3994 PlatformEvent::Modifiers EventHandler::accessKeyModifiers() | 4008 PlatformEvent::Modifiers EventHandler::accessKeyModifiers() |
| 3995 { | 4009 { |
| 3996 #if OS(MACOSX) | 4010 #if OS(MACOSX) |
| 3997 return static_cast<PlatformEvent::Modifiers>(PlatformEvent::CtrlKey | Platfo
rmEvent::AltKey); | 4011 return static_cast<PlatformEvent::Modifiers>(PlatformEvent::CtrlKey | Platfo
rmEvent::AltKey); |
| 3998 #else | 4012 #else |
| 3999 return PlatformEvent::AltKey; | 4013 return PlatformEvent::AltKey; |
| 4000 #endif | 4014 #endif |
| 4001 } | 4015 } |
| 4002 | 4016 |
| 4003 } // namespace blink | 4017 } // namespace blink |
| OLD | NEW |