| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef MouseEventManager_h | 5 #ifndef MouseEventManager_h |
| 6 #define MouseEventManager_h | 6 #define MouseEventManager_h |
| 7 | 7 |
| 8 #include "core/CoreExport.h" | 8 #include "core/CoreExport.h" |
| 9 #include "core/dom/SynchronousMutationObserver.h" | 9 #include "core/dom/SynchronousMutationObserver.h" |
| 10 #include "core/input/BoundaryEventDispatcher.h" | 10 #include "core/input/BoundaryEventDispatcher.h" |
| 11 #include "core/page/DragActions.h" | 11 #include "core/page/DragActions.h" |
| 12 #include "core/page/EventWithHitTestResults.h" | 12 #include "core/page/EventWithHitTestResults.h" |
| 13 #include "platform/PlatformMouseEvent.h" | |
| 14 #include "platform/Timer.h" | 13 #include "platform/Timer.h" |
| 15 #include "public/platform/WebInputEventResult.h" | 14 #include "public/platform/WebInputEventResult.h" |
| 15 #include "public/platform/WebMouseEvent.h" |
| 16 #include "wtf/Allocator.h" | 16 #include "wtf/Allocator.h" |
| 17 #include "wtf/Time.h" | 17 #include "wtf/Time.h" |
| 18 | 18 |
| 19 namespace blink { | 19 namespace blink { |
| 20 | 20 |
| 21 class ContainerNode; | 21 class ContainerNode; |
| 22 class DragState; | 22 class DragState; |
| 23 class DataTransfer; | 23 class DataTransfer; |
| 24 class Element; | 24 class Element; |
| 25 class FloatQuad; | 25 class FloatQuad; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 38 WTF_MAKE_NONCOPYABLE(MouseEventManager); | 38 WTF_MAKE_NONCOPYABLE(MouseEventManager); |
| 39 USING_GARBAGE_COLLECTED_MIXIN(MouseEventManager); | 39 USING_GARBAGE_COLLECTED_MIXIN(MouseEventManager); |
| 40 | 40 |
| 41 public: | 41 public: |
| 42 MouseEventManager(LocalFrame&, ScrollManager&); | 42 MouseEventManager(LocalFrame&, ScrollManager&); |
| 43 virtual ~MouseEventManager(); | 43 virtual ~MouseEventManager(); |
| 44 DECLARE_TRACE(); | 44 DECLARE_TRACE(); |
| 45 | 45 |
| 46 WebInputEventResult dispatchMouseEvent(EventTarget*, | 46 WebInputEventResult dispatchMouseEvent(EventTarget*, |
| 47 const AtomicString&, | 47 const AtomicString&, |
| 48 const PlatformMouseEvent&, | 48 const WebMouseEvent&, |
| 49 const String& canvasRegionId, |
| 49 EventTarget* relatedTarget, | 50 EventTarget* relatedTarget, |
| 50 bool checkForListener = false); | 51 bool checkForListener = false); |
| 51 | 52 |
| 52 WebInputEventResult setMousePositionAndDispatchMouseEvent( | 53 WebInputEventResult setMousePositionAndDispatchMouseEvent( |
| 53 Node* targetNode, | 54 Node* targetNode, |
| 55 const String& canvasRegionId, |
| 54 const AtomicString& eventType, | 56 const AtomicString& eventType, |
| 55 const PlatformMouseEvent&); | 57 const WebMouseEvent&); |
| 56 | 58 |
| 57 WebInputEventResult dispatchMouseClickIfNeeded( | 59 WebInputEventResult dispatchMouseClickIfNeeded( |
| 58 const MouseEventWithHitTestResults&); | 60 const MouseEventWithHitTestResults&); |
| 59 | 61 |
| 60 WebInputEventResult dispatchDragSrcEvent(const AtomicString& eventType, | 62 WebInputEventResult dispatchDragSrcEvent(const AtomicString& eventType, |
| 61 const PlatformMouseEvent&); | 63 const WebMouseEvent&); |
| 62 WebInputEventResult dispatchDragEvent(const AtomicString& eventType, | 64 WebInputEventResult dispatchDragEvent(const AtomicString& eventType, |
| 63 Node* target, | 65 Node* target, |
| 64 const PlatformMouseEvent&, | 66 const WebMouseEvent&, |
| 65 DataTransfer*); | 67 DataTransfer*); |
| 66 | 68 |
| 67 // Resets the internal state of this object. | 69 // Resets the internal state of this object. |
| 68 void clear(); | 70 void clear(); |
| 69 | 71 |
| 70 void sendBoundaryEvents(EventTarget* exitedTarget, | 72 void sendBoundaryEvents(EventTarget* exitedTarget, |
| 71 EventTarget* enteredTarget, | 73 EventTarget* enteredTarget, |
| 72 const PlatformMouseEvent& mousePlatformEvent); | 74 const String& canvasRegionId, |
| 75 const WebMouseEvent&); |
| 73 | 76 |
| 74 void setNodeUnderMouse(Node*, const PlatformMouseEvent&); | 77 void setNodeUnderMouse(Node*, |
| 78 const String& canvasRegionId, |
| 79 const WebMouseEvent&); |
| 75 | 80 |
| 76 WebInputEventResult handleMouseFocus( | 81 WebInputEventResult handleMouseFocus( |
| 77 const HitTestResult&, | 82 const HitTestResult&, |
| 78 InputDeviceCapabilities* sourceCapabilities); | 83 InputDeviceCapabilities* sourceCapabilities); |
| 79 | 84 |
| 80 void fakeMouseMoveEventTimerFired(TimerBase*); | 85 void fakeMouseMoveEventTimerFired(TimerBase*); |
| 81 | 86 |
| 82 void cancelFakeMouseMoveEvent(); | 87 void cancelFakeMouseMoveEvent(); |
| 83 void dispatchFakeMouseMoveEventSoon(); | 88 void dispatchFakeMouseMoveEventSoon(); |
| 84 void dispatchFakeMouseMoveEventSoonInQuad(const FloatQuad&); | 89 void dispatchFakeMouseMoveEventSoonInQuad(const FloatQuad&); |
| 85 | 90 |
| 86 void setLastKnownMousePosition(const PlatformMouseEvent&); | 91 void setLastKnownMousePosition(const WebMouseEvent&); |
| 87 | 92 |
| 88 bool handleDragDropIfPossible(const GestureEventWithHitTestResults&); | 93 bool handleDragDropIfPossible(const GestureEventWithHitTestResults&); |
| 89 | 94 |
| 90 WebInputEventResult handleMouseDraggedEvent( | 95 WebInputEventResult handleMouseDraggedEvent( |
| 91 const MouseEventWithHitTestResults&); | 96 const MouseEventWithHitTestResults&); |
| 92 WebInputEventResult handleMousePressEvent( | 97 WebInputEventResult handleMousePressEvent( |
| 93 const MouseEventWithHitTestResults&); | 98 const MouseEventWithHitTestResults&); |
| 94 WebInputEventResult handleMouseReleaseEvent( | 99 WebInputEventResult handleMouseReleaseEvent( |
| 95 const MouseEventWithHitTestResults&); | 100 const MouseEventWithHitTestResults&); |
| 96 | 101 |
| 97 static DragState& dragState(); | 102 static DragState& dragState(); |
| 98 | 103 |
| 99 void focusDocumentView(); | 104 void focusDocumentView(); |
| 100 | 105 |
| 101 // Resets the state that indicates the next events could cause a drag. It is | 106 // Resets the state that indicates the next events could cause a drag. It is |
| 102 // called when we realize the next events should not cause drag based on the | 107 // called when we realize the next events should not cause drag based on the |
| 103 // drag heuristics. | 108 // drag heuristics. |
| 104 void clearDragHeuristicState(); | 109 void clearDragHeuristicState(); |
| 105 | 110 |
| 106 void dragSourceEndedAt(const PlatformMouseEvent&, DragOperation); | 111 void dragSourceEndedAt(const WebMouseEvent&, DragOperation); |
| 107 | 112 |
| 108 void updateSelectionForMouseDrag(); | 113 void updateSelectionForMouseDrag(); |
| 109 | 114 |
| 110 void handleMousePressEventUpdateStates(const PlatformMouseEvent&); | 115 void handleMousePressEventUpdateStates(const WebMouseEvent&); |
| 111 | 116 |
| 112 // Returns whether pan is handled and resets the state on release. | 117 // Returns whether pan is handled and resets the state on release. |
| 113 bool handleSvgPanIfNeeded(bool isReleaseEvent); | 118 bool handleSvgPanIfNeeded(bool isReleaseEvent); |
| 114 | 119 |
| 115 void invalidateClick(); | 120 void invalidateClick(); |
| 116 | 121 |
| 117 // TODO: These functions ideally should be private but the code needs more | 122 // TODO: These functions ideally should be private but the code needs more |
| 118 // refactoring to be able to remove the dependency from EventHandler. | 123 // refactoring to be able to remove the dependency from EventHandler. |
| 119 Node* getNodeUnderMouse(); | 124 Node* getNodeUnderMouse(); |
| 120 bool isMousePositionUnknown(); | 125 bool isMousePositionUnknown(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 137 void setClickCount(int); | 142 void setClickCount(int); |
| 138 | 143 |
| 139 bool mouseDownMayStartDrag(); | 144 bool mouseDownMayStartDrag(); |
| 140 | 145 |
| 141 private: | 146 private: |
| 142 class MouseEventBoundaryEventDispatcher : public BoundaryEventDispatcher { | 147 class MouseEventBoundaryEventDispatcher : public BoundaryEventDispatcher { |
| 143 WTF_MAKE_NONCOPYABLE(MouseEventBoundaryEventDispatcher); | 148 WTF_MAKE_NONCOPYABLE(MouseEventBoundaryEventDispatcher); |
| 144 | 149 |
| 145 public: | 150 public: |
| 146 MouseEventBoundaryEventDispatcher(MouseEventManager*, | 151 MouseEventBoundaryEventDispatcher(MouseEventManager*, |
| 147 const PlatformMouseEvent*, | 152 const WebMouseEvent*, |
| 148 EventTarget* exitedTarget); | 153 EventTarget* exitedTarget, |
| 154 const String& canvasRegionId); |
| 149 | 155 |
| 150 protected: | 156 protected: |
| 151 void dispatchOut(EventTarget*, EventTarget* relatedTarget) override; | 157 void dispatchOut(EventTarget*, EventTarget* relatedTarget) override; |
| 152 void dispatchOver(EventTarget*, EventTarget* relatedTarget) override; | 158 void dispatchOver(EventTarget*, EventTarget* relatedTarget) override; |
| 153 void dispatchLeave(EventTarget*, | 159 void dispatchLeave(EventTarget*, |
| 154 EventTarget* relatedTarget, | 160 EventTarget* relatedTarget, |
| 155 bool checkForListener) override; | 161 bool checkForListener) override; |
| 156 void dispatchEnter(EventTarget*, | 162 void dispatchEnter(EventTarget*, |
| 157 EventTarget* relatedTarget, | 163 EventTarget* relatedTarget, |
| 158 bool checkForListener) override; | 164 bool checkForListener) override; |
| 159 AtomicString getLeaveEvent() override; | 165 AtomicString getLeaveEvent() override; |
| 160 AtomicString getEnterEvent() override; | 166 AtomicString getEnterEvent() override; |
| 161 | 167 |
| 162 private: | 168 private: |
| 163 void dispatch(EventTarget*, | 169 void dispatch(EventTarget*, |
| 164 EventTarget* relatedTarget, | 170 EventTarget* relatedTarget, |
| 165 const AtomicString&, | 171 const AtomicString&, |
| 166 const PlatformMouseEvent&, | 172 const String& canvasRegionId, |
| 173 const WebMouseEvent&, |
| 167 bool checkForListener); | 174 bool checkForListener); |
| 168 Member<MouseEventManager> m_mouseEventManager; | 175 Member<MouseEventManager> m_mouseEventManager; |
| 169 const PlatformMouseEvent* m_platformMouseEvent; | 176 const WebMouseEvent* m_webMouseEvent; |
| 170 Member<EventTarget> m_exitedTarget; | 177 Member<EventTarget> m_exitedTarget; |
| 178 String m_canvasRegionId; |
| 171 }; | 179 }; |
| 172 | 180 |
| 173 // If the given element is a shadow host and its root has delegatesFocus=false | 181 // If the given element is a shadow host and its root has delegatesFocus=false |
| 174 // flag, slide focus to its inner element. Returns true if the resulting focus | 182 // flag, slide focus to its inner element. Returns true if the resulting focus |
| 175 // is different from the given element. | 183 // is different from the given element. |
| 176 bool slideFocusOnShadowHostIfNecessary(const Element&); | 184 bool slideFocusOnShadowHostIfNecessary(const Element&); |
| 177 | 185 |
| 178 bool dragThresholdExceeded(const IntPoint&) const; | 186 bool dragThresholdExceeded(const IntPoint&) const; |
| 179 bool handleDrag(const MouseEventWithHitTestResults&, DragInitiator); | 187 bool handleDrag(const MouseEventWithHitTestResults&, DragInitiator); |
| 180 bool tryStartDrag(const MouseEventWithHitTestResults&); | 188 bool tryStartDrag(const MouseEventWithHitTestResults&); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 211 unsigned m_capturesDragging : 1; | 219 unsigned m_capturesDragging : 1; |
| 212 unsigned m_mouseDownMayStartDrag : 1; | 220 unsigned m_mouseDownMayStartDrag : 1; |
| 213 | 221 |
| 214 Member<Node> m_mousePressNode; | 222 Member<Node> m_mousePressNode; |
| 215 | 223 |
| 216 int m_clickCount; | 224 int m_clickCount; |
| 217 Member<Node> m_clickNode; | 225 Member<Node> m_clickNode; |
| 218 | 226 |
| 219 IntPoint m_mouseDownPos; // In our view's coords. | 227 IntPoint m_mouseDownPos; // In our view's coords. |
| 220 TimeTicks m_mouseDownTimestamp; | 228 TimeTicks m_mouseDownTimestamp; |
| 221 PlatformMouseEvent m_mouseDown; | 229 WebMouseEvent m_mouseDown; |
| 222 | 230 |
| 223 LayoutPoint m_dragStartPos; | 231 LayoutPoint m_dragStartPos; |
| 224 | 232 |
| 225 TaskRunnerTimer<MouseEventManager> m_fakeMouseMoveEventTimer; | 233 TaskRunnerTimer<MouseEventManager> m_fakeMouseMoveEventTimer; |
| 226 }; | 234 }; |
| 227 | 235 |
| 228 } // namespace blink | 236 } // namespace blink |
| 229 | 237 |
| 230 #endif // MouseEventManager_h | 238 #endif // MouseEventManager_h |
| OLD | NEW |