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 * | 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 | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 2396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2407 { | 2407 { |
2408 // We don't use DoubleTap at the moment, it's mostly redundant with tap sinc
e tap now contains | 2408 // We don't use DoubleTap at the moment, it's mostly redundant with tap sinc
e tap now contains |
2409 // a tap count. FIXME: We should probably remove GestureDoubleTap (http://wk
b.ug/93045). | 2409 // a tap count. FIXME: We should probably remove GestureDoubleTap (http://wk
b.ug/93045). |
2410 if (gestureEvent.type() == PlatformEvent::GestureDoubleTap) | 2410 if (gestureEvent.type() == PlatformEvent::GestureDoubleTap) |
2411 return false; | 2411 return false; |
2412 | 2412 |
2413 Node* eventTarget = 0; | 2413 Node* eventTarget = 0; |
2414 if (gestureEvent.type() == PlatformEvent::GestureScrollEnd || gestureEvent.t
ype() == PlatformEvent::GestureScrollUpdate) | 2414 if (gestureEvent.type() == PlatformEvent::GestureScrollEnd || gestureEvent.t
ype() == PlatformEvent::GestureScrollUpdate) |
2415 eventTarget = m_scrollGestureHandlingNode.get(); | 2415 eventTarget = m_scrollGestureHandlingNode.get(); |
2416 | 2416 |
| 2417 IntPoint adjustedPoint = gestureEvent.position(); |
2417 HitTestRequest::HitTestRequestType hitType = HitTestRequest::TouchEvent; | 2418 HitTestRequest::HitTestRequestType hitType = HitTestRequest::TouchEvent; |
2418 if (gestureEvent.type() == PlatformEvent::GestureTapDown) | 2419 if (gestureEvent.type() == PlatformEvent::GestureTapDown) { |
| 2420 #if ENABLE(TOUCH_ADJUSTMENT) |
| 2421 if (!gestureEvent.area().isEmpty()) |
| 2422 adjustGesturePosition(gestureEvent, adjustedPoint); |
| 2423 #endif |
2419 hitType |= HitTestRequest::Active; | 2424 hitType |= HitTestRequest::Active; |
2420 else if (gestureEvent.type() == PlatformEvent::GestureTap || gestureEvent.ty
pe() == PlatformEvent::GestureTapDownCancel) | 2425 } else if (gestureEvent.type() == PlatformEvent::GestureTap || gestureEvent.
type() == PlatformEvent::GestureTapDownCancel) |
2421 hitType |= HitTestRequest::Release; | 2426 hitType |= HitTestRequest::Release; |
2422 else | 2427 else |
2423 hitType |= HitTestRequest::Active | HitTestRequest::ReadOnly; | 2428 hitType |= HitTestRequest::Active | HitTestRequest::ReadOnly; |
2424 | 2429 |
2425 if (!shouldGesturesTriggerActive()) | 2430 if (!shouldGesturesTriggerActive()) |
2426 hitType |= HitTestRequest::ReadOnly; | 2431 hitType |= HitTestRequest::ReadOnly; |
2427 | 2432 |
2428 if (!eventTarget || !(hitType & HitTestRequest::ReadOnly)) { | 2433 if (!eventTarget || !(hitType & HitTestRequest::ReadOnly)) { |
2429 IntPoint hitTestPoint = m_frame->view()->windowToContents(gestureEvent.p
osition()); | 2434 IntPoint hitTestPoint = m_frame->view()->windowToContents(adjustedPoint)
; |
2430 HitTestResult result = hitTestResultAtPoint(hitTestPoint, false, false,
DontHitTestScrollbars, hitType); | 2435 HitTestResult result = hitTestResultAtPoint(hitTestPoint, false, false,
DontHitTestScrollbars, hitType); |
2431 eventTarget = result.targetNode(); | 2436 eventTarget = result.targetNode(); |
2432 } | 2437 } |
2433 | 2438 |
2434 if (eventTarget) { | 2439 if (eventTarget) { |
2435 bool eventSwallowed = eventTarget->dispatchGestureEvent(gestureEvent); | 2440 bool eventSwallowed = eventTarget->dispatchGestureEvent(gestureEvent); |
2436 | 2441 |
2437 if (gestureEvent.type() == PlatformEvent::GestureScrollBegin) { | 2442 if (gestureEvent.type() == PlatformEvent::GestureScrollBegin) { |
2438 if (eventSwallowed) | 2443 if (eventSwallowed) |
2439 m_scrollGestureHandlingNode = eventTarget; | 2444 m_scrollGestureHandlingNode = eventTarget; |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2567 IntRect touchRect(touchCenter - touchRadius, touchRadius + touchRadius); | 2572 IntRect touchRect(touchCenter - touchRadius, touchRadius + touchRadius); |
2568 RefPtr<StaticHashSetNodeList> nodeList = StaticHashSetNodeList::adopt(result
.rectBasedTestResult()); | 2573 RefPtr<StaticHashSetNodeList> nodeList = StaticHashSetNodeList::adopt(result
.rectBasedTestResult()); |
2569 return findBestZoomableArea(targetNode, targetArea, touchCenter, touchRect,
*nodeList.get()); | 2574 return findBestZoomableArea(targetNode, targetArea, touchCenter, touchRect,
*nodeList.get()); |
2570 } | 2575 } |
2571 | 2576 |
2572 bool EventHandler::adjustGesturePosition(const PlatformGestureEvent& gestureEven
t, IntPoint& adjustedPoint) | 2577 bool EventHandler::adjustGesturePosition(const PlatformGestureEvent& gestureEven
t, IntPoint& adjustedPoint) |
2573 { | 2578 { |
2574 Node* targetNode = 0; | 2579 Node* targetNode = 0; |
2575 switch (gestureEvent.type()) { | 2580 switch (gestureEvent.type()) { |
2576 case PlatformEvent::GestureTap: | 2581 case PlatformEvent::GestureTap: |
| 2582 case PlatformEvent::GestureTapDown: |
2577 bestClickableNodeForTouchPoint(gestureEvent.position(), IntSize(gestureE
vent.area().width() / 2, gestureEvent.area().height() / 2), adjustedPoint, targe
tNode); | 2583 bestClickableNodeForTouchPoint(gestureEvent.position(), IntSize(gestureE
vent.area().width() / 2, gestureEvent.area().height() / 2), adjustedPoint, targe
tNode); |
2578 break; | 2584 break; |
2579 case PlatformEvent::GestureLongPress: | 2585 case PlatformEvent::GestureLongPress: |
2580 bestContextMenuNodeForTouchPoint(gestureEvent.position(), IntSize(gestur
eEvent.area().width() / 2, gestureEvent.area().height() / 2), adjustedPoint, tar
getNode); | 2586 bestContextMenuNodeForTouchPoint(gestureEvent.position(), IntSize(gestur
eEvent.area().width() / 2, gestureEvent.area().height() / 2), adjustedPoint, tar
getNode); |
2581 break; | 2587 break; |
2582 default: | 2588 default: |
2583 // FIXME: Implement handling for other types as needed. | 2589 // FIXME: Implement handling for other types as needed. |
2584 ASSERT_NOT_REACHED(); | 2590 ASSERT_NOT_REACHED(); |
2585 } | 2591 } |
2586 return targetNode; | 2592 return targetNode; |
(...skipping 1145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3732 if (eventType == PlatformEvent::MouseMoved && !m_touchPressed) | 3738 if (eventType == PlatformEvent::MouseMoved && !m_touchPressed) |
3733 return false; | 3739 return false; |
3734 | 3740 |
3735 SyntheticSingleTouchEvent touchEvent(event); | 3741 SyntheticSingleTouchEvent touchEvent(event); |
3736 return handleTouchEvent(touchEvent); | 3742 return handleTouchEvent(touchEvent); |
3737 } | 3743 } |
3738 | 3744 |
3739 #endif | 3745 #endif |
3740 | 3746 |
3741 } | 3747 } |
OLD | NEW |