| 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 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 visitor->trace(m_capturingMouseEventsNode); | 353 visitor->trace(m_capturingMouseEventsNode); |
| 353 visitor->trace(m_nodeUnderMouse); | 354 visitor->trace(m_nodeUnderMouse); |
| 354 visitor->trace(m_lastMouseMoveEventSubframe); | 355 visitor->trace(m_lastMouseMoveEventSubframe); |
| 355 visitor->trace(m_lastScrollbarUnderMouse); | 356 visitor->trace(m_lastScrollbarUnderMouse); |
| 356 visitor->trace(m_clickNode); | 357 visitor->trace(m_clickNode); |
| 357 visitor->trace(m_dragTarget); | 358 visitor->trace(m_dragTarget); |
| 358 visitor->trace(m_frameSetBeingResized); | 359 visitor->trace(m_frameSetBeingResized); |
| 359 visitor->trace(m_previousWheelScrolledNode); | 360 visitor->trace(m_previousWheelScrolledNode); |
| 360 visitor->trace(m_scrollbarHandlingScrollGesture); | 361 visitor->trace(m_scrollbarHandlingScrollGesture); |
| 361 visitor->trace(m_targetForTouchID); | 362 visitor->trace(m_targetForTouchID); |
| 363 visitor->trace(m_regionForTouchID); |
| 362 visitor->trace(m_touchSequenceDocument); | 364 visitor->trace(m_touchSequenceDocument); |
| 363 visitor->trace(m_scrollGestureHandlingNode); | 365 visitor->trace(m_scrollGestureHandlingNode); |
| 364 visitor->trace(m_previousGestureScrolledNode); | 366 visitor->trace(m_previousGestureScrolledNode); |
| 365 visitor->trace(m_lastDeferredTapElement); | 367 visitor->trace(m_lastDeferredTapElement); |
| 366 visitor->trace(m_selectionController); | 368 visitor->trace(m_selectionController); |
| 367 #endif | 369 #endif |
| 368 } | 370 } |
| 369 | 371 |
| 370 DragState& EventHandler::dragState() | 372 DragState& EventHandler::dragState() |
| 371 { | 373 { |
| (...skipping 3465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3837 continue; | 3839 continue; |
| 3838 | 3840 |
| 3839 RefPtrWillBeRawPtr<Touch> touch = Touch::create( | 3841 RefPtrWillBeRawPtr<Touch> touch = Touch::create( |
| 3840 touchInfo.targetFrame.get(), | 3842 touchInfo.targetFrame.get(), |
| 3841 touchInfo.touchTarget.get(), | 3843 touchInfo.touchTarget.get(), |
| 3842 point.id(), | 3844 point.id(), |
| 3843 point.screenPos(), | 3845 point.screenPos(), |
| 3844 touchInfo.adjustedPagePoint, | 3846 touchInfo.adjustedPagePoint, |
| 3845 touchInfo.adjustedRadius, | 3847 touchInfo.adjustedRadius, |
| 3846 point.rotationAngle(), | 3848 point.rotationAngle(), |
| 3847 point.force()); | 3849 point.force(), |
| 3850 touchInfo.region); |
| 3848 | 3851 |
| 3849 // Ensure this target's touch list exists, even if it ends up empty, so | 3852 // Ensure this target's touch list exists, even if it ends up empty, so |
| 3850 // it can always be passed to TouchEvent::Create below. | 3853 // it can always be passed to TouchEvent::Create below. |
| 3851 TargetTouchesHeapMap::iterator targetTouchesIterator = touchesByTarget.f
ind(touchInfo.touchTarget.get()); | 3854 TargetTouchesHeapMap::iterator targetTouchesIterator = touchesByTarget.f
ind(touchInfo.touchTarget.get()); |
| 3852 if (targetTouchesIterator == touchesByTarget.end()) { | 3855 if (targetTouchesIterator == touchesByTarget.end()) { |
| 3853 touchesByTarget.set(touchInfo.touchTarget.get(), TouchList::create()
); | 3856 touchesByTarget.set(touchInfo.touchTarget.get(), TouchList::create()
); |
| 3854 targetTouchesIterator = touchesByTarget.find(touchInfo.touchTarget.g
et()); | 3857 targetTouchesIterator = touchesByTarget.find(touchInfo.touchTarget.g
et()); |
| 3855 } | 3858 } |
| 3856 | 3859 |
| 3857 // touches and targetTouches should only contain information about | 3860 // touches and targetTouches should only contain information about |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3964 LayoutPoint framePoint = roundedLayoutPoint(m_touchSequenceDocum
ent->frame()->view()->rootFrameToContents(point.pos())); | 3967 LayoutPoint framePoint = roundedLayoutPoint(m_touchSequenceDocum
ent->frame()->view()->rootFrameToContents(point.pos())); |
| 3965 result = hitTestResultInFrame(m_touchSequenceDocument->frame(),
framePoint, hitType); | 3968 result = hitTestResultInFrame(m_touchSequenceDocument->frame(),
framePoint, hitType); |
| 3966 } else { | 3969 } else { |
| 3967 continue; | 3970 continue; |
| 3968 } | 3971 } |
| 3969 | 3972 |
| 3970 Node* node = result.innerNode(); | 3973 Node* node = result.innerNode(); |
| 3971 if (!node) | 3974 if (!node) |
| 3972 continue; | 3975 continue; |
| 3973 | 3976 |
| 3977 if (isHTMLCanvasElement(node)) { |
| 3978 std::pair<Element*, String> regionInfo = toHTMLCanvasElement(nod
e)->getControlAndIDIfHitRegionExists(result.pointInInnerNodeFrame()); |
| 3979 if (regionInfo.first) |
| 3980 node = regionInfo.first; |
| 3981 m_regionForTouchID.set(point.id(), regionInfo.second); |
| 3982 } |
| 3983 |
| 3974 // Touch events should not go to text nodes | 3984 // Touch events should not go to text nodes |
| 3975 if (node->isTextNode()) | 3985 if (node->isTextNode()) |
| 3976 node = ComposedTreeTraversal::parent(*node); | 3986 node = ComposedTreeTraversal::parent(*node); |
| 3977 | 3987 |
| 3978 if (!m_touchSequenceDocument) { | 3988 if (!m_touchSequenceDocument) { |
| 3979 // Keep track of which document should receive all touch events | 3989 // Keep track of which document should receive all touch events |
| 3980 // in the active sequence. This must be a single document to | 3990 // in the active sequence. This must be a single document to |
| 3981 // ensure we don't leak Nodes between documents. | 3991 // ensure we don't leak Nodes between documents. |
| 3982 m_touchSequenceDocument = &(result.innerNode()->document()); | 3992 m_touchSequenceDocument = &(result.innerNode()->document()); |
| 3983 ASSERT(m_touchSequenceDocument->frame()->view()); | 3993 ASSERT(m_touchSequenceDocument->frame()->view()); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 4010 return WebInputEventResult::NotHandled; | 4020 return WebInputEventResult::NotHandled; |
| 4011 } | 4021 } |
| 4012 | 4022 |
| 4013 // Compute and store the common info used by both PointerEvent and TouchEven
t. | 4023 // Compute and store the common info used by both PointerEvent and TouchEven
t. |
| 4014 WillBeHeapVector<TouchInfo> touchInfos(points.size()); | 4024 WillBeHeapVector<TouchInfo> touchInfos(points.size()); |
| 4015 | 4025 |
| 4016 for (unsigned i = 0; i < points.size(); ++i) { | 4026 for (unsigned i = 0; i < points.size(); ++i) { |
| 4017 const PlatformTouchPoint& point = points[i]; | 4027 const PlatformTouchPoint& point = points[i]; |
| 4018 PlatformTouchPoint::State pointState = point.state(); | 4028 PlatformTouchPoint::State pointState = point.state(); |
| 4019 RefPtrWillBeRawPtr<EventTarget> touchTarget = nullptr; | 4029 RefPtrWillBeRawPtr<EventTarget> touchTarget = nullptr; |
| 4030 String regionID; |
| 4020 | 4031 |
| 4021 if (pointState == PlatformTouchPoint::TouchReleased || pointState == Pla
tformTouchPoint::TouchCancelled) { | 4032 if (pointState == PlatformTouchPoint::TouchReleased || pointState == Pla
tformTouchPoint::TouchCancelled) { |
| 4022 // The target should be the original target for this touch, so get | 4033 // The target should be the original target for this touch, so get |
| 4023 // it from the hashmap. As it's a release or cancel we also remove | 4034 // it from the hashmap. As it's a release or cancel we also remove |
| 4024 // it from the map. | 4035 // it from the map. |
| 4025 touchTarget = m_targetForTouchID.take(point.id()); | 4036 touchTarget = m_targetForTouchID.take(point.id()); |
| 4037 regionID = m_regionForTouchID.take(point.id()); |
| 4026 } else { | 4038 } else { |
| 4027 // No hittest is performed on move or stationary, since the target | 4039 // No hittest is performed on move or stationary, since the target |
| 4028 // is not allowed to change anyway. | 4040 // is not allowed to change anyway. |
| 4029 touchTarget = m_targetForTouchID.get(point.id()); | 4041 touchTarget = m_targetForTouchID.get(point.id()); |
| 4042 regionID = m_regionForTouchID.get(point.id()); |
| 4030 } | 4043 } |
| 4031 | 4044 |
| 4032 LocalFrame* targetFrame = nullptr; | 4045 LocalFrame* targetFrame = nullptr; |
| 4033 bool knownTarget = false; | 4046 bool knownTarget = false; |
| 4034 if (touchTarget) { | 4047 if (touchTarget) { |
| 4035 Document& doc = touchTarget->toNode()->document(); | 4048 Document& doc = touchTarget->toNode()->document(); |
| 4036 // If the target node has moved to a new document while it was being
touched, | 4049 // If the target node has moved to a new document while it was being
touched, |
| 4037 // we can't send events to the new document because that could leak
nodes | 4050 // we can't send events to the new document because that could leak
nodes |
| 4038 // from one document to another. See http://crbug.com/394339. | 4051 // from one document to another. See http://crbug.com/394339. |
| 4039 if (&doc == m_touchSequenceDocument.get()) { | 4052 if (&doc == m_touchSequenceDocument.get()) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 4065 float scaleFactor = 1.0f / targetFrame->pageZoomFactor(); | 4078 float scaleFactor = 1.0f / targetFrame->pageZoomFactor(); |
| 4066 | 4079 |
| 4067 TouchInfo& touchInfo = touchInfos[i]; | 4080 TouchInfo& touchInfo = touchInfos[i]; |
| 4068 touchInfo.point = point; | 4081 touchInfo.point = point; |
| 4069 touchInfo.touchTarget = touchTarget; | 4082 touchInfo.touchTarget = touchTarget; |
| 4070 touchInfo.targetFrame = targetFrame; | 4083 touchInfo.targetFrame = targetFrame; |
| 4071 touchInfo.adjustedPagePoint = pagePoint.scaledBy(scaleFactor); | 4084 touchInfo.adjustedPagePoint = pagePoint.scaledBy(scaleFactor); |
| 4072 touchInfo.adjustedRadius = point.radius().scaledBy(scaleFactor); | 4085 touchInfo.adjustedRadius = point.radius().scaledBy(scaleFactor); |
| 4073 touchInfo.knownTarget = knownTarget; | 4086 touchInfo.knownTarget = knownTarget; |
| 4074 touchInfo.consumed = false; | 4087 touchInfo.consumed = false; |
| 4088 touchInfo.region = regionID; |
| 4075 } | 4089 } |
| 4076 | 4090 |
| 4077 if (!m_inPointerCanceledState) { | 4091 if (!m_inPointerCanceledState) { |
| 4078 dispatchPointerEvents(event, touchInfos); | 4092 dispatchPointerEvents(event, touchInfos); |
| 4079 // Note that the disposition of any pointer events affects only the gene
ration of touch | 4093 // Note that the disposition of any pointer events affects only the gene
ration of touch |
| 4080 // events. If all pointer events were handled (and hence no touch events
were fired), that | 4094 // events. If all pointer events were handled (and hence no touch events
were fired), that |
| 4081 // is still equivalent to the touch events going unhandled because point
er event handler | 4095 // is still equivalent to the touch events going unhandled because point
er event handler |
| 4082 // don't block scroll gesture generation. | 4096 // don't block scroll gesture generation. |
| 4083 } | 4097 } |
| 4084 | 4098 |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4169 PlatformEvent::Modifiers EventHandler::accessKeyModifiers() | 4183 PlatformEvent::Modifiers EventHandler::accessKeyModifiers() |
| 4170 { | 4184 { |
| 4171 #if OS(MACOSX) | 4185 #if OS(MACOSX) |
| 4172 return static_cast<PlatformEvent::Modifiers>(PlatformEvent::CtrlKey | Platfo
rmEvent::AltKey); | 4186 return static_cast<PlatformEvent::Modifiers>(PlatformEvent::CtrlKey | Platfo
rmEvent::AltKey); |
| 4173 #else | 4187 #else |
| 4174 return PlatformEvent::AltKey; | 4188 return PlatformEvent::AltKey; |
| 4175 #endif | 4189 #endif |
| 4176 } | 4190 } |
| 4177 | 4191 |
| 4178 } // namespace blink | 4192 } // namespace blink |
| OLD | NEW |