Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(270)

Side by Side Diff: third_party/WebKit/Source/core/input/MouseEventManager.h

Issue 2350433002: Extract more of the mouse logic from EventHandler (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/frame/LocalFrame.h"
10 #include "core/input/BoundaryEventDispatcher.h" 9 #include "core/input/BoundaryEventDispatcher.h"
10 #include "core/page/DragActions.h"
11 #include "core/page/EventWithHitTestResults.h"
11 #include "platform/PlatformMouseEvent.h" 12 #include "platform/PlatformMouseEvent.h"
13 #include "platform/Timer.h"
12 #include "public/platform/WebInputEventResult.h" 14 #include "public/platform/WebInputEventResult.h"
13 #include "wtf/Allocator.h" 15 #include "wtf/Allocator.h"
14 16
15 namespace blink { 17 namespace blink {
16 18
19 class DragState;
20 class DataTransfer;
21 class Element;
22 class FloatQuad;
23 class HitTestResult;
24 class InputDeviceCapabilities;
17 class LocalFrame; 25 class LocalFrame;
26 class ScrollManager;
27
28 enum class DragInitiator;
18 29
19 // This class takes care of dispatching all mouse events and keeps track of 30 // This class takes care of dispatching all mouse events and keeps track of
20 // positions and states of mouse. 31 // positions and states of mouse.
21 class CORE_EXPORT MouseEventManager : public GarbageCollectedFinalized<MouseEven tManager> { 32 class CORE_EXPORT MouseEventManager : public GarbageCollectedFinalized<MouseEven tManager> {
22 WTF_MAKE_NONCOPYABLE(MouseEventManager); 33 WTF_MAKE_NONCOPYABLE(MouseEventManager);
23 34
24 public: 35 public:
25 explicit MouseEventManager(LocalFrame*); 36 explicit MouseEventManager(LocalFrame*, ScrollManager*);
37 ~MouseEventManager();
26 DECLARE_TRACE(); 38 DECLARE_TRACE();
27 39
28 WebInputEventResult dispatchMouseEvent( 40 WebInputEventResult dispatchMouseEvent(
29 EventTarget*, const AtomicString&, const PlatformMouseEvent&, 41 EventTarget*, const AtomicString&, const PlatformMouseEvent&,
30 EventTarget* relatedTarget, int detail = 0, 42 EventTarget* relatedTarget, bool checkForListener = false);
31 bool checkForListener = false); 43
44 WebInputEventResult dispatchMouseEvent(
45 Node* targetNode, const AtomicString& eventType,
46 const PlatformMouseEvent&);
47
48 WebInputEventResult dispatchMouseClickIfNeeded(
49 const MouseEventWithHitTestResults&);
50
51 WebInputEventResult dispatchDragSrcEvent(const AtomicString& eventType, cons t PlatformMouseEvent&);
52 WebInputEventResult dispatchDragEvent(const AtomicString& eventType, Node* t arget, const PlatformMouseEvent&, DataTransfer*);
32 53
33 // Resets the internal state of this object. 54 // Resets the internal state of this object.
34 void clear(); 55 void clear();
35 56
36 void sendBoundaryEvents( 57 void sendBoundaryEvents(
37 EventTarget* exitedTarget, 58 EventTarget* exitedTarget,
38 EventTarget* enteredTarget, 59 EventTarget* enteredTarget,
39 const PlatformMouseEvent& mousePlatformEvent); 60 const PlatformMouseEvent& mousePlatformEvent);
40 61
62 void setNodeUnderMouse(Node*, const PlatformMouseEvent&);
63
64 WebInputEventResult handleMouseFocus(const HitTestResult&, InputDeviceCapabi lities* sourceCapabilities);
65
66 void fakeMouseMoveEventTimerFired(TimerBase*);
67
68 void cancelFakeMouseMoveEvent();
69 void dispatchFakeMouseMoveEventSoon();
70 void dispatchFakeMouseMoveEventSoonInQuad(const FloatQuad&);
71
72 void setLastKnownMousePosition(const PlatformMouseEvent&);
73
74 bool handleDragDropIfPossible(const GestureEventWithHitTestResults&);
75
76 WebInputEventResult handleMouseDraggedEvent(const MouseEventWithHitTestResul ts&);
77 WebInputEventResult handleMousePressEvent(const MouseEventWithHitTestResults &);
78 WebInputEventResult handleMouseReleaseEvent(const MouseEventWithHitTestResul ts&);
79
80 void nodeWillBeRemoved(Node& nodeToBeRemoved);
81
82 static DragState& dragState();
dtapuska 2016/09/21 17:07:44 Is the intended DragState supposed to be one per t
Navid Zolghadr 2016/09/21 17:17:30 Since the variable is defined in this way as stati
83
84 void focusDocumentView();
85
86 // Resets the state that indicates the next events could cause a drag. It is called when
87 // we realize the next events should not cause drag based on the drag heuris tics.
88 void clearDragHeuristicState();
89
90 void dragSourceEndedAt(const PlatformMouseEvent&, DragOperation);
91
92 void updateSelectionForMouseDrag();
93
94 void handleMousePressEventUpdateStates(const PlatformMouseEvent&);
95
96 // Returns whether pan is handled.
mustaq 2016/09/21 17:28:14 also say: resets the state on release.
Navid Zolghadr 2016/09/23 11:11:16 Done.
97 bool handleSvgPanIfNeeded(bool isReleaseEvent);
98
99 void invalidateClick();
100
101
102 // TODO: These functions ideally should be private but the code needs more
103 // refactoring to be able to remove the dependency from EventHandler.
104 Node* getNodeUnderMouse();
105 bool isMousePositionUnknown();
106 IntPoint lastKnownMousePosition();
107
108 bool mousePressed();
109 void setMousePressed(bool);
110
111 bool capturesDragging() const;
112 void setCapturesDragging(bool);
113
114 void setMouseDownMayStartAutoscroll() { m_mouseDownMayStartAutoscroll = true ; }
115
116 Node* mousePressNode();
117 void setMousePressNode(Node*);
118
119 void setClickNode(Node*);
120 void setClickCount(int);
121
122 bool mouseDownMayStartDrag();
123
41 private: 124 private:
42 class MouseEventBoundaryEventDispatcher : public BoundaryEventDispatcher { 125 class MouseEventBoundaryEventDispatcher : public BoundaryEventDispatcher {
43 WTF_MAKE_NONCOPYABLE(MouseEventBoundaryEventDispatcher); 126 WTF_MAKE_NONCOPYABLE(MouseEventBoundaryEventDispatcher);
44 127
45 public: 128 public:
46 MouseEventBoundaryEventDispatcher(MouseEventManager*, 129 MouseEventBoundaryEventDispatcher(MouseEventManager*,
47 const PlatformMouseEvent*, EventTarget* exitedTarget); 130 const PlatformMouseEvent*, EventTarget* exitedTarget);
48 131
49 protected: 132 protected:
50 void dispatchOut(EventTarget*, EventTarget* relatedTarget) override; 133 void dispatchOut(EventTarget*, EventTarget* relatedTarget) override;
51 void dispatchOver(EventTarget*, EventTarget* relatedTarget) override; 134 void dispatchOver(EventTarget*, EventTarget* relatedTarget) override;
52 void dispatchLeave(EventTarget*, EventTarget* relatedTarget, bool checkF orListener) override; 135 void dispatchLeave(EventTarget*, EventTarget* relatedTarget, bool checkF orListener) override;
53 void dispatchEnter(EventTarget*, EventTarget* relatedTarget, bool checkF orListener) override; 136 void dispatchEnter(EventTarget*, EventTarget* relatedTarget, bool checkF orListener) override;
54 AtomicString getLeaveEvent() override; 137 AtomicString getLeaveEvent() override;
55 AtomicString getEnterEvent() override; 138 AtomicString getEnterEvent() override;
56 139
57 private: 140 private:
58 void dispatch(EventTarget*, EventTarget* relatedTarget, 141 void dispatch(EventTarget*, EventTarget* relatedTarget,
59 const AtomicString&, const PlatformMouseEvent&, 142 const AtomicString&, const PlatformMouseEvent&,
60 bool checkForListener); 143 bool checkForListener);
61 Member<MouseEventManager> m_mouseEventManager; 144 Member<MouseEventManager> m_mouseEventManager;
62 const PlatformMouseEvent* m_platformMouseEvent; 145 const PlatformMouseEvent* m_platformMouseEvent;
63 Member<EventTarget> m_exitedTarget; 146 Member<EventTarget> m_exitedTarget;
64 }; 147 };
65 148
149 // If the given element is a shadow host and its root has delegatesFocus=fal se flag,
150 // slide focus to its inner element. Returns true if the resulting focus is different from
151 // the given element.
152 bool slideFocusOnShadowHostIfNecessary(const Element&);
153
154 bool dragHysteresisExceeded(const IntPoint&) const;
155 bool handleDrag(const MouseEventWithHitTestResults&, DragInitiator);
156 bool tryStartDrag(const MouseEventWithHitTestResults&);
157 void clearDragDataTransfer();
158 DataTransfer* createDraggingDataTransfer() const;
159
66 // NOTE: If adding a new field to this class please ensure that it is 160 // NOTE: If adding a new field to this class please ensure that it is
67 // cleared in |MouseEventManager::clear()|. 161 // cleared in |MouseEventManager::clear()|.
68 162
69 const Member<LocalFrame> m_frame; 163 const Member<LocalFrame> m_frame;
164 Member<ScrollManager> m_scrollManager;
70 165
71 // The effective position of the mouse pointer. 166 // The effective position of the mouse pointer.
72 // See https://w3c.github.io/pointerevents/#dfn-tracking-the-effective-posit ion-of-the-legacy-mouse-pointer. 167 // See https://w3c.github.io/pointerevents/#dfn-tracking-the-effective-posit ion-of-the-legacy-mouse-pointer.
73 Member<Node> m_nodeUnderMouse; 168 Member<Node> m_nodeUnderMouse;
169
170 bool m_isMousePositionUnknown;
dtapuska 2016/09/21 17:07:44 We should probably use unsigned m_ : 1 for all the
Navid Zolghadr 2016/09/21 17:17:30 Sure. I'll do that.
171 // The last mouse movement position this frame has seen in root frame coordi nates.
172 IntPoint m_lastKnownMousePosition;
173 IntPoint m_lastKnownMouseGlobalPosition;
174
175 // Current button-press state for mouse/mouse-like-stylus.
176 // TODO(crbug.com/563676): Buggy for chorded buttons.
177 bool m_mousePressed;
178
179 bool m_mouseDownMayStartAutoscroll;
180
181 bool m_capturesDragging;
182 Member<Node> m_mousePressNode;
183
184 bool m_mouseDownMayStartDrag;
185
186 int m_clickCount;
187 Member<Node> m_clickNode;
188
189 IntPoint m_mouseDownPos; // In our view's coords.
190 double m_mouseDownTimestamp;
191 PlatformMouseEvent m_mouseDown;
192
193 bool m_svgPan;
194
195 LayoutPoint m_dragStartPos;
196
197 Timer<MouseEventManager> m_fakeMouseMoveEventTimer;
198
74 }; 199 };
75 200
76 } // namespace blink 201 } // namespace blink
77 202
78 #endif // MouseEventManager_h 203 #endif // MouseEventManager_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698