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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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/html/HTMLDialogElement.h" | 58 #include "core/html/HTMLDialogElement.h" |
59 #include "core/html/HTMLFrameElementBase.h" | 59 #include "core/html/HTMLFrameElementBase.h" |
60 #include "core/html/HTMLFrameSetElement.h" | 60 #include "core/html/HTMLFrameSetElement.h" |
61 #include "core/html/HTMLInputElement.h" | 61 #include "core/html/HTMLInputElement.h" |
62 #include "core/inspector/InspectorController.h" | 62 #include "core/inspector/InspectorController.h" |
63 #include "core/layout/HitTestRequest.h" | 63 #include "core/layout/HitTestRequest.h" |
64 #include "core/layout/HitTestResult.h" | 64 #include "core/layout/HitTestResult.h" |
| 65 #include "core/layout/Layer.h" |
65 #include "core/loader/FrameLoader.h" | 66 #include "core/loader/FrameLoader.h" |
66 #include "core/loader/FrameLoaderClient.h" | 67 #include "core/loader/FrameLoaderClient.h" |
67 #include "core/page/AutoscrollController.h" | 68 #include "core/page/AutoscrollController.h" |
68 #include "core/page/Chrome.h" | 69 #include "core/page/Chrome.h" |
69 #include "core/page/ChromeClient.h" | 70 #include "core/page/ChromeClient.h" |
70 #include "core/page/DragController.h" | 71 #include "core/page/DragController.h" |
71 #include "core/page/DragState.h" | 72 #include "core/page/DragState.h" |
72 #include "core/page/EditorClient.h" | 73 #include "core/page/EditorClient.h" |
73 #include "core/page/FocusController.h" | 74 #include "core/page/FocusController.h" |
74 #include "core/page/FrameTree.h" | 75 #include "core/page/FrameTree.h" |
75 #include "core/page/Page.h" | 76 #include "core/page/Page.h" |
76 #include "core/page/SpatialNavigation.h" | 77 #include "core/page/SpatialNavigation.h" |
77 #include "core/page/TouchAdjustment.h" | 78 #include "core/page/TouchAdjustment.h" |
78 #include "core/rendering/RenderLayer.h" | |
79 #include "core/rendering/RenderPart.h" | 79 #include "core/rendering/RenderPart.h" |
80 #include "core/rendering/RenderTextControlSingleLine.h" | 80 #include "core/rendering/RenderTextControlSingleLine.h" |
81 #include "core/rendering/RenderView.h" | 81 #include "core/rendering/RenderView.h" |
82 #include "core/rendering/style/RenderStyle.h" | 82 #include "core/rendering/style/RenderStyle.h" |
83 #include "core/svg/SVGDocumentExtensions.h" | 83 #include "core/svg/SVGDocumentExtensions.h" |
84 #include "platform/PlatformGestureEvent.h" | 84 #include "platform/PlatformGestureEvent.h" |
85 #include "platform/PlatformKeyboardEvent.h" | 85 #include "platform/PlatformKeyboardEvent.h" |
86 #include "platform/PlatformTouchEvent.h" | 86 #include "platform/PlatformTouchEvent.h" |
87 #include "platform/PlatformWheelEvent.h" | 87 #include "platform/PlatformWheelEvent.h" |
88 #include "platform/RuntimeEnabledFeatures.h" | 88 #include "platform/RuntimeEnabledFeatures.h" |
(...skipping 1103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1192 OptionalCursor EventHandler::selectAutoCursor(const HitTestResult& result, Node*
node, const Cursor& iBeam) | 1192 OptionalCursor EventHandler::selectAutoCursor(const HitTestResult& result, Node*
node, const Cursor& iBeam) |
1193 { | 1193 { |
1194 bool editable = (node && node->hasEditableStyle()); | 1194 bool editable = (node && node->hasEditableStyle()); |
1195 | 1195 |
1196 if (useHandCursor(node, result.isOverLink())) | 1196 if (useHandCursor(node, result.isOverLink())) |
1197 return handCursor(); | 1197 return handCursor(); |
1198 | 1198 |
1199 bool inResizer = false; | 1199 bool inResizer = false; |
1200 RenderObject* renderer = node ? node->renderer() : nullptr; | 1200 RenderObject* renderer = node ? node->renderer() : nullptr; |
1201 if (renderer && m_frame->view()) { | 1201 if (renderer && m_frame->view()) { |
1202 RenderLayer* layer = renderer->enclosingLayer(); | 1202 Layer* layer = renderer->enclosingLayer(); |
1203 inResizer = layer->scrollableArea() && layer->scrollableArea()->isPointI
nResizeControl(result.roundedPointInMainFrame(), ResizerForPointer); | 1203 inResizer = layer->scrollableArea() && layer->scrollableArea()->isPointI
nResizeControl(result.roundedPointInMainFrame(), ResizerForPointer); |
1204 } | 1204 } |
1205 | 1205 |
1206 // During selection, use an I-beam no matter what we're over. | 1206 // During selection, use an I-beam no matter what we're over. |
1207 // If a drag may be starting or we're capturing mouse events for a particula
r node, don't treat this as a selection. | 1207 // If a drag may be starting or we're capturing mouse events for a particula
r node, don't treat this as a selection. |
1208 if (m_mousePressed && m_mouseDownMayStartSelect | 1208 if (m_mousePressed && m_mouseDownMayStartSelect |
1209 && !m_mouseDownMayStartDrag | 1209 && !m_mouseDownMayStartDrag |
1210 && m_frame->selection().isCaretOrRange() | 1210 && m_frame->selection().isCaretOrRange() |
1211 && !m_capturingMouseEventsNode) { | 1211 && !m_capturingMouseEventsNode) { |
1212 return iBeam; | 1212 return iBeam; |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1287 // away from the current page (e.g. the click was on a hyperlink). See <
rdar://problem/6095023>. | 1287 // away from the current page (e.g. the click was on a hyperlink). See <
rdar://problem/6095023>. |
1288 invalidateClick(); | 1288 invalidateClick(); |
1289 return true; | 1289 return true; |
1290 } | 1290 } |
1291 #endif | 1291 #endif |
1292 | 1292 |
1293 m_clickCount = mouseEvent.clickCount(); | 1293 m_clickCount = mouseEvent.clickCount(); |
1294 m_clickNode = mev.innerNode()->isTextNode() ? NodeRenderingTraversal::paren
t(*mev.innerNode()) : mev.innerNode(); | 1294 m_clickNode = mev.innerNode()->isTextNode() ? NodeRenderingTraversal::paren
t(*mev.innerNode()) : mev.innerNode(); |
1295 | 1295 |
1296 if (FrameView* view = m_frame->view()) { | 1296 if (FrameView* view = m_frame->view()) { |
1297 RenderLayer* layer = mev.innerNode()->renderer() ? mev.innerNode()->rend
erer()->enclosingLayer() : nullptr; | 1297 Layer* layer = mev.innerNode()->renderer() ? mev.innerNode()->renderer()
->enclosingLayer() : nullptr; |
1298 IntPoint p = view->windowToContents(mouseEvent.position()); | 1298 IntPoint p = view->windowToContents(mouseEvent.position()); |
1299 if (layer && layer->scrollableArea() && layer->scrollableArea()->isPoint
InResizeControl(p, ResizerForPointer)) { | 1299 if (layer && layer->scrollableArea() && layer->scrollableArea()->isPoint
InResizeControl(p, ResizerForPointer)) { |
1300 m_resizeScrollableArea = layer->scrollableArea(); | 1300 m_resizeScrollableArea = layer->scrollableArea(); |
1301 m_resizeScrollableArea->setInResizeMode(true); | 1301 m_resizeScrollableArea->setInResizeMode(true); |
1302 m_offsetFromResizeCorner = LayoutSize(m_resizeScrollableArea->offset
FromResizeCorner(p)); | 1302 m_offsetFromResizeCorner = LayoutSize(m_resizeScrollableArea->offset
FromResizeCorner(p)); |
1303 invalidateClick(); | 1303 invalidateClick(); |
1304 return true; | 1304 return true; |
1305 } | 1305 } |
1306 } | 1306 } |
1307 | 1307 |
(...skipping 29 matching lines...) Expand all Loading... |
1337 | 1337 |
1338 if (passMousePressEventToScrollbar(mev)) | 1338 if (passMousePressEventToScrollbar(mev)) |
1339 swallowEvent = true; | 1339 swallowEvent = true; |
1340 else | 1340 else |
1341 swallowEvent = handleMousePressEvent(mev); | 1341 swallowEvent = handleMousePressEvent(mev); |
1342 } | 1342 } |
1343 | 1343 |
1344 return swallowEvent; | 1344 return swallowEvent; |
1345 } | 1345 } |
1346 | 1346 |
1347 static RenderLayer* layerForNode(Node* node) | 1347 static Layer* layerForNode(Node* node) |
1348 { | 1348 { |
1349 if (!node) | 1349 if (!node) |
1350 return nullptr; | 1350 return nullptr; |
1351 | 1351 |
1352 RenderObject* renderer = node->renderer(); | 1352 RenderObject* renderer = node->renderer(); |
1353 if (!renderer) | 1353 if (!renderer) |
1354 return nullptr; | 1354 return nullptr; |
1355 | 1355 |
1356 RenderLayer* layer = renderer->enclosingLayer(); | 1356 Layer* layer = renderer->enclosingLayer(); |
1357 if (!layer) | 1357 if (!layer) |
1358 return nullptr; | 1358 return nullptr; |
1359 | 1359 |
1360 return layer; | 1360 return layer; |
1361 } | 1361 } |
1362 | 1362 |
1363 ScrollableArea* EventHandler::associatedScrollableArea(const RenderLayer* layer)
const | 1363 ScrollableArea* EventHandler::associatedScrollableArea(const Layer* layer) const |
1364 { | 1364 { |
1365 if (RenderLayerScrollableArea* scrollableArea = layer->scrollableArea()) { | 1365 if (LayerScrollableArea* scrollableArea = layer->scrollableArea()) { |
1366 if (scrollableArea->scrollsOverflow()) | 1366 if (scrollableArea->scrollsOverflow()) |
1367 return scrollableArea; | 1367 return scrollableArea; |
1368 } | 1368 } |
1369 | 1369 |
1370 return nullptr; | 1370 return nullptr; |
1371 } | 1371 } |
1372 | 1372 |
1373 bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& event) | 1373 bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& event) |
1374 { | 1374 { |
1375 TRACE_EVENT0("blink", "EventHandler::handleMouseMoveEvent"); | 1375 TRACE_EVENT0("blink", "EventHandler::handleMouseMoveEvent"); |
1376 | 1376 |
1377 RefPtrWillBeRawPtr<FrameView> protector(m_frame->view()); | 1377 RefPtrWillBeRawPtr<FrameView> protector(m_frame->view()); |
1378 MaximumDurationTracker maxDurationTracker(&m_maxMouseMovedDuration); | 1378 MaximumDurationTracker maxDurationTracker(&m_maxMouseMovedDuration); |
1379 | 1379 |
1380 HitTestResult hoveredNode = HitTestResult(LayoutPoint()); | 1380 HitTestResult hoveredNode = HitTestResult(LayoutPoint()); |
1381 bool result = handleMouseMoveOrLeaveEvent(event, &hoveredNode); | 1381 bool result = handleMouseMoveOrLeaveEvent(event, &hoveredNode); |
1382 | 1382 |
1383 Page* page = m_frame->page(); | 1383 Page* page = m_frame->page(); |
1384 if (!page) | 1384 if (!page) |
1385 return result; | 1385 return result; |
1386 | 1386 |
1387 if (RenderLayer* layer = layerForNode(hoveredNode.innerNode())) { | 1387 if (Layer* layer = layerForNode(hoveredNode.innerNode())) { |
1388 if (ScrollableArea* layerScrollableArea = associatedScrollableArea(layer
)) | 1388 if (ScrollableArea* layerScrollableArea = associatedScrollableArea(layer
)) |
1389 layerScrollableArea->mouseMovedInContentArea(); | 1389 layerScrollableArea->mouseMovedInContentArea(); |
1390 } | 1390 } |
1391 | 1391 |
1392 if (FrameView* frameView = m_frame->view()) | 1392 if (FrameView* frameView = m_frame->view()) |
1393 frameView->mouseMovedInContentArea(); | 1393 frameView->mouseMovedInContentArea(); |
1394 | 1394 |
1395 hoveredNode.setToShadowHostIfInUserAgentShadowRoot(); | 1395 hoveredNode.setToShadowHostIfInUserAgentShadowRoot(); |
1396 page->chrome().mouseDidMoveOverElement(hoveredNode); | 1396 page->chrome().mouseDidMoveOverElement(hoveredNode); |
1397 page->chrome().setToolTip(hoveredNode); | 1397 page->chrome().setToolTip(hoveredNode); |
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1856 result = m_capturingMouseEventsNode.get(); | 1856 result = m_capturingMouseEventsNode.get(); |
1857 else { | 1857 else { |
1858 // If the target node is a text node, dispatch on the parent node - rdar
://4196646 | 1858 // If the target node is a text node, dispatch on the parent node - rdar
://4196646 |
1859 if (result && result->isTextNode()) | 1859 if (result && result->isTextNode()) |
1860 result = NodeRenderingTraversal::parent(*result); | 1860 result = NodeRenderingTraversal::parent(*result); |
1861 } | 1861 } |
1862 m_nodeUnderMouse = result; | 1862 m_nodeUnderMouse = result; |
1863 | 1863 |
1864 // Fire mouseout/mouseover if the mouse has shifted to a different node. | 1864 // Fire mouseout/mouseover if the mouse has shifted to a different node. |
1865 if (fireMouseOverOut) { | 1865 if (fireMouseOverOut) { |
1866 RenderLayer* layerForLastNode = layerForNode(m_lastNodeUnderMouse.get())
; | 1866 Layer* layerForLastNode = layerForNode(m_lastNodeUnderMouse.get()); |
1867 RenderLayer* layerForNodeUnderMouse = layerForNode(m_nodeUnderMouse.get(
)); | 1867 Layer* layerForNodeUnderMouse = layerForNode(m_nodeUnderMouse.get()); |
1868 Page* page = m_frame->page(); | 1868 Page* page = m_frame->page(); |
1869 | 1869 |
1870 if (m_lastNodeUnderMouse && (!m_nodeUnderMouse || m_nodeUnderMouse->docu
ment() != m_frame->document())) { | 1870 if (m_lastNodeUnderMouse && (!m_nodeUnderMouse || m_nodeUnderMouse->docu
ment() != m_frame->document())) { |
1871 // The mouse has moved between frames. | 1871 // The mouse has moved between frames. |
1872 if (LocalFrame* frame = m_lastNodeUnderMouse->document().frame()) { | 1872 if (LocalFrame* frame = m_lastNodeUnderMouse->document().frame()) { |
1873 if (FrameView* frameView = frame->view()) | 1873 if (FrameView* frameView = frame->view()) |
1874 frameView->mouseExitedContentArea(); | 1874 frameView->mouseExitedContentArea(); |
1875 } | 1875 } |
1876 } else if (page && (layerForLastNode && (!layerForNodeUnderMouse || laye
rForNodeUnderMouse != layerForLastNode))) { | 1876 } else if (page && (layerForLastNode && (!layerForNodeUnderMouse || laye
rForNodeUnderMouse != layerForLastNode))) { |
1877 // The mouse has moved between layers. | 1877 // The mouse has moved between layers. |
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2408 if (m_longTapShouldInvokeContextMenu) { | 2408 if (m_longTapShouldInvokeContextMenu) { |
2409 m_longTapShouldInvokeContextMenu = false; | 2409 m_longTapShouldInvokeContextMenu = false; |
2410 return sendContextMenuEventForGesture(targetedEvent); | 2410 return sendContextMenuEventForGesture(targetedEvent); |
2411 } | 2411 } |
2412 #endif | 2412 #endif |
2413 return false; | 2413 return false; |
2414 } | 2414 } |
2415 | 2415 |
2416 bool EventHandler::handleScrollGestureOnResizer(Node* eventTarget, const Platfor
mGestureEvent& gestureEvent) { | 2416 bool EventHandler::handleScrollGestureOnResizer(Node* eventTarget, const Platfor
mGestureEvent& gestureEvent) { |
2417 if (gestureEvent.type() == PlatformEvent::GestureScrollBegin) { | 2417 if (gestureEvent.type() == PlatformEvent::GestureScrollBegin) { |
2418 RenderLayer* layer = eventTarget->renderer() ? eventTarget->renderer()->
enclosingLayer() : nullptr; | 2418 Layer* layer = eventTarget->renderer() ? eventTarget->renderer()->enclos
ingLayer() : nullptr; |
2419 IntPoint p = m_frame->view()->windowToContents(gestureEvent.position()); | 2419 IntPoint p = m_frame->view()->windowToContents(gestureEvent.position()); |
2420 if (layer && layer->scrollableArea() && layer->scrollableArea()->isPoint
InResizeControl(p, ResizerForTouch)) { | 2420 if (layer && layer->scrollableArea() && layer->scrollableArea()->isPoint
InResizeControl(p, ResizerForTouch)) { |
2421 m_resizeScrollableArea = layer->scrollableArea(); | 2421 m_resizeScrollableArea = layer->scrollableArea(); |
2422 m_resizeScrollableArea->setInResizeMode(true); | 2422 m_resizeScrollableArea->setInResizeMode(true); |
2423 m_offsetFromResizeCorner = LayoutSize(m_resizeScrollableArea->offset
FromResizeCorner(p)); | 2423 m_offsetFromResizeCorner = LayoutSize(m_resizeScrollableArea->offset
FromResizeCorner(p)); |
2424 return true; | 2424 return true; |
2425 } | 2425 } |
2426 } else if (gestureEvent.type() == PlatformEvent::GestureScrollUpdate) { | 2426 } else if (gestureEvent.type() == PlatformEvent::GestureScrollUpdate) { |
2427 if (m_resizeScrollableArea && m_resizeScrollableArea->inResizeMode()) { | 2427 if (m_resizeScrollableArea && m_resizeScrollableArea->inResizeMode()) { |
2428 m_resizeScrollableArea->resize(gestureEvent, m_offsetFromResizeCorne
r); | 2428 m_resizeScrollableArea->resize(gestureEvent, m_offsetFromResizeCorne
r); |
(...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3211 void EventHandler::clearDragDataTransfer() | 3211 void EventHandler::clearDragDataTransfer() |
3212 { | 3212 { |
3213 if (dragState().m_dragDataTransfer) { | 3213 if (dragState().m_dragDataTransfer) { |
3214 dragState().m_dragDataTransfer->clearDragImage(); | 3214 dragState().m_dragDataTransfer->clearDragImage(); |
3215 dragState().m_dragDataTransfer->setAccessPolicy(DataTransferNumb); | 3215 dragState().m_dragDataTransfer->setAccessPolicy(DataTransferNumb); |
3216 } | 3216 } |
3217 } | 3217 } |
3218 | 3218 |
3219 void EventHandler::dragSourceEndedAt(const PlatformMouseEvent& event, DragOperat
ion operation) | 3219 void EventHandler::dragSourceEndedAt(const PlatformMouseEvent& event, DragOperat
ion operation) |
3220 { | 3220 { |
3221 // Send a hit test request so that RenderLayer gets a chance to update the :
hover and :active pseudoclasses. | 3221 // Send a hit test request so that Layer gets a chance to update the :hover
and :active pseudoclasses. |
3222 HitTestRequest request(HitTestRequest::Release); | 3222 HitTestRequest request(HitTestRequest::Release); |
3223 prepareMouseEvent(request, event); | 3223 prepareMouseEvent(request, event); |
3224 | 3224 |
3225 if (dragState().m_dragSrc) { | 3225 if (dragState().m_dragSrc) { |
3226 dragState().m_dragDataTransfer->setDestinationOperation(operation); | 3226 dragState().m_dragDataTransfer->setDestinationOperation(operation); |
3227 // for now we don't care if event handler cancels default behavior, sinc
e there is none | 3227 // for now we don't care if event handler cancels default behavior, sinc
e there is none |
3228 dispatchDragSrcEvent(EventTypeNames::dragend, event); | 3228 dispatchDragSrcEvent(EventTypeNames::dragend, event); |
3229 } | 3229 } |
3230 clearDragDataTransfer(); | 3230 clearDragDataTransfer(); |
3231 dragState().m_dragSrc = nullptr; | 3231 dragState().m_dragSrc = nullptr; |
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3906 unsigned EventHandler::accessKeyModifiers() | 3906 unsigned EventHandler::accessKeyModifiers() |
3907 { | 3907 { |
3908 #if OS(MACOSX) | 3908 #if OS(MACOSX) |
3909 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; | 3909 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; |
3910 #else | 3910 #else |
3911 return PlatformEvent::AltKey; | 3911 return PlatformEvent::AltKey; |
3912 #endif | 3912 #endif |
3913 } | 3913 } |
3914 | 3914 |
3915 } // namespace blink | 3915 } // namespace blink |
OLD | NEW |