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 2565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2576 } else if (gestureEvent.type() == PlatformEvent::GestureTap) { | 2576 } else if (gestureEvent.type() == PlatformEvent::GestureTap) { |
2577 // If the Tap is received very shortly after ShowPress, we want to | 2577 // If the Tap is received very shortly after ShowPress, we want to |
2578 // delay clearing of the active state so that it's visible to the user | 2578 // delay clearing of the active state so that it's visible to the user |
2579 // for at least a couple of frames. | 2579 // for at least a couple of frames. |
2580 activeInterval = WTF::currentTime() - m_lastShowPressTimestamp; | 2580 activeInterval = WTF::currentTime() - m_lastShowPressTimestamp; |
2581 shouldKeepActiveForMinInterval = m_lastShowPressTimestamp && activeInter
val < minimumActiveInterval; | 2581 shouldKeepActiveForMinInterval = m_lastShowPressTimestamp && activeInter
val < minimumActiveInterval; |
2582 if (shouldKeepActiveForMinInterval) | 2582 if (shouldKeepActiveForMinInterval) |
2583 hitType |= HitTestRequest::ReadOnly; | 2583 hitType |= HitTestRequest::ReadOnly; |
2584 } | 2584 } |
2585 | 2585 |
| 2586 GestureEventWithHitTestResults eventWithHitTestResults = hitTestResultForGes
tureEvent(gestureEvent, hitType); |
| 2587 // Now apply hover/active state to the final target. |
| 2588 // FIXME: This is supposed to send mouseenter/mouseleave events, but doesn't
because we |
| 2589 // aren't passing a PlatformMouseEvent. |
| 2590 HitTestRequest request(hitType | HitTestRequest::AllowChildFrameContent); |
| 2591 if (!request.readOnly()) |
| 2592 m_frame->document()->updateHoverActiveState(request, eventWithHitTestRes
ults.hitTestResult().innerElement()); |
| 2593 |
| 2594 if (shouldKeepActiveForMinInterval) { |
| 2595 m_lastDeferredTapElement = eventWithHitTestResults.hitTestResult().inner
Element(); |
| 2596 m_activeIntervalTimer.startOneShot(minimumActiveInterval - activeInterva
l, FROM_HERE); |
| 2597 } |
| 2598 |
| 2599 return eventWithHitTestResults; |
| 2600 } |
| 2601 |
| 2602 GestureEventWithHitTestResults EventHandler::hitTestResultForGestureEvent(const
PlatformGestureEvent& gestureEvent, HitTestRequest::HitTestRequestType hitType) |
| 2603 { |
2586 // Perform the rect-based hit-test (or point-based if adjustment is disabled
). Note that | 2604 // Perform the rect-based hit-test (or point-based if adjustment is disabled
). Note that |
2587 // we don't yet apply hover/active state here because we need to resolve tou
ch adjustment | 2605 // we don't yet apply hover/active state here because we need to resolve tou
ch adjustment |
2588 // first so that we apply hover/active it to the final adjusted node. | 2606 // first so that we apply hover/active it to the final adjusted node. |
2589 IntPoint hitTestPoint = m_frame->view()->windowToContents(gestureEvent.posit
ion()); | 2607 IntPoint hitTestPoint = m_frame->view()->windowToContents(gestureEvent.posit
ion()); |
2590 LayoutSize padding; | 2608 LayoutSize padding; |
2591 if (shouldApplyTouchAdjustment(gestureEvent)) { | 2609 if (shouldApplyTouchAdjustment(gestureEvent)) { |
2592 padding = gestureEvent.area(); | 2610 padding = gestureEvent.area(); |
2593 padding.scale(1.f / 2); | 2611 padding.scale(1.f / 2); |
2594 } | 2612 } |
2595 HitTestResult hitTestResult = hitTestResultAtPoint(hitTestPoint, hitType | H
itTestRequest::ReadOnly, padding); | 2613 HitTestResult hitTestResult = hitTestResultAtPoint(hitTestPoint, hitType | H
itTestRequest::ReadOnly, padding); |
(...skipping 11 matching lines...) Expand all Loading... |
2607 LocalFrame* hitFrame = hitTestResult.innerNodeFrame(); | 2625 LocalFrame* hitFrame = hitTestResult.innerNodeFrame(); |
2608 if (!hitFrame) | 2626 if (!hitFrame) |
2609 hitFrame = m_frame; | 2627 hitFrame = m_frame; |
2610 hitTestResult = hitTestResultInFrame(hitFrame, hitFrame->view()->windowT
oContents(adjustedEvent.position()), hitType | HitTestRequest::ReadOnly); | 2628 hitTestResult = hitTestResultInFrame(hitFrame, hitFrame->view()->windowT
oContents(adjustedEvent.position()), hitType | HitTestRequest::ReadOnly); |
2611 } | 2629 } |
2612 | 2630 |
2613 // If we did a rect-based hit test it must be resolved to the best single no
de by now to | 2631 // If we did a rect-based hit test it must be resolved to the best single no
de by now to |
2614 // ensure consumers don't accidentally use one of the other candidates. | 2632 // ensure consumers don't accidentally use one of the other candidates. |
2615 ASSERT(!hitTestResult.isRectBasedTest()); | 2633 ASSERT(!hitTestResult.isRectBasedTest()); |
2616 | 2634 |
2617 // Now apply hover/active state to the final target. | |
2618 // FIXME: This is supposed to send mouseenter/mouseleave events, but doesn't
because we | |
2619 // aren't passing a PlatformMouseEvent. | |
2620 HitTestRequest request(hitType | HitTestRequest::AllowChildFrameContent); | |
2621 if (!request.readOnly()) | |
2622 m_frame->document()->updateHoverActiveState(request, hitTestResult.inner
Element()); | |
2623 | |
2624 if (shouldKeepActiveForMinInterval) { | |
2625 m_lastDeferredTapElement = hitTestResult.innerElement(); | |
2626 m_activeIntervalTimer.startOneShot(minimumActiveInterval - activeInterva
l, FROM_HERE); | |
2627 } | |
2628 | |
2629 return GestureEventWithHitTestResults(adjustedEvent, hitTestResult); | 2635 return GestureEventWithHitTestResults(adjustedEvent, hitTestResult); |
2630 } | 2636 } |
2631 | 2637 |
2632 HitTestRequest::HitTestRequestType EventHandler::getHitTypeForGestureType(Platfo
rmEvent::Type type) | 2638 HitTestRequest::HitTestRequestType EventHandler::getHitTypeForGestureType(Platfo
rmEvent::Type type) |
2633 { | 2639 { |
2634 HitTestRequest::HitTestRequestType hitType = HitTestRequest::TouchEvent; | 2640 HitTestRequest::HitTestRequestType hitType = HitTestRequest::TouchEvent; |
2635 switch (type) { | 2641 switch (type) { |
2636 case PlatformEvent::GestureShowPress: | 2642 case PlatformEvent::GestureShowPress: |
2637 case PlatformEvent::GestureTapUnconfirmed: | 2643 case PlatformEvent::GestureTapUnconfirmed: |
2638 return hitType | HitTestRequest::Active; | 2644 return hitType | HitTestRequest::Active; |
(...skipping 1240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3879 unsigned EventHandler::accessKeyModifiers() | 3885 unsigned EventHandler::accessKeyModifiers() |
3880 { | 3886 { |
3881 #if OS(MACOSX) | 3887 #if OS(MACOSX) |
3882 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; | 3888 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; |
3883 #else | 3889 #else |
3884 return PlatformEvent::AltKey; | 3890 return PlatformEvent::AltKey; |
3885 #endif | 3891 #endif |
3886 } | 3892 } |
3887 | 3893 |
3888 } // namespace blink | 3894 } // namespace blink |
OLD | NEW |