Changeset 283296 in webkit
- Timestamp:
- Sep 29, 2021, 7:33:01 PM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
-
ChangeLog (modified) (1 diff)
-
platform/PlatformWheelEvent.h (modified) (1 diff)
-
platform/ScrollingEffectsController.h (modified) (1 diff)
-
platform/mac/ScrollingEffectsController.mm (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r283295 r283296 1 2021-09-29 Simon Fraser <simon.fraser@apple.com> 2 3 Minor cleanup of some rubber-banding code in ScrollingEffectsController 4 https://bugs.webkit.org/show_bug.cgi?id=230981 5 6 Reviewed by Tim Horton. 7 8 As a precursor to unraveling some of the complexity of the rubber-banding code, 9 tidy up naming and code in ScrollingEffectsController::handleWheelEvent(). No 10 behavior change. 11 12 * platform/PlatformWheelEvent.h: 13 (WebCore::PlatformWheelEvent::unacceleratedScrollingDelta const): 14 (WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaX const): Deleted. 15 (WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaY const): Deleted. 16 * platform/ScrollingEffectsController.h: 17 * platform/mac/ScrollingEffectsController.mm: 18 (WebCore::convertToProminentAxisFavoringVertical): 19 (WebCore::ScrollingEffectsController::handleWheelEvent): 20 (WebCore::ScrollingEffectsController::wheelDeltaBiasingTowardsVertical): 21 1 22 2021-09-29 Chris Dumez <cdumez@apple.com> 2 23 -
trunk/Source/WebCore/platform/PlatformWheelEvent.h
r283068 r283296 151 151 #if PLATFORM(COCOA) 152 152 unsigned scrollCount() const { return m_scrollCount; } 153 float unacceleratedScrollingDeltaX() const { return m_unacceleratedScrollingDeltaX; } 154 float unacceleratedScrollingDeltaY() const { return m_unacceleratedScrollingDeltaY; } 153 FloatSize unacceleratedScrollingDelta() const { return { m_unacceleratedScrollingDeltaX, m_unacceleratedScrollingDeltaY }; } 155 154 #endif 156 155 -
trunk/Source/WebCore/platform/ScrollingEffectsController.h
r283068 r283296 235 235 #if PLATFORM(MAC) 236 236 WallTime m_lastMomentumScrollTimestamp; 237 FloatSize m_ overflowScrollDelta;237 FloatSize m_unappliedOverscrollDelta; 238 238 FloatSize m_stretchScrollForce; 239 239 FloatSize m_momentumVelocity; -
trunk/Source/WebCore/platform/mac/ScrollingEffectsController.mm
r283072 r283296 84 84 } 85 85 86 87 static FloatSize convertToProminentAxisFavoringVertical(FloatSize delta) 88 { 89 if (fabsf(delta.height()) >= fabsf(delta.width())) 90 return { 0, delta.height() }; 91 92 return { delta.width(), 0 }; 93 } 94 86 95 bool ScrollingEffectsController::handleWheelEvent(const PlatformWheelEvent& wheelEvent) 87 96 { … … 110 119 m_stretchScrollForce.setWidth(reboundDeltaForElasticDelta(stretchAmount.width())); 111 120 m_stretchScrollForce.setHeight(reboundDeltaForElasticDelta(stretchAmount.height())); 112 m_ overflowScrollDelta = { };121 m_unappliedOverscrollDelta = { }; 113 122 114 123 stopSnapRubberbandAnimation(); … … 137 146 } 138 147 139 float deltaX = m_overflowScrollDelta.width(); 140 float deltaY = m_overflowScrollDelta.height(); 141 142 // Reset overflow values because we may decide to remove delta at various points and put it into overflow. 143 m_overflowScrollDelta = { }; 148 // Reset unapplied overscroll because we may decide to remove delta at various points and put it into this value. 149 auto delta = std::exchange(m_unappliedOverscrollDelta, { }); 144 150 145 151 IntSize stretchAmount = m_client.stretchAmount(); … … 147 153 bool isHorizontallyStretched = stretchAmount.width(); 148 154 149 float eventCoalescedDeltaX; 150 float eventCoalescedDeltaY; 151 152 if (isVerticallyStretched || isHorizontallyStretched) { 153 eventCoalescedDeltaX = -wheelEvent.unacceleratedScrollingDeltaX(); 154 eventCoalescedDeltaY = -wheelEvent.unacceleratedScrollingDeltaY(); 155 } else { 156 eventCoalescedDeltaX = -wheelEvent.deltaX(); 157 eventCoalescedDeltaY = -wheelEvent.deltaY(); 158 } 159 160 deltaX += eventCoalescedDeltaX; 161 deltaY += eventCoalescedDeltaY; 162 163 // Slightly prefer scrolling vertically by applying the = case to deltaY 164 // FIXME: Use wheelDeltaBiasingTowardsVertical(). 165 if (fabsf(deltaY) >= fabsf(deltaX)) 166 deltaX = 0; 167 else 168 deltaY = 0; 155 auto eventCoalescedDelta = (isVerticallyStretched || isHorizontallyStretched) ? -wheelEvent.unacceleratedScrollingDelta() : -wheelEvent.delta(); 156 delta += eventCoalescedDelta; 157 158 delta = convertToProminentAxisFavoringVertical(delta); 159 float deltaX = delta.width(); 160 float deltaY = delta.height(); 169 161 170 162 bool shouldStretch = false; 171 163 172 PlatformWheelEventPhase momentumPhase = wheelEvent.momentumPhase(); 173 174 // If we are starting momentum scrolling then do some setup. 164 auto momentumPhase = wheelEvent.momentumPhase(); 165 175 166 if (!m_momentumScrollInProgress && (momentumPhase == PlatformWheelEventPhase::Began || momentumPhase == PlatformWheelEventPhase::Changed)) 176 167 m_momentumScrollInProgress = true; … … 179 170 if (m_inScrollGesture || m_momentumScrollInProgress) { 180 171 if (m_lastMomentumScrollTimestamp && timeDelta > 0_s && timeDelta < scrollVelocityZeroingTimeout) { 181 m_momentumVelocity.setWidth(eventCoalescedDeltaX / timeDelta.seconds()); 182 m_momentumVelocity.setHeight(eventCoalescedDeltaY / timeDelta.seconds()); 172 m_momentumVelocity = eventCoalescedDelta / timeDelta.seconds(); 183 173 m_lastMomentumScrollTimestamp = wheelEvent.timestamp(); 184 174 } else { 185 175 m_lastMomentumScrollTimestamp = wheelEvent.timestamp(); 186 m_momentumVelocity = FloatSize();176 m_momentumVelocity = { }; 187 177 } 188 178 … … 193 183 deltaX = 0; 194 184 else if (fabsf(deltaX) < rubberbandMinimumRequiredDeltaBeforeStretch) { 195 m_ overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);185 m_unappliedOverscrollDelta.expand(deltaX, 0); 196 186 deltaX = 0; 197 187 } else 198 m_ overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);188 m_unappliedOverscrollDelta.expand(deltaX, 0); 199 189 } 200 190 } else if (isHorizontallyStretched) { … … 204 194 deltaY = 0; 205 195 else if (fabsf(deltaY) < rubberbandMinimumRequiredDeltaBeforeStretch) { 206 m_ overflowScrollDelta.setHeight(m_overflowScrollDelta.height() +deltaY);196 m_unappliedOverscrollDelta.expand(0, deltaY); 207 197 deltaY = 0; 208 198 } else 209 m_ overflowScrollDelta.setHeight(m_overflowScrollDelta.height() +deltaY);199 m_unappliedOverscrollDelta.expand(0, deltaY); 210 200 } 211 201 } else { … … 214 204 if (fabsf(deltaY) >= fabsf(deltaX)) { 215 205 if (fabsf(deltaX) < rubberbandMinimumRequiredDeltaBeforeStretch) { 216 m_ overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);206 m_unappliedOverscrollDelta.expand(deltaX, 0); 217 207 deltaX = 0; 218 208 } else 219 m_ overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);209 m_unappliedOverscrollDelta.expand(deltaX, 0); 220 210 } 221 211 … … 247 237 if (!m_client.allowsHorizontalStretching(wheelEvent)) { 248 238 deltaX = 0; 249 eventCoalescedDelta X = 0;239 eventCoalescedDelta.setWidth(0); 250 240 handled = false; 251 241 } else if (!isHorizontallyStretched && !m_client.isPinnedForScrollDelta(FloatSize(deltaX, 0))) { … … 260 250 if (!m_client.allowsVerticalStretching(wheelEvent)) { 261 251 deltaY = 0; 262 eventCoalescedDelta Y = 0;252 eventCoalescedDelta.setHeight(0); 263 253 handled = false; 264 254 } else if (!isVerticallyStretched && !m_client.isPinnedForScrollDelta(FloatSize(0, deltaY))) { … … 273 263 274 264 if (m_momentumScrollInProgress) { 275 if ((m_client.isPinnedForScrollDelta( FloatSize(eventCoalescedDeltaX, eventCoalescedDeltaY)) || (fabsf(eventCoalescedDeltaX) + fabsf(eventCoalescedDeltaY) <= 0)) && m_lastMomentumScrollTimestamp) {265 if ((m_client.isPinnedForScrollDelta(eventCoalescedDelta) || eventCoalescedDelta.isZero()) && m_lastMomentumScrollTimestamp) { 276 266 m_ignoreMomentumScrolls = true; 277 267 m_momentumScrollInProgress = false; … … 285 275 FloatSize dampedDelta(ceilf(elasticDeltaForReboundDelta(m_stretchScrollForce.width())), ceilf(elasticDeltaForReboundDelta(m_stretchScrollForce.height()))); 286 276 287 LOG_WITH_STREAM(ScrollAnimations, stream << "ScrollingEffectsController::handleWheelEvent() - overscrolled by " << m_overflowScrollDelta << "stretchScrollForce " << m_stretchScrollForce << " move delta " << FloatSize(deltaX, deltaY) << " dampedDelta " << dampedDelta);277 LOG_WITH_STREAM(ScrollAnimations, stream << "ScrollingEffectsController::handleWheelEvent() - stretchScrollForce " << m_stretchScrollForce << " move delta " << FloatSize(deltaX, deltaY) << " dampedDelta " << dampedDelta); 288 278 289 279 m_client.immediateScrollByWithoutContentEdgeConstraints(dampedDelta - stretchAmount); … … 304 294 FloatSize ScrollingEffectsController::wheelDeltaBiasingTowardsVertical(const PlatformWheelEvent& wheelEvent) 305 295 { 306 auto deltaX = wheelEvent.deltaX(); 307 auto deltaY = wheelEvent.deltaY(); 308 309 if (fabsf(deltaY) >= fabsf(deltaX)) 310 deltaX = 0; 311 else 312 deltaY = 0; 313 314 return { deltaX, deltaY }; 296 return convertToProminentAxisFavoringVertical(wheelEvent.delta()); 315 297 } 316 298
Note:
See TracChangeset
for help on using the changeset viewer.