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

Unified Diff: Source/platform/mac/ScrollElasticityController.h

Issue 197213011: Selectively disable rubber banding on mac. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Update the behavior to be correct. :D Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: Source/platform/mac/ScrollElasticityController.h
diff --git a/Source/platform/mac/ScrollElasticityController.h b/Source/platform/mac/ScrollElasticityController.h
index 180e79c9335c9e0cd8c93f143b85de2e5f774eb4..911bff2f50724a3fb22ef88442ce489ec882db2c 100644
--- a/Source/platform/mac/ScrollElasticityController.h
+++ b/Source/platform/mac/ScrollElasticityController.h
@@ -44,10 +44,13 @@ protected:
public:
virtual bool allowsHorizontalStretching() = 0;
virtual bool allowsVerticalStretching() = 0;
+ // The amount that the view is stretched past the normal allowable bounds.
+ // The "overhang" amount.
virtual IntSize stretchAmount() = 0;
virtual bool pinnedInDirection(const FloatSize&) = 0;
virtual bool canScrollHorizontally() = 0;
virtual bool canScrollVertically() = 0;
+ // TODO(erikchen): This method is no longer used. Remove all references.
erikchen 2014/03/24 22:12:05 I left this as a TODO to try to keep this CL small
Alexei Svitkine (slow) 2014/03/25 15:25:40 SGTM.
virtual bool shouldRubberBandInDirection(ScrollDirection) = 0;
// Return the absolute scroll position, not relative to the scroll origin.
@@ -65,6 +68,18 @@ class ScrollElasticityController {
public:
explicit ScrollElasticityController(ScrollElasticityControllerClient*);
+ // This method is responsible for both scrolling and rubber-banding.
+ //
+ // Events are passed by IPC from the embedder. Events on mac are grouped
Alexei Svitkine (slow) 2014/03/25 15:25:40 Nit: Mac
erikchen 2014/03/26 18:24:30 Done.
+ // into "gestures". If this method returns 'true', then this object has
+ // handled the event. It expects the embedder to continue to forward events
+ // from the gesture.
+ //
+ // This method makes the assumption that there is only 1 input device being
+ // used at a time. If the user simultaneously uses multiple input devices,
+ // Cocoa does not correctly pass all the gestureBegin/End events. The state
+ // of this class is guaranteed to become eventually consistent, once the
+ // user stops using multiple input devices.
bool handleWheelEvent(const PlatformWheelEvent&);
void snapRubberBandTimerFired();
@@ -74,11 +89,30 @@ private:
void stopSnapRubberbandTimer();
void snapRubberBand();
- bool shouldRubberBandInHorizontalDirection(const PlatformWheelEvent&);
+ // This method determines whether a given event should be handled. The
+ // logic for control events of gestures (PhaseBegan, PhaseEnded) is handled
+ // elsewhere.
+ //
+ // This class handles almost all wheel events. All of the following
+ // conditions must be met for this class to ignore an event:
+ // + No previous events in this gesture have caused any scrolling or rubber
+ // banding.
+ // + The event contains a horizontal component.
+ // + The client's view is pinned in the horizontal direction of the event.
+ // + The wheel event disallows rubber banding in the horizontal direction
+ // of the event.
+ bool shouldHandleEvent(const PlatformWheelEvent&);
ScrollElasticityControllerClient* m_client;
+ // There is an active scroll gesture event. This parameter only gets set to
+ // false after the rubber band has been snapped, and before a new gesture
+ // has begun. A careful audit of the code may deprecate the need for this parameter.
Alexei Svitkine (slow) 2014/03/25 15:25:40 Nit: Wrap the end of this comment since everything
erikchen 2014/03/26 18:24:30 Done.
bool m_inScrollGesture;
+ // At least one event in the current gesture has been consumed and has
+ // caused the view to scroll or rubber band. All future events in this
+ // gesture will be consumed and overscrolls will cause rubberbanding.
+ bool m_hasScrolled;
bool m_momentumScrollInProgress;
bool m_ignoreMomentumScrolls;

Powered by Google App Engine
This is Rietveld 408576698