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

Side by Side Diff: Source/platform/mac/ScrollElasticityController.mm

Issue 197213011: Selectively disable rubber banding on mac. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 : m_client(client) 100 : m_client(client)
101 , m_inScrollGesture(false) 101 , m_inScrollGesture(false)
102 , m_momentumScrollInProgress(false) 102 , m_momentumScrollInProgress(false)
103 , m_ignoreMomentumScrolls(false) 103 , m_ignoreMomentumScrolls(false)
104 , m_lastMomentumScrollTimestamp(0) 104 , m_lastMomentumScrollTimestamp(0)
105 , m_startTime(0) 105 , m_startTime(0)
106 , m_snapRubberbandTimerIsActive(false) 106 , m_snapRubberbandTimerIsActive(false)
107 { 107 {
108 } 108 }
109 109
110 bool ScrollElasticityController::handleWheelEvent(const PlatformWheelEvent& whee lEvent) 110 // |canRubberbandLeft| and |canRubberbandRight| prevent the start of rubber-band ing in their respective directions.
111 // Once rubber banding has started, the two parameters have no effect.
112 bool ScrollElasticityController::handleWheelEvent(const PlatformWheelEvent& whee lEvent, bool canRubberbandLeft, bool canRubberbandRight)
111 { 113 {
112 if (wheelEvent.phase() == PlatformWheelEventPhaseBegan) { 114 if (wheelEvent.phase() == PlatformWheelEventPhaseBegan) {
115 // Don't allow rubber banding to start in a direction that explicitly di sallows rubberbanding.
116 if (!canRubberbandLeft && wheelEvent.deltaX() > 0) {
117 printf("cannot rubberband left");
118 return false;
119 }
120 if (!canRubberbandRight && wheelEvent.deltaX() < 0) {
121 printf("cannot rubberband right");
122 return false;
123 }
124
125
113 // First, check if we should rubber-band at all. 126 // First, check if we should rubber-band at all.
114 if (m_client->pinnedInDirection(FloatSize(-wheelEvent.deltaX(), 0)) && 127 if (m_client->pinnedInDirection(FloatSize(-wheelEvent.deltaX(), 0)) &&
115 !shouldRubberBandInHorizontalDirection(wheelEvent)) 128 !shouldRubberBandInHorizontalDirection(wheelEvent))
Nico 2014/03/14 17:51:46 Should the checks be in shouldRubberBandInHorizont
erikchen 2014/03/20 18:04:26 I've moved all the relevant logic into the method.
116 return false; 129 return false;
117 130
118 m_inScrollGesture = true; 131 m_inScrollGesture = true;
119 m_momentumScrollInProgress = false; 132 m_momentumScrollInProgress = false;
120 m_ignoreMomentumScrolls = false; 133 m_ignoreMomentumScrolls = false;
121 m_lastMomentumScrollTimestamp = 0; 134 m_lastMomentumScrollTimestamp = 0;
122 m_momentumVelocity = FloatSize(); 135 m_momentumVelocity = FloatSize();
123 136
124 IntSize stretchAmount = m_client->stretchAmount(); 137 IntSize stretchAmount = m_client->stretchAmount();
125 m_stretchScrollForce.setWidth(reboundDeltaForElasticDelta(stretchAmount. width())); 138 m_stretchScrollForce.setWidth(reboundDeltaForElasticDelta(stretchAmount. width()));
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 deltaX = 0; 191 deltaX = 0;
179 else 192 else
180 deltaY = 0; 193 deltaY = 0;
181 194
182 bool shouldStretch = false; 195 bool shouldStretch = false;
183 196
184 PlatformWheelEventPhase momentumPhase = wheelEvent.momentumPhase(); 197 PlatformWheelEventPhase momentumPhase = wheelEvent.momentumPhase();
185 198
186 // If we are starting momentum scrolling then do some setup. 199 // If we are starting momentum scrolling then do some setup.
187 if (!m_momentumScrollInProgress && (momentumPhase == PlatformWheelEventPhase Began || momentumPhase == PlatformWheelEventPhaseChanged)) { 200 if (!m_momentumScrollInProgress && (momentumPhase == PlatformWheelEventPhase Began || momentumPhase == PlatformWheelEventPhaseChanged)) {
201 // Momentum events should not trigger rubber banding in a disallowed dir ection.
202 if (!canRubberbandLeft && wheelEvent.deltaX() > 0) {
203 return false;
204 }
205 if (!canRubberbandRight && wheelEvent.deltaX() < 0) {
206 return false;
207 }
188 m_momentumScrollInProgress = true; 208 m_momentumScrollInProgress = true;
189 // Start the snap rubber band timer if it's not running. This is needed to 209 // Start the snap rubber band timer if it's not running. This is needed to
190 // snap back from the over scroll caused by momentum events. 210 // snap back from the over scroll caused by momentum events.
191 if (!m_snapRubberbandTimerIsActive && m_startTime == 0) 211 if (!m_snapRubberbandTimerIsActive && m_startTime == 0)
192 snapRubberBand(); 212 snapRubberBand();
193 } 213 }
194 214
195 CFTimeInterval timeDelta = wheelEvent.timestamp() - m_lastMomentumScrollTime stamp; 215 CFTimeInterval timeDelta = wheelEvent.timestamp() - m_lastMomentumScrollTime stamp;
196 if (m_inScrollGesture || m_momentumScrollInProgress) { 216 if (m_inScrollGesture || m_momentumScrollInProgress) {
197 if (m_lastMomentumScrollTimestamp && timeDelta > 0 && timeDelta < scroll VelocityZeroingTimeout) { 217 if (m_lastMomentumScrollTimestamp && timeDelta > 0 && timeDelta < scroll VelocityZeroingTimeout) {
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 return m_client->shouldRubberBandInDirection(ScrollLeft); 439 return m_client->shouldRubberBandInDirection(ScrollLeft);
420 if (wheelEvent.deltaX() < 0) 440 if (wheelEvent.deltaX() < 0)
421 return m_client->shouldRubberBandInDirection(ScrollRight); 441 return m_client->shouldRubberBandInDirection(ScrollRight);
422 442
423 return true; 443 return true;
424 } 444 }
425 445
426 } // namespace WebCore 446 } // namespace WebCore
427 447
428 #endif // USE(RUBBER_BANDING) 448 #endif // USE(RUBBER_BANDING)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698