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 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 m_capturesDragging = false; | 367 m_capturesDragging = false; |
368 m_capturingMouseEventsNode = nullptr; | 368 m_capturingMouseEventsNode = nullptr; |
369 m_previousWheelScrolledNode = nullptr; | 369 m_previousWheelScrolledNode = nullptr; |
370 m_targetForTouchID.clear(); | 370 m_targetForTouchID.clear(); |
371 m_touchSequenceDocument.clear(); | 371 m_touchSequenceDocument.clear(); |
372 m_touchSequenceUserGestureToken.clear(); | 372 m_touchSequenceUserGestureToken.clear(); |
373 clearGestureScrollState(); | 373 clearGestureScrollState(); |
374 m_lastGestureScrollOverWidget = false; | 374 m_lastGestureScrollOverWidget = false; |
375 m_scrollbarHandlingScrollGesture = nullptr; | 375 m_scrollbarHandlingScrollGesture = nullptr; |
376 m_touchPressed = false; | 376 m_touchPressed = false; |
377 m_pointerIdManager.clear(); | 377 m_pointerEventFactory.clear(); |
378 m_preventMouseEventForPointerTypeMouse = false; | 378 m_preventMouseEventForPointerTypeMouse = false; |
379 m_inPointerCanceledState = false; | 379 m_inPointerCanceledState = false; |
380 m_mouseDownMayStartDrag = false; | 380 m_mouseDownMayStartDrag = false; |
381 m_lastShowPressTimestamp = 0; | 381 m_lastShowPressTimestamp = 0; |
382 m_lastDeferredTapElement = nullptr; | 382 m_lastDeferredTapElement = nullptr; |
383 m_eventHandlerWillResetCapturingMouseEventsNode = false; | 383 m_eventHandlerWillResetCapturingMouseEventsNode = false; |
384 m_mouseDownMayStartAutoscroll = false; | 384 m_mouseDownMayStartAutoscroll = false; |
385 m_svgPan = false; | 385 m_svgPan = false; |
386 m_mouseDownPos = IntPoint(); | 386 m_mouseDownPos = IntPoint(); |
387 m_mouseDownTimestamp = 0; | 387 m_mouseDownTimestamp = 0; |
(...skipping 1223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1611 if (lastNodeUnderMouse != m_nodeUnderMouse) | 1611 if (lastNodeUnderMouse != m_nodeUnderMouse) |
1612 sendMouseEventsForNodeTransition(lastNodeUnderMouse.get(), m_nodeUnderMo
use.get(), mouseEvent); | 1612 sendMouseEventsForNodeTransition(lastNodeUnderMouse.get(), m_nodeUnderMo
use.get(), mouseEvent); |
1613 } | 1613 } |
1614 | 1614 |
1615 bool EventHandler::dispatchPointerEvent(Node* target, const AtomicString& eventT
ype, | 1615 bool EventHandler::dispatchPointerEvent(Node* target, const AtomicString& eventT
ype, |
1616 const PlatformMouseEvent& mouseEvent, Node* relatedTarget) | 1616 const PlatformMouseEvent& mouseEvent, Node* relatedTarget) |
1617 { | 1617 { |
1618 if (!RuntimeEnabledFeatures::pointerEventEnabled()) | 1618 if (!RuntimeEnabledFeatures::pointerEventEnabled()) |
1619 return false; | 1619 return false; |
1620 | 1620 |
1621 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = PointerEvent::create(eventTy
pe, true, | 1621 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.create
(eventType, |
1622 mouseEvent, relatedTarget, m_frame->document()->domWindow()); | 1622 mouseEvent, relatedTarget, m_frame->document()->domWindow()); |
1623 target->dispatchEvent(pointerEvent.get()); | 1623 target->dispatchEvent(pointerEvent.get()); |
1624 return pointerEvent->defaultPrevented() || pointerEvent->defaultHandled(); | 1624 return pointerEvent->defaultPrevented() || pointerEvent->defaultHandled(); |
1625 } | 1625 } |
1626 | 1626 |
1627 void EventHandler::sendMouseEventsForNodeTransition(Node* exitedNode, Node* ente
redNode, | 1627 void EventHandler::sendMouseEventsForNodeTransition(Node* exitedNode, Node* ente
redNode, |
1628 const PlatformMouseEvent& mouseEvent) | 1628 const PlatformMouseEvent& mouseEvent) |
1629 { | 1629 { |
1630 ASSERT(exitedNode != enteredNode); | 1630 ASSERT(exitedNode != enteredNode); |
1631 | 1631 |
(...skipping 2015 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3647 void EventHandler::dispatchPointerEvents(const PlatformTouchEvent& event, | 3647 void EventHandler::dispatchPointerEvents(const PlatformTouchEvent& event, |
3648 WillBeHeapVector<TouchInfo>& touchInfos) | 3648 WillBeHeapVector<TouchInfo>& touchInfos) |
3649 { | 3649 { |
3650 if (!RuntimeEnabledFeatures::pointerEventEnabled()) | 3650 if (!RuntimeEnabledFeatures::pointerEventEnabled()) |
3651 return; | 3651 return; |
3652 | 3652 |
3653 // Iterate through the touch points, sending PointerEvents to the targets as
required. | 3653 // Iterate through the touch points, sending PointerEvents to the targets as
required. |
3654 for (unsigned i = 0; i < touchInfos.size(); ++i) { | 3654 for (unsigned i = 0; i < touchInfos.size(); ++i) { |
3655 TouchInfo& touchInfo = touchInfos[i]; | 3655 TouchInfo& touchInfo = touchInfos[i]; |
3656 const PlatformTouchPoint& touchPoint = touchInfo.point; | 3656 const PlatformTouchPoint& touchPoint = touchInfo.point; |
3657 const unsigned& pointerId = touchPoint.id(); | |
3658 const PlatformTouchPoint::State pointState = touchPoint.state(); | 3657 const PlatformTouchPoint::State pointState = touchPoint.state(); |
3659 | 3658 |
| 3659 |
3660 if (pointState == PlatformTouchPoint::TouchStationary || !touchInfo.know
nTarget) | 3660 if (pointState == PlatformTouchPoint::TouchStationary || !touchInfo.know
nTarget) |
3661 continue; | 3661 continue; |
3662 | 3662 |
3663 bool pointerReleasedOrCancelled = pointState == PlatformTouchPoint::Touc
hReleased | 3663 bool pointerReleasedOrCancelled = pointState == PlatformTouchPoint::Touc
hReleased |
3664 || pointState == PlatformTouchPoint::TouchCancelled; | 3664 || pointState == PlatformTouchPoint::TouchCancelled; |
3665 const WebPointerProperties::PointerType pointerType = touchPoint.pointer
Properties().pointerType; | |
3666 | 3665 |
3667 if (pointState == PlatformTouchPoint::TouchPressed) | 3666 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.cr
eate( |
3668 m_pointerIdManager.add(pointerType, pointerId); | |
3669 | |
3670 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = PointerEvent::create( | |
3671 pointerEventNameForTouchPointState(pointState), | 3667 pointerEventNameForTouchPointState(pointState), |
3672 m_pointerIdManager.isPrimary(pointerType, pointerId), | |
3673 touchPoint, event.modifiers(), | 3668 touchPoint, event.modifiers(), |
3674 touchInfo.adjustedRadius.width(), touchInfo.adjustedRadius.height(), | 3669 touchInfo.adjustedRadius.width(), touchInfo.adjustedRadius.height(), |
3675 touchInfo.adjustedPagePoint.x(), touchInfo.adjustedPagePoint.y()); | 3670 touchInfo.adjustedPagePoint.x(), touchInfo.adjustedPagePoint.y()); |
3676 | 3671 |
3677 touchInfo.touchTarget->dispatchEvent(pointerEvent.get()); | 3672 touchInfo.touchTarget->dispatchEvent(pointerEvent.get()); |
3678 touchInfo.consumed = pointerEvent->defaultPrevented() || pointerEvent->d
efaultHandled(); | 3673 touchInfo.consumed = pointerEvent->defaultPrevented() || pointerEvent->d
efaultHandled(); |
3679 | 3674 |
3680 // Remove the released/cancelled id at the end to correctly determine pr
imary id above. | 3675 // Remove the released/cancelled id at the end to correctly determine pr
imary id above. |
3681 if (pointerReleasedOrCancelled) | 3676 if (pointerReleasedOrCancelled) |
3682 m_pointerIdManager.remove(pointerType, pointerId); | 3677 m_pointerEventFactory.remove(pointerEvent); |
3683 } | 3678 } |
3684 } | 3679 } |
3685 | 3680 |
3686 void EventHandler::sendPointerCancels(WillBeHeapVector<TouchInfo>& touchInfos) | 3681 void EventHandler::sendPointerCancels(WillBeHeapVector<TouchInfo>& touchInfos) |
3687 { | 3682 { |
3688 if (!RuntimeEnabledFeatures::pointerEventEnabled()) | 3683 if (!RuntimeEnabledFeatures::pointerEventEnabled()) |
3689 return; | 3684 return; |
3690 | 3685 |
3691 for (unsigned i = 0; i < touchInfos.size(); ++i) { | 3686 for (unsigned i = 0; i < touchInfos.size(); ++i) { |
3692 TouchInfo& touchInfo = touchInfos[i]; | 3687 TouchInfo& touchInfo = touchInfos[i]; |
3693 const PlatformTouchPoint& point = touchInfo.point; | 3688 const PlatformTouchPoint& point = touchInfo.point; |
3694 const unsigned& pointerId = point.id(); | |
3695 const PlatformTouchPoint::State pointState = point.state(); | 3689 const PlatformTouchPoint::State pointState = point.state(); |
3696 | 3690 |
3697 if (pointState == PlatformTouchPoint::TouchReleased | 3691 if (pointState == PlatformTouchPoint::TouchReleased |
3698 || pointState == PlatformTouchPoint::TouchCancelled) | 3692 || pointState == PlatformTouchPoint::TouchCancelled) |
3699 continue; | 3693 continue; |
3700 | 3694 |
3701 PointerEventInit pointerEventInit; | 3695 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.cr
eatePointerCancel(point); |
3702 pointerEventInit.setPointerId(pointerId); | |
3703 pointerEventInit.setBubbles(true); | |
3704 pointerEventInit.setCancelable(false); | |
3705 | |
3706 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = PointerEvent::create( | |
3707 EventTypeNames::pointercancel, pointerEventInit); | |
3708 touchInfo.touchTarget->dispatchEvent(pointerEvent.get()); | 3696 touchInfo.touchTarget->dispatchEvent(pointerEvent.get()); |
3709 | 3697 |
3710 m_pointerIdManager.remove(WebPointerProperties::PointerType::Touch, poin
terId); | 3698 m_pointerEventFactory.remove(pointerEvent); |
3711 } | 3699 } |
3712 } | 3700 } |
3713 | 3701 |
3714 namespace { | 3702 namespace { |
3715 | 3703 |
3716 // Defining this class type local to dispatchTouchEvents() and annotating | 3704 // Defining this class type local to dispatchTouchEvents() and annotating |
3717 // it with STACK_ALLOCATED(), runs into MSVC(VS 2013)'s C4822 warning | 3705 // it with STACK_ALLOCATED(), runs into MSVC(VS 2013)'s C4822 warning |
3718 // that the local class doesn't provide a local definition for 'operator new'. | 3706 // that the local class doesn't provide a local definition for 'operator new'. |
3719 // Which it intentionally doesn't and shouldn't. | 3707 // Which it intentionally doesn't and shouldn't. |
3720 // | 3708 // |
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4088 PlatformEvent::Modifiers EventHandler::accessKeyModifiers() | 4076 PlatformEvent::Modifiers EventHandler::accessKeyModifiers() |
4089 { | 4077 { |
4090 #if OS(MACOSX) | 4078 #if OS(MACOSX) |
4091 return static_cast<PlatformEvent::Modifiers>(PlatformEvent::CtrlKey | Platfo
rmEvent::AltKey); | 4079 return static_cast<PlatformEvent::Modifiers>(PlatformEvent::CtrlKey | Platfo
rmEvent::AltKey); |
4092 #else | 4080 #else |
4093 return PlatformEvent::AltKey; | 4081 return PlatformEvent::AltKey; |
4094 #endif | 4082 #endif |
4095 } | 4083 } |
4096 | 4084 |
4097 } // namespace blink | 4085 } // namespace blink |
OLD | NEW |