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 820 matching lines...) Loading... |
831 if (!styleImage) | 831 if (!styleImage) |
832 continue; | 832 continue; |
833 ImageResource* cachedImage = styleImage->cachedImage(); | 833 ImageResource* cachedImage = styleImage->cachedImage(); |
834 if (!cachedImage) | 834 if (!cachedImage) |
835 continue; | 835 continue; |
836 float scale = styleImage->imageScaleFactor(); | 836 float scale = styleImage->imageScaleFactor(); |
837 bool hotSpotSpecified = (*cursors)[i].hotSpotSpecified(); | 837 bool hotSpotSpecified = (*cursors)[i].hotSpotSpecified(); |
838 // Get hotspot and convert from logical pixels to physical pixels. | 838 // Get hotspot and convert from logical pixels to physical pixels. |
839 IntPoint hotSpot = (*cursors)[i].hotSpot(); | 839 IntPoint hotSpot = (*cursors)[i].hotSpot(); |
840 hotSpot.scale(scale, scale); | 840 hotSpot.scale(scale, scale); |
841 IntSize size = cachedImage->image()->size(); | 841 IntSize size = cachedImage->getImage()->size(); |
842 if (cachedImage->errorOccurred()) | 842 if (cachedImage->errorOccurred()) |
843 continue; | 843 continue; |
844 // Limit the size of cursors (in UI pixels) so that they cannot be | 844 // Limit the size of cursors (in UI pixels) so that they cannot be |
845 // used to cover UI elements in chrome. | 845 // used to cover UI elements in chrome. |
846 size.scale(1 / scale); | 846 size.scale(1 / scale); |
847 if (size.width() > maximumCursorSize || size.height() > maximumCurso
rSize) | 847 if (size.width() > maximumCursorSize || size.height() > maximumCurso
rSize) |
848 continue; | 848 continue; |
849 | 849 |
850 Image* image = cachedImage->image(); | 850 Image* image = cachedImage->getImage(); |
851 // Ensure no overflow possible in calculations above. | 851 // Ensure no overflow possible in calculations above. |
852 if (scale < minimumCursorScale) | 852 if (scale < minimumCursorScale) |
853 continue; | 853 continue; |
854 return Cursor(image, hotSpotSpecified, hotSpot, scale); | 854 return Cursor(image, hotSpotSpecified, hotSpot, scale); |
855 } | 855 } |
856 } | 856 } |
857 | 857 |
858 switch (style ? style->cursor() : CURSOR_AUTO) { | 858 switch (style ? style->cursor() : CURSOR_AUTO) { |
859 case CURSOR_AUTO: { | 859 case CURSOR_AUTO: { |
860 bool horizontalText = !style || style->isHorizontalWritingMode(); | 860 bool horizontalText = !style || style->isHorizontalWritingMode(); |
(...skipping 78 matching lines...) Loading... |
939 { | 939 { |
940 bool editable = (node && node->hasEditableStyle()); | 940 bool editable = (node && node->hasEditableStyle()); |
941 | 941 |
942 if (useHandCursor(node, result.isOverLink())) | 942 if (useHandCursor(node, result.isOverLink())) |
943 return handCursor(); | 943 return handCursor(); |
944 | 944 |
945 bool inResizer = false; | 945 bool inResizer = false; |
946 LayoutObject* layoutObject = node ? node->layoutObject() : nullptr; | 946 LayoutObject* layoutObject = node ? node->layoutObject() : nullptr; |
947 if (layoutObject && m_frame->view()) { | 947 if (layoutObject && m_frame->view()) { |
948 PaintLayer* layer = layoutObject->enclosingLayer(); | 948 PaintLayer* layer = layoutObject->enclosingLayer(); |
949 inResizer = layer->scrollableArea() && layer->scrollableArea()->isPointI
nResizeControl(result.roundedPointInMainFrame(), ResizerForPointer); | 949 inResizer = layer->getScrollableArea() && layer->getScrollableArea()->is
PointInResizeControl(result.roundedPointInMainFrame(), ResizerForPointer); |
950 } | 950 } |
951 | 951 |
952 // During selection, use an I-beam no matter what we're over. | 952 // During selection, use an I-beam no matter what we're over. |
953 // If a drag may be starting or we're capturing mouse events for a particula
r node, don't treat this as a selection. | 953 // If a drag may be starting or we're capturing mouse events for a particula
r node, don't treat this as a selection. |
954 if (m_mousePressed && selectionController().mouseDownMayStartSelect() | 954 if (m_mousePressed && selectionController().mouseDownMayStartSelect() |
955 && !m_mouseDownMayStartDrag | 955 && !m_mouseDownMayStartDrag |
956 && m_frame->selection().isCaretOrRange() | 956 && m_frame->selection().isCaretOrRange() |
957 && !m_capturingMouseEventsNode) { | 957 && !m_capturingMouseEventsNode) { |
958 return iBeam; | 958 return iBeam; |
959 } | 959 } |
(...skipping 84 matching lines...) Loading... |
1044 m_clickNode = mev.innerNode()->isTextNode() ? FlatTreeTraversal::parent(*me
v.innerNode()) : mev.innerNode(); | 1044 m_clickNode = mev.innerNode()->isTextNode() ? FlatTreeTraversal::parent(*me
v.innerNode()) : mev.innerNode(); |
1045 | 1045 |
1046 m_frame->selection().setCaretBlinkingSuspended(true); | 1046 m_frame->selection().setCaretBlinkingSuspended(true); |
1047 | 1047 |
1048 WebInputEventResult eventResult = updatePointerTargetAndDispatchEvents(Event
TypeNames::mousedown, mev.innerNode(), m_clickCount, mouseEvent); | 1048 WebInputEventResult eventResult = updatePointerTargetAndDispatchEvents(Event
TypeNames::mousedown, mev.innerNode(), m_clickCount, mouseEvent); |
1049 | 1049 |
1050 if (eventResult == WebInputEventResult::NotHandled && m_frame->view()) { | 1050 if (eventResult == WebInputEventResult::NotHandled && m_frame->view()) { |
1051 FrameView* view = m_frame->view(); | 1051 FrameView* view = m_frame->view(); |
1052 PaintLayer* layer = mev.innerNode()->layoutObject() ? mev.innerNode()->l
ayoutObject()->enclosingLayer() : nullptr; | 1052 PaintLayer* layer = mev.innerNode()->layoutObject() ? mev.innerNode()->l
ayoutObject()->enclosingLayer() : nullptr; |
1053 IntPoint p = view->rootFrameToContents(mouseEvent.position()); | 1053 IntPoint p = view->rootFrameToContents(mouseEvent.position()); |
1054 if (layer && layer->scrollableArea() && layer->scrollableArea()->isPoint
InResizeControl(p, ResizerForPointer)) { | 1054 if (layer && layer->getScrollableArea() && layer->getScrollableArea()->i
sPointInResizeControl(p, ResizerForPointer)) { |
1055 m_resizeScrollableArea = layer->scrollableArea(); | 1055 m_resizeScrollableArea = layer->getScrollableArea(); |
1056 m_resizeScrollableArea->setInResizeMode(true); | 1056 m_resizeScrollableArea->setInResizeMode(true); |
1057 m_offsetFromResizeCorner = LayoutSize(m_resizeScrollableArea->offset
FromResizeCorner(p)); | 1057 m_offsetFromResizeCorner = LayoutSize(m_resizeScrollableArea->offset
FromResizeCorner(p)); |
1058 return WebInputEventResult::HandledSystem; | 1058 return WebInputEventResult::HandledSystem; |
1059 } | 1059 } |
1060 } | 1060 } |
1061 | 1061 |
1062 // m_selectionInitiationState is initialized after dispatching mousedown | 1062 // m_selectionInitiationState is initialized after dispatching mousedown |
1063 // event in order not to keep the selection by DOM APIs Because we can't | 1063 // event in order not to keep the selection by DOM APIs Because we can't |
1064 // give the user the chance to handle the selection by user action like | 1064 // give the user the chance to handle the selection by user action like |
1065 // dragging if we keep the selection in case of mousedown. FireFox also has | 1065 // dragging if we keep the selection in case of mousedown. FireFox also has |
(...skipping 52 matching lines...) Loading... |
1118 | 1118 |
1119 PaintLayer* layer = layoutObject->enclosingLayer(); | 1119 PaintLayer* layer = layoutObject->enclosingLayer(); |
1120 if (!layer) | 1120 if (!layer) |
1121 return nullptr; | 1121 return nullptr; |
1122 | 1122 |
1123 return layer; | 1123 return layer; |
1124 } | 1124 } |
1125 | 1125 |
1126 ScrollableArea* EventHandler::associatedScrollableArea(const PaintLayer* layer)
const | 1126 ScrollableArea* EventHandler::associatedScrollableArea(const PaintLayer* layer)
const |
1127 { | 1127 { |
1128 if (PaintLayerScrollableArea* scrollableArea = layer->scrollableArea()) { | 1128 if (PaintLayerScrollableArea* scrollableArea = layer->getScrollableArea()) { |
1129 if (scrollableArea->scrollsOverflow()) | 1129 if (scrollableArea->scrollsOverflow()) |
1130 return scrollableArea; | 1130 return scrollableArea; |
1131 } | 1131 } |
1132 | 1132 |
1133 return nullptr; | 1133 return nullptr; |
1134 } | 1134 } |
1135 | 1135 |
1136 WebInputEventResult EventHandler::handleMouseMoveEvent(const PlatformMouseEvent&
event) | 1136 WebInputEventResult EventHandler::handleMouseMoveEvent(const PlatformMouseEvent&
event) |
1137 { | 1137 { |
1138 TRACE_EVENT0("blink", "EventHandler::handleMouseMoveEvent"); | 1138 TRACE_EVENT0("blink", "EventHandler::handleMouseMoveEvent"); |
(...skipping 545 matching lines...) Loading... |
1684 | 1684 |
1685 return m_pointerEventManager.sendMousePointerEvent( | 1685 return m_pointerEventManager.sendMousePointerEvent( |
1686 m_nodeUnderMouse, mouseEventType, clickCount, mouseEvent, nullptr, | 1686 m_nodeUnderMouse, mouseEventType, clickCount, mouseEvent, nullptr, |
1687 m_frame->document()->domWindow()); | 1687 m_frame->document()->domWindow()); |
1688 } | 1688 } |
1689 | 1689 |
1690 WebInputEventResult EventHandler::handleMouseFocus(const MouseEventWithHitTestRe
sults& targetedEvent, InputDeviceCapabilities* sourceCapabilities) | 1690 WebInputEventResult EventHandler::handleMouseFocus(const MouseEventWithHitTestRe
sults& targetedEvent, InputDeviceCapabilities* sourceCapabilities) |
1691 { | 1691 { |
1692 // If clicking on a frame scrollbar, do not mess up with content focus. | 1692 // If clicking on a frame scrollbar, do not mess up with content focus. |
1693 if (targetedEvent.hitTestResult().scrollbar() && m_frame->contentLayoutObjec
t()) { | 1693 if (targetedEvent.hitTestResult().scrollbar() && m_frame->contentLayoutObjec
t()) { |
1694 if (targetedEvent.hitTestResult().scrollbar()->scrollableArea() == m_fra
me->contentLayoutObject()->scrollableArea()) | 1694 if (targetedEvent.hitTestResult().scrollbar()->getScrollableArea() == m_
frame->contentLayoutObject()->getScrollableArea()) |
1695 return WebInputEventResult::NotHandled; | 1695 return WebInputEventResult::NotHandled; |
1696 } | 1696 } |
1697 | 1697 |
1698 // The layout needs to be up to date to determine if an element is focusable
. | 1698 // The layout needs to be up to date to determine if an element is focusable
. |
1699 m_frame->document()->updateLayoutIgnorePendingStylesheets(); | 1699 m_frame->document()->updateLayoutIgnorePendingStylesheets(); |
1700 | 1700 |
1701 Element* element = nullptr; | 1701 Element* element = nullptr; |
1702 if (m_nodeUnderMouse) | 1702 if (m_nodeUnderMouse) |
1703 element = m_nodeUnderMouse->isElementNode() ? toElement(m_nodeUnderMouse
) : m_nodeUnderMouse->parentOrShadowHostElement(); | 1703 element = m_nodeUnderMouse->isElementNode() ? toElement(m_nodeUnderMouse
) : m_nodeUnderMouse->parentOrShadowHostElement(); |
1704 for (; element; element = element->parentOrShadowHostElement()) { | 1704 for (; element; element = element->parentOrShadowHostElement()) { |
(...skipping 513 matching lines...) Loading... |
2218 } | 2218 } |
2219 #endif | 2219 #endif |
2220 return WebInputEventResult::NotHandled; | 2220 return WebInputEventResult::NotHandled; |
2221 } | 2221 } |
2222 | 2222 |
2223 bool EventHandler::handleScrollGestureOnResizer(Node* eventTarget, const Platfor
mGestureEvent& gestureEvent) | 2223 bool EventHandler::handleScrollGestureOnResizer(Node* eventTarget, const Platfor
mGestureEvent& gestureEvent) |
2224 { | 2224 { |
2225 if (gestureEvent.type() == PlatformEvent::GestureScrollBegin) { | 2225 if (gestureEvent.type() == PlatformEvent::GestureScrollBegin) { |
2226 PaintLayer* layer = eventTarget->layoutObject() ? eventTarget->layoutObj
ect()->enclosingLayer() : nullptr; | 2226 PaintLayer* layer = eventTarget->layoutObject() ? eventTarget->layoutObj
ect()->enclosingLayer() : nullptr; |
2227 IntPoint p = m_frame->view()->rootFrameToContents(gestureEvent.position(
)); | 2227 IntPoint p = m_frame->view()->rootFrameToContents(gestureEvent.position(
)); |
2228 if (layer && layer->scrollableArea() && layer->scrollableArea()->isPoint
InResizeControl(p, ResizerForTouch)) { | 2228 if (layer && layer->getScrollableArea() && layer->getScrollableArea()->i
sPointInResizeControl(p, ResizerForTouch)) { |
2229 m_resizeScrollableArea = layer->scrollableArea(); | 2229 m_resizeScrollableArea = layer->getScrollableArea(); |
2230 m_resizeScrollableArea->setInResizeMode(true); | 2230 m_resizeScrollableArea->setInResizeMode(true); |
2231 m_offsetFromResizeCorner = LayoutSize(m_resizeScrollableArea->offset
FromResizeCorner(p)); | 2231 m_offsetFromResizeCorner = LayoutSize(m_resizeScrollableArea->offset
FromResizeCorner(p)); |
2232 return true; | 2232 return true; |
2233 } | 2233 } |
2234 } else if (gestureEvent.type() == PlatformEvent::GestureScrollUpdate) { | 2234 } else if (gestureEvent.type() == PlatformEvent::GestureScrollUpdate) { |
2235 if (m_resizeScrollableArea && m_resizeScrollableArea->inResizeMode()) { | 2235 if (m_resizeScrollableArea && m_resizeScrollableArea->inResizeMode()) { |
2236 m_resizeScrollableArea->resize(gestureEvent, m_offsetFromResizeCorne
r); | 2236 m_resizeScrollableArea->resize(gestureEvent, m_offsetFromResizeCorne
r); |
2237 return true; | 2237 return true; |
2238 } | 2238 } |
2239 } else if (gestureEvent.type() == PlatformEvent::GestureScrollEnd) { | 2239 } else if (gestureEvent.type() == PlatformEvent::GestureScrollEnd) { |
(...skipping 599 matching lines...) Loading... |
2839 } else { | 2839 } else { |
2840 locationInRootFrame = IntPoint( | 2840 locationInRootFrame = IntPoint( |
2841 rightAligned | 2841 rightAligned |
2842 ? visualViewport.visibleRect().maxX() - kContextMenuMargin | 2842 ? visualViewport.visibleRect().maxX() - kContextMenuMargin |
2843 : visualViewport.location().x() + kContextMenuMargin, | 2843 : visualViewport.location().x() + kContextMenuMargin, |
2844 visualViewport.location().y() + kContextMenuMargin); | 2844 visualViewport.location().y() + kContextMenuMargin); |
2845 } | 2845 } |
2846 | 2846 |
2847 m_frame->view()->setCursor(pointerCursor()); | 2847 m_frame->view()->setCursor(pointerCursor()); |
2848 IntPoint locationInViewport = visualViewport.rootFrameToViewport(locationInR
ootFrame); | 2848 IntPoint locationInViewport = visualViewport.rootFrameToViewport(locationInR
ootFrame); |
2849 IntPoint globalPosition = view->hostWindow()->viewportToScreen(IntRect(locat
ionInViewport, IntSize())).location(); | 2849 IntPoint globalPosition = view->getHostWindow()->viewportToScreen(IntRect(lo
cationInViewport, IntSize())).location(); |
2850 | 2850 |
2851 Node* targetNode = overrideTargetElement ? overrideTargetElement : doc->focu
sedElement(); | 2851 Node* targetNode = overrideTargetElement ? overrideTargetElement : doc->focu
sedElement(); |
2852 if (!targetNode) | 2852 if (!targetNode) |
2853 targetNode = doc; | 2853 targetNode = doc; |
2854 | 2854 |
2855 // Use the focused node as the target for hover and active. | 2855 // Use the focused node as the target for hover and active. |
2856 HitTestRequest request(HitTestRequest::Active); | 2856 HitTestRequest request(HitTestRequest::Active); |
2857 HitTestResult result(request, locationInRootFrame); | 2857 HitTestResult result(request, locationInRootFrame); |
2858 result.setInnerNode(targetNode); | 2858 result.setInnerNode(targetNode); |
2859 doc->updateHoverActiveState(request, result.innerElement()); | 2859 doc->updateHoverActiveState(request, result.innerElement()); |
(...skipping 1095 matching lines...) Loading... |
3955 PlatformEvent::Modifiers EventHandler::accessKeyModifiers() | 3955 PlatformEvent::Modifiers EventHandler::accessKeyModifiers() |
3956 { | 3956 { |
3957 #if OS(MACOSX) | 3957 #if OS(MACOSX) |
3958 return static_cast<PlatformEvent::Modifiers>(PlatformEvent::CtrlKey | Platfo
rmEvent::AltKey); | 3958 return static_cast<PlatformEvent::Modifiers>(PlatformEvent::CtrlKey | Platfo
rmEvent::AltKey); |
3959 #else | 3959 #else |
3960 return PlatformEvent::AltKey; | 3960 return PlatformEvent::AltKey; |
3961 #endif | 3961 #endif |
3962 } | 3962 } |
3963 | 3963 |
3964 } // namespace blink | 3964 } // namespace blink |
OLD | NEW |