Chromium Code Reviews| 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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 53 #include "core/fetch/ImageResource.h" | 53 #include "core/fetch/ImageResource.h" |
| 54 #include "core/html/HTMLDialogElement.h" | 54 #include "core/html/HTMLDialogElement.h" |
| 55 #include "core/html/HTMLFrameElementBase.h" | 55 #include "core/html/HTMLFrameElementBase.h" |
| 56 #include "core/html/HTMLFrameSetElement.h" | 56 #include "core/html/HTMLFrameSetElement.h" |
| 57 #include "core/html/HTMLInputElement.h" | 57 #include "core/html/HTMLInputElement.h" |
| 58 #include "core/loader/FrameLoader.h" | 58 #include "core/loader/FrameLoader.h" |
| 59 #include "core/loader/FrameLoaderClient.h" | 59 #include "core/loader/FrameLoaderClient.h" |
| 60 #include "core/page/AutoscrollController.h" | 60 #include "core/page/AutoscrollController.h" |
| 61 #include "core/page/BackForwardClient.h" | 61 #include "core/page/BackForwardClient.h" |
| 62 #include "core/page/Chrome.h" | 62 #include "core/page/Chrome.h" |
| 63 #include "core/page/ChromeClient.h" | |
| 63 #include "core/page/DragController.h" | 64 #include "core/page/DragController.h" |
| 64 #include "core/page/DragState.h" | 65 #include "core/page/DragState.h" |
| 65 #include "core/page/EditorClient.h" | 66 #include "core/page/EditorClient.h" |
| 66 #include "core/page/FocusController.h" | 67 #include "core/page/FocusController.h" |
| 67 #include "core/frame/Frame.h" | 68 #include "core/frame/Frame.h" |
| 68 #include "core/page/FrameTree.h" | 69 #include "core/page/FrameTree.h" |
| 69 #include "core/frame/FrameView.h" | 70 #include "core/frame/FrameView.h" |
| 70 #include "core/inspector/InspectorController.h" | 71 #include "core/inspector/InspectorController.h" |
| 71 #include "core/page/MouseEventWithHitTestResults.h" | 72 #include "core/page/MouseEventWithHitTestResults.h" |
| 72 #include "core/page/Page.h" | 73 #include "core/page/Page.h" |
| 73 #include "core/page/Settings.h" | 74 #include "core/page/Settings.h" |
| 74 #include "core/page/SpatialNavigation.h" | 75 #include "core/page/SpatialNavigation.h" |
| 75 #include "core/page/TouchAdjustment.h" | 76 #include "core/page/TouchAdjustment.h" |
| 76 #include "core/platform/Cursor.h" | 77 #include "core/platform/Cursor.h" |
| 77 #include "core/platform/ScrollAnimator.h" | 78 #include "core/platform/ScrollAnimator.h" |
| 78 #include "core/platform/Scrollbar.h" | 79 #include "core/platform/Scrollbar.h" |
| 79 #include "core/platform/chromium/ChromiumDataObject.h" | 80 #include "core/platform/chromium/ChromiumDataObject.h" |
| 80 #include "core/platform/graphics/Image.h" | 81 #include "core/platform/graphics/Image.h" |
| 81 #include "core/rendering/HitTestRequest.h" | 82 #include "core/rendering/HitTestRequest.h" |
| 82 #include "core/rendering/HitTestResult.h" | 83 #include "core/rendering/HitTestResult.h" |
| 83 #include "core/rendering/RenderLayer.h" | 84 #include "core/rendering/RenderLayer.h" |
| 84 #include "core/rendering/RenderTextControlSingleLine.h" | 85 #include "core/rendering/RenderTextControlSingleLine.h" |
| 85 #include "core/rendering/RenderView.h" | 86 #include "core/rendering/RenderView.h" |
| 86 #include "core/rendering/RenderWidget.h" | 87 #include "core/rendering/RenderWidget.h" |
| 87 #include "core/rendering/style/CursorList.h" | 88 #include "core/rendering/style/CursorList.h" |
| 89 #include "core/rendering/style/RenderStyle.h" | |
| 88 #include "core/svg/SVGDocument.h" | 90 #include "core/svg/SVGDocument.h" |
| 89 #include "core/svg/SVGElementInstance.h" | 91 #include "core/svg/SVGElementInstance.h" |
| 90 #include "core/svg/SVGUseElement.h" | 92 #include "core/svg/SVGUseElement.h" |
| 91 #include "platform/PlatformGestureEvent.h" | 93 #include "platform/PlatformGestureEvent.h" |
| 92 #include "platform/PlatformKeyboardEvent.h" | 94 #include "platform/PlatformKeyboardEvent.h" |
| 93 #include "platform/PlatformTouchEvent.h" | 95 #include "platform/PlatformTouchEvent.h" |
| 94 #include "platform/PlatformWheelEvent.h" | 96 #include "platform/PlatformWheelEvent.h" |
| 95 #include "platform/WindowsKeyboardCodes.h" | 97 #include "platform/WindowsKeyboardCodes.h" |
| 96 #include "platform/geometry/FloatPoint.h" | 98 #include "platform/geometry/FloatPoint.h" |
| 97 #include "wtf/Assertions.h" | 99 #include "wtf/Assertions.h" |
| (...skipping 3524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3622 Document& doc = node->document(); | 3624 Document& doc = node->document(); |
| 3623 // Record the originating touch document even if it does not have a touch listener. | 3625 // Record the originating touch document even if it does not have a touch listener. |
| 3624 if (freshTouchEvents) { | 3626 if (freshTouchEvents) { |
| 3625 m_originatingTouchPointDocument = &doc; | 3627 m_originatingTouchPointDocument = &doc; |
| 3626 freshTouchEvents = false; | 3628 freshTouchEvents = false; |
| 3627 } | 3629 } |
| 3628 if (!doc.hasTouchEventHandlers()) | 3630 if (!doc.hasTouchEventHandlers()) |
| 3629 continue; | 3631 continue; |
| 3630 m_originatingTouchPointTargets.set(touchPointTargetKey, node); | 3632 m_originatingTouchPointTargets.set(touchPointTargetKey, node); |
| 3631 touchTarget = node; | 3633 touchTarget = node; |
| 3634 | |
| 3635 // FIXME(rbyers): Should really be doing a second hit test that igno res inline elements - crbug.com/319479. | |
| 3636 TouchAction effectiveTouchAction = computeEffectiveTouchAction(node) ; | |
| 3637 if (effectiveTouchAction != TouchActionAuto) { | |
| 3638 m_frame->page()->chrome().client().setTouchAction(point.id(), ef fectiveTouchAction); | |
| 3639 } | |
|
abarth-chromium
2013/11/18 21:16:59
No need for { }
Rick Byers
2013/11/19 21:24:21
Done.
| |
| 3640 | |
| 3632 } else if (pointState == PlatformTouchPoint::TouchReleased || pointState == PlatformTouchPoint::TouchCancelled) { | 3641 } else if (pointState == PlatformTouchPoint::TouchReleased || pointState == PlatformTouchPoint::TouchCancelled) { |
| 3633 // The target should be the original target for this touch, so get i t from the hashmap. As it's a release or cancel | 3642 // The target should be the original target for this touch, so get i t from the hashmap. As it's a release or cancel |
| 3634 // we also remove it from the map. | 3643 // we also remove it from the map. |
| 3635 touchTarget = m_originatingTouchPointTargets.take(touchPointTargetKe y); | 3644 touchTarget = m_originatingTouchPointTargets.take(touchPointTargetKe y); |
| 3636 } else | 3645 } else |
| 3637 // No hittest is performed on move or stationary, since the target i s not allowed to change anyway. | 3646 // No hittest is performed on move or stationary, since the target i s not allowed to change anyway. |
| 3638 touchTarget = m_originatingTouchPointTargets.get(touchPointTargetKey ); | 3647 touchTarget = m_originatingTouchPointTargets.get(touchPointTargetKey ); |
| 3639 | 3648 |
| 3640 if (!touchTarget.get()) | 3649 if (!touchTarget.get()) |
| 3641 continue; | 3650 continue; |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3833 | 3842 |
| 3834 float magnifyDelta = exp(event.deltaY() * 0.002f); | 3843 float magnifyDelta = exp(event.deltaY() * 0.002f); |
| 3835 float newPageScaleFactor = pageScaleFactor * magnifyDelta; | 3844 float newPageScaleFactor = pageScaleFactor * magnifyDelta; |
| 3836 | 3845 |
| 3837 IntPoint anchorAfterCss(anchorBeforeDip); | 3846 IntPoint anchorAfterCss(anchorBeforeDip); |
| 3838 anchorAfterCss.scale(1.f / newPageScaleFactor, 1.f / newPageScaleFactor); | 3847 anchorAfterCss.scale(1.f / newPageScaleFactor, 1.f / newPageScaleFactor); |
| 3839 page->inspectorController().requestPageScaleFactor(newPageScaleFactor, ancho rBeforeCss - toIntSize(anchorAfterCss)); | 3848 page->inspectorController().requestPageScaleFactor(newPageScaleFactor, ancho rBeforeCss - toIntSize(anchorAfterCss)); |
| 3840 return true; | 3849 return true; |
| 3841 } | 3850 } |
| 3842 | 3851 |
| 3852 TouchAction EventHandler::computeEffectiveTouchAction(Node* node) | |
| 3853 { | |
| 3854 // Optimization to minimize risk of this new feature (behavior should be ide ntical | |
| 3855 // since there's no way to get non-default touch-action values). | |
| 3856 if (!RuntimeEnabledFeatures::cssTouchActionEnabled()) | |
| 3857 return TouchActionAuto; | |
| 3858 | |
| 3859 // Start by permitting all actions, then walk the block level elements from | |
| 3860 // the target node up to the nearest scrollable ancestor and exclude any | |
| 3861 // prohibited actions. For now this is trivial, but when we add more types | |
| 3862 // of actions it'll get a little more complex. | |
| 3863 TouchAction effectiveTouchAction = TouchActionAuto; | |
| 3864 | |
| 3865 while (node) { | |
| 3866 // The spec says only block and SVG elements get touch-action. | |
| 3867 // FIXME(rbyers): Add correct support for SVG, crbug.com/247396. | |
| 3868 if (node->isBlockFlowElement()) { | |
| 3869 RenderObject* renderer = node->renderer(); | |
| 3870 if (renderer) { | |
|
abarth-chromium
2013/11/18 21:16:59
You can combine this line with the previous one.
Rick Byers
2013/11/19 21:24:21
Done.
| |
| 3871 TouchAction action = renderer->style()->touchAction(); | |
| 3872 if (action == TouchActionNone) | |
| 3873 effectiveTouchAction = action; | |
| 3874 } | |
| 3875 } | |
| 3876 | |
| 3877 // If we've reached an ancestor that supports a touch action, search no further. | |
| 3878 if (node->renderBox() && node->renderBox()->scrollsOverflow()) | |
| 3879 break; | |
|
abarth-chromium
2013/11/18 21:16:59
I'm not sure if poking the render tree in this way
Rick Byers
2013/11/19 21:24:21
I think this is similar to what scrollNode (here i
| |
| 3880 | |
| 3881 node = node->parentNode(); | |
| 3882 } | |
| 3883 return effectiveTouchAction; | |
| 3884 } | |
| 3885 | |
| 3843 void EventHandler::setLastKnownMousePosition(const PlatformMouseEvent& event) | 3886 void EventHandler::setLastKnownMousePosition(const PlatformMouseEvent& event) |
| 3844 { | 3887 { |
| 3845 m_mousePositionIsUnknown = false; | 3888 m_mousePositionIsUnknown = false; |
| 3846 m_lastKnownMousePosition = event.position(); | 3889 m_lastKnownMousePosition = event.position(); |
| 3847 m_lastKnownMouseGlobalPosition = event.globalPosition(); | 3890 m_lastKnownMouseGlobalPosition = event.globalPosition(); |
| 3848 } | 3891 } |
| 3849 | 3892 |
| 3850 bool EventHandler::passMousePressEventToSubframe(MouseEventWithHitTestResults& m ev, Frame* subframe) | 3893 bool EventHandler::passMousePressEventToSubframe(MouseEventWithHitTestResults& m ev, Frame* subframe) |
| 3851 { | 3894 { |
| 3852 // If we're clicking into a frame that is selected, the frame will appear | 3895 // If we're clicking into a frame that is selected, the frame will appear |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3918 unsigned EventHandler::accessKeyModifiers() | 3961 unsigned EventHandler::accessKeyModifiers() |
| 3919 { | 3962 { |
| 3920 #if OS(MACOSX) | 3963 #if OS(MACOSX) |
| 3921 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; | 3964 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; |
| 3922 #else | 3965 #else |
| 3923 return PlatformEvent::AltKey; | 3966 return PlatformEvent::AltKey; |
| 3924 #endif | 3967 #endif |
| 3925 } | 3968 } |
| 3926 | 3969 |
| 3927 } // namespace WebCore | 3970 } // namespace WebCore |
| OLD | NEW |