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

Side by Side Diff: Source/core/page/EventHandler.h

Issue 338543003: Gesture event hit test refactoring and reduction (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix release build Created 6 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/dom/Document.cpp ('k') | Source/core/page/EventHandler.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 #include "wtf/Forward.h" 42 #include "wtf/Forward.h"
43 #include "wtf/HashMap.h" 43 #include "wtf/HashMap.h"
44 #include "wtf/HashTraits.h" 44 #include "wtf/HashTraits.h"
45 #include "wtf/RefPtr.h" 45 #include "wtf/RefPtr.h"
46 46
47 namespace WebCore { 47 namespace WebCore {
48 48
49 class AutoscrollController; 49 class AutoscrollController;
50 class DataTransfer; 50 class DataTransfer;
51 class Document; 51 class Document;
52 class DragState;
52 class Element; 53 class Element;
53 class Event; 54 class Event;
54 class EventTarget; 55 class EventTarget;
56 template <typename EventType>
57 class EventWithHitTestResults;
55 class FloatPoint; 58 class FloatPoint;
56 class FloatQuad; 59 class FloatQuad;
57 class FullscreenElementStack; 60 class FullscreenElementStack;
58 class LocalFrame;
59 class HTMLFrameSetElement; 61 class HTMLFrameSetElement;
60 class HitTestRequest; 62 class HitTestRequest;
61 class HitTestResult; 63 class HitTestResult;
62 class KeyboardEvent; 64 class KeyboardEvent;
63 class MouseEventWithHitTestResults; 65 class LocalFrame;
64 class Node; 66 class Node;
65 class OptionalCursor; 67 class OptionalCursor;
66 class PlatformGestureEvent; 68 class PlatformGestureEvent;
67 class PlatformKeyboardEvent; 69 class PlatformKeyboardEvent;
68 class PlatformTouchEvent; 70 class PlatformTouchEvent;
69 class PlatformWheelEvent; 71 class PlatformWheelEvent;
70 class RenderLayer; 72 class RenderLayer;
71 class RenderLayerScrollableArea; 73 class RenderLayerScrollableArea;
72 class RenderObject; 74 class RenderObject;
73 class RenderWidget; 75 class RenderWidget;
74 class ScrollableArea; 76 class ScrollableArea;
75 class Scrollbar; 77 class Scrollbar;
76 class TextEvent; 78 class TextEvent;
77 class TouchEvent; 79 class TouchEvent;
78 class VisibleSelection; 80 class VisibleSelection;
79 class WheelEvent; 81 class WheelEvent;
80 class Widget; 82 class Widget;
81 83
82 class DragState; 84 typedef EventWithHitTestResults<PlatformGestureEvent> GestureEventWithHitTestRes ults;
85 typedef EventWithHitTestResults<PlatformMouseEvent> MouseEventWithHitTestResults ;
83 86
84 enum AppendTrailingWhitespace { ShouldAppendTrailingWhitespace, DontAppendTraili ngWhitespace }; 87 enum AppendTrailingWhitespace { ShouldAppendTrailingWhitespace, DontAppendTraili ngWhitespace };
85 enum CheckDragHysteresis { ShouldCheckDragHysteresis, DontCheckDragHysteresis }; 88 enum CheckDragHysteresis { ShouldCheckDragHysteresis, DontCheckDragHysteresis };
86 89
87 class EventHandler : public NoBaseWillBeGarbageCollectedFinalized<EventHandler> { 90 class EventHandler : public NoBaseWillBeGarbageCollectedFinalized<EventHandler> {
88 WTF_MAKE_NONCOPYABLE(EventHandler); 91 WTF_MAKE_NONCOPYABLE(EventHandler);
89 public: 92 public:
90 explicit EventHandler(LocalFrame*); 93 explicit EventHandler(LocalFrame*);
91 ~EventHandler(); 94 ~EventHandler();
92 void trace(Visitor*); 95 void trace(Visitor*);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 bool bubblingScroll(ScrollDirection, ScrollGranularity, Node* startingNode = 0); 139 bool bubblingScroll(ScrollDirection, ScrollGranularity, Node* startingNode = 0);
137 140
138 bool handleMouseMoveEvent(const PlatformMouseEvent&); 141 bool handleMouseMoveEvent(const PlatformMouseEvent&);
139 void handleMouseLeaveEvent(const PlatformMouseEvent&); 142 void handleMouseLeaveEvent(const PlatformMouseEvent&);
140 143
141 bool handleMousePressEvent(const PlatformMouseEvent&); 144 bool handleMousePressEvent(const PlatformMouseEvent&);
142 bool handleMouseReleaseEvent(const PlatformMouseEvent&); 145 bool handleMouseReleaseEvent(const PlatformMouseEvent&);
143 bool handleWheelEvent(const PlatformWheelEvent&); 146 bool handleWheelEvent(const PlatformWheelEvent&);
144 void defaultWheelEventHandler(Node*, WheelEvent*); 147 void defaultWheelEventHandler(Node*, WheelEvent*);
145 148
149 // Called on the local root frame exactly once per gesture event.
146 bool handleGestureEvent(const PlatformGestureEvent&); 150 bool handleGestureEvent(const PlatformGestureEvent&);
151
152 // Hit-test the provided (non-scroll) gesture event, applying touch-adjustme nt and updating
153 // hover/active state across all frames if necessary. This should be called at most once
154 // per gesture event, and called on the local root frame.
155 // Note: This is similar to (the less clearly named) prepareMouseEvent.
156 // FIXME: Remove readOnly param when there is only ever a single call to thi s.
157 GestureEventWithHitTestResults targetGestureEvent(const PlatformGestureEvent &, bool readOnly = false);
158
159 // Handle the provided non-scroll gesture event. Should be called only on th e inner frame.
160 bool handleGestureEventInFrame(const GestureEventWithHitTestResults&);
161
162 // Handle the provided scroll gesture event, propagating down to child frame s as necessary.
163 bool handleGestureScrollEvent(const PlatformGestureEvent&);
147 bool handleGestureScrollEnd(const PlatformGestureEvent&); 164 bool handleGestureScrollEnd(const PlatformGestureEvent&);
148 bool isScrollbarHandlingGestures() const; 165 bool isScrollbarHandlingGestures() const;
149 166
150 bool bestClickableNodeForTouchPoint(const IntPoint& touchCenter, const IntSi ze& touchRadius, IntPoint& targetPoint, Node*& targetNode); 167 bool bestClickableNodeForHitTestResult(const HitTestResult&, IntPoint& targe tPoint, Node*& targetNode);
151 bool bestContextMenuNodeForTouchPoint(const IntPoint& touchCenter, const Int Size& touchRadius, IntPoint& targetPoint, Node*& targetNode); 168 bool bestContextMenuNodeForHitTestResult(const HitTestResult&, IntPoint& tar getPoint, Node*& targetNode);
169 // FIXME: This doesn't appear to be used outside tests anymore, what path ar e we using now and is it tested?
152 bool bestZoomableAreaForTouchPoint(const IntPoint& touchCenter, const IntSiz e& touchRadius, IntRect& targetArea, Node*& targetNode); 170 bool bestZoomableAreaForTouchPoint(const IntPoint& touchCenter, const IntSiz e& touchRadius, IntRect& targetArea, Node*& targetNode);
153 171
154 void adjustGesturePosition(const PlatformGestureEvent&, IntPoint& adjustedPo int);
155
156 bool sendContextMenuEvent(const PlatformMouseEvent&); 172 bool sendContextMenuEvent(const PlatformMouseEvent&);
157 bool sendContextMenuEventForKey(); 173 bool sendContextMenuEventForKey();
158 bool sendContextMenuEventForGesture(const PlatformGestureEvent&); 174 bool sendContextMenuEventForGesture(const GestureEventWithHitTestResults&);
159 175
160 void setMouseDownMayStartAutoscroll() { m_mouseDownMayStartAutoscroll = true ; } 176 void setMouseDownMayStartAutoscroll() { m_mouseDownMayStartAutoscroll = true ; }
161 177
162 static unsigned accessKeyModifiers(); 178 static unsigned accessKeyModifiers();
163 bool handleAccessKey(const PlatformKeyboardEvent&); 179 bool handleAccessKey(const PlatformKeyboardEvent&);
164 bool keyEvent(const PlatformKeyboardEvent&); 180 bool keyEvent(const PlatformKeyboardEvent&);
165 void defaultKeyboardEventHandler(KeyboardEvent*); 181 void defaultKeyboardEventHandler(KeyboardEvent*);
166 182
167 bool handleTextInputEvent(const String& text, Event* underlyingEvent = 0, Te xtEventInputType = TextEventInputKeyboard); 183 bool handleTextInputEvent(const String& text, Event* underlyingEvent = 0, Te xtEventInputType = TextEventInputKeyboard);
168 void defaultTextInputEventHandler(TextEvent*); 184 void defaultTextInputEventHandler(TextEvent*);
(...skipping 28 matching lines...) Expand all
197 bool handleMousePressEvent(const MouseEventWithHitTestResults&); 213 bool handleMousePressEvent(const MouseEventWithHitTestResults&);
198 bool handleMousePressEventSingleClick(const MouseEventWithHitTestResults&); 214 bool handleMousePressEventSingleClick(const MouseEventWithHitTestResults&);
199 bool handleMousePressEventDoubleClick(const MouseEventWithHitTestResults&); 215 bool handleMousePressEventDoubleClick(const MouseEventWithHitTestResults&);
200 bool handleMousePressEventTripleClick(const MouseEventWithHitTestResults&); 216 bool handleMousePressEventTripleClick(const MouseEventWithHitTestResults&);
201 bool handleMouseFocus(const PlatformMouseEvent&); 217 bool handleMouseFocus(const PlatformMouseEvent&);
202 bool handleMouseDraggedEvent(const MouseEventWithHitTestResults&); 218 bool handleMouseDraggedEvent(const MouseEventWithHitTestResults&);
203 bool handleMouseReleaseEvent(const MouseEventWithHitTestResults&); 219 bool handleMouseReleaseEvent(const MouseEventWithHitTestResults&);
204 220
205 bool handlePasteGlobalSelection(const PlatformMouseEvent&); 221 bool handlePasteGlobalSelection(const PlatformMouseEvent&);
206 222
207 bool handleGestureTap(const PlatformGestureEvent&, const IntPoint& adjustedP oint); 223 HitTestRequest::HitTestRequestType getHitTypeForGestureType(PlatformEvent::T ype);
208 bool handleGestureLongPress(const PlatformGestureEvent&, const IntPoint& adj ustedPoint); 224 void applyTouchAdjustment(PlatformGestureEvent*, HitTestResult*);
209 bool handleGestureLongTap(const PlatformGestureEvent&, const IntPoint& adjus tedPoint); 225 bool handleGestureTap(const GestureEventWithHitTestResults&);
210 bool handleGestureTwoFingerTap(const PlatformGestureEvent&, const IntPoint& adjustedPoint); 226 bool handleGestureLongPress(const GestureEventWithHitTestResults&);
227 bool handleGestureLongTap(const GestureEventWithHitTestResults&);
211 bool handleGestureScrollUpdate(const PlatformGestureEvent&); 228 bool handleGestureScrollUpdate(const PlatformGestureEvent&);
212 bool handleGestureScrollBegin(const PlatformGestureEvent&); 229 bool handleGestureScrollBegin(const PlatformGestureEvent&);
213 void clearGestureScrollNodes(); 230 void clearGestureScrollNodes();
214 231
215 bool shouldApplyTouchAdjustment(const PlatformGestureEvent&) const; 232 bool shouldApplyTouchAdjustment(const PlatformGestureEvent&) const;
216 233
217 OptionalCursor selectCursor(const HitTestResult&); 234 OptionalCursor selectCursor(const HitTestResult&);
218 OptionalCursor selectAutoCursor(const HitTestResult&, Node*, const Cursor& i Beam); 235 OptionalCursor selectAutoCursor(const HitTestResult&, Node*, const Cursor& i Beam);
219 236
220 void hoverTimerFired(Timer<EventHandler>*); 237 void hoverTimerFired(Timer<EventHandler>*);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 void setFrameWasScrolledByUser(); 309 void setFrameWasScrolledByUser();
293 310
294 bool capturesDragging() const { return m_capturesDragging; } 311 bool capturesDragging() const { return m_capturesDragging; }
295 312
296 bool isKeyEventAllowedInFullScreen(FullscreenElementStack*, const PlatformKe yboardEvent&) const; 313 bool isKeyEventAllowedInFullScreen(FullscreenElementStack*, const PlatformKe yboardEvent&) const;
297 314
298 bool handleGestureShowPress(); 315 bool handleGestureShowPress();
299 316
300 bool handleScrollGestureOnResizer(Node*, const PlatformGestureEvent&); 317 bool handleScrollGestureOnResizer(Node*, const PlatformGestureEvent&);
301 318
302 bool passGestureEventToWidget(const PlatformGestureEvent&, Widget*); 319 bool passScrollGestureEventToWidget(const PlatformGestureEvent&, RenderObjec t*);
303 bool passGestureEventToWidgetIfPossible(const PlatformGestureEvent&, RenderO bject*);
304 bool sendScrollEventToView(const PlatformGestureEvent&, const FloatSize&); 320 bool sendScrollEventToView(const PlatformGestureEvent&, const FloatSize&);
305 LocalFrame* getSubFrameForGestureEvent(const IntPoint& touchAdjustedPoint, c onst PlatformGestureEvent&);
306 321
307 AutoscrollController* autoscrollController() const; 322 AutoscrollController* autoscrollController() const;
308 bool panScrollInProgress() const; 323 bool panScrollInProgress() const;
309 void setLastKnownMousePosition(const PlatformMouseEvent&); 324 void setLastKnownMousePosition(const PlatformMouseEvent&);
310 325
311 LocalFrame* const m_frame; 326 LocalFrame* const m_frame;
312 327
313 bool m_mousePressed; 328 bool m_mousePressed;
314 bool m_capturesDragging; 329 bool m_capturesDragging;
315 RefPtrWillBeMember<Node> m_mousePressNode; 330 RefPtrWillBeMember<Node> m_mousePressNode;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 typedef WillBeHeapHashMap<unsigned, RefPtrWillBeMember<EventTarget>, Default Hash<unsigned>::Hash, WTF::UnsignedWithZeroKeyHashTraits<unsigned> > TouchTarget Map; 385 typedef WillBeHeapHashMap<unsigned, RefPtrWillBeMember<EventTarget>, Default Hash<unsigned>::Hash, WTF::UnsignedWithZeroKeyHashTraits<unsigned> > TouchTarget Map;
371 TouchTargetMap m_targetForTouchID; 386 TouchTargetMap m_targetForTouchID;
372 387
373 // If set, the document of the active touch sequence. Unset if no touch sequ ence active. 388 // If set, the document of the active touch sequence. Unset if no touch sequ ence active.
374 RefPtrWillBeMember<Document> m_touchSequenceDocument; 389 RefPtrWillBeMember<Document> m_touchSequenceDocument;
375 RefPtr<UserGestureToken> m_touchSequenceUserGestureToken; 390 RefPtr<UserGestureToken> m_touchSequenceUserGestureToken;
376 391
377 bool m_touchPressed; 392 bool m_touchPressed;
378 393
379 RefPtrWillBeMember<Node> m_scrollGestureHandlingNode; 394 RefPtrWillBeMember<Node> m_scrollGestureHandlingNode;
380 bool m_lastHitTestResultOverWidget; 395 bool m_lastGestureScrollOverWidget;
381 RefPtrWillBeMember<Node> m_previousGestureScrolledNode; 396 RefPtrWillBeMember<Node> m_previousGestureScrolledNode;
382 RefPtr<Scrollbar> m_scrollbarHandlingScrollGesture; 397 RefPtr<Scrollbar> m_scrollbarHandlingScrollGesture;
383 398
384 double m_maxMouseMovedDuration; 399 double m_maxMouseMovedDuration;
385 PlatformEvent::Type m_baseEventType;
386 bool m_didStartDrag; 400 bool m_didStartDrag;
387 401
388 bool m_longTapShouldInvokeContextMenu; 402 bool m_longTapShouldInvokeContextMenu;
389 403
390 Timer<EventHandler> m_activeIntervalTimer; 404 Timer<EventHandler> m_activeIntervalTimer;
391 double m_lastShowPressTimestamp; 405 double m_lastShowPressTimestamp;
392 RefPtrWillBeMember<Element> m_lastDeferredTapElement; 406 RefPtrWillBeMember<Element> m_lastDeferredTapElement;
393 }; 407 };
394 408
395 } // namespace WebCore 409 } // namespace WebCore
396 410
397 #endif // EventHandler_h 411 #endif // EventHandler_h
OLDNEW
« no previous file with comments | « Source/core/dom/Document.cpp ('k') | Source/core/page/EventHandler.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698