Changeset 209087 in webkit
- Timestamp:
- Nov 29, 2016 1:12:26 PM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r209086 r209087 1 2016-11-29 Wenson Hsieh <wenson_hsieh@apple.com> 2 3 Address post-review feedback following r209070 (AppKit momentum scrolling adoption for scroll snapping) 4 https://bugs.webkit.org/show_bug.cgi?id=165147 5 6 Reviewed by Simon Fraser. 7 8 Addresses some additional review feedback after r209070, which adopts _NSScrollingMomentumCalculator for scroll 9 snapping. See individual changes below for more details. No new tests, since there is no behavior change. 10 11 * page/EventHandler.cpp: 12 (WebCore::handleWheelEventInAppropriateEnclosingBox): 13 (WebCore::EventHandler::defaultWheelEventHandler): 14 * page/Page.cpp: 15 (WebCore::Page::ensureTestTrigger): 16 * page/WheelEventDeltaFilter.cpp: 17 (WebCore::WheelEventDeltaFilter::filteredVelocity): 18 * page/WheelEventDeltaFilter.h: 19 * page/mac/WheelEventDeltaFilterMac.mm: 20 (WebCore::WheelEventDeltaFilterMac::updateFromDelta): 21 * page/scrolling/AsyncScrollingCoordinator.cpp: 22 (WebCore::AsyncScrollingCoordinator::updateExpectsWheelEventTestTriggerWithFrameView): 23 * page/scrolling/AsyncScrollingCoordinator.h: 24 * page/scrolling/ScrollingCoordinator.h: 25 (WebCore::ScrollingCoordinator::updateExpectsWheelEventTestTriggerWithFrameView): 26 27 Rather than force a complete layout pass when the Page first acquires a WheelEventTestTrigger, we now simply 28 have the scrolling coordinator update its frame node to expect a wheel event test trigger. 29 30 * page/scrolling/ScrollingMomentumCalculator.cpp: 31 (WebCore::ScrollingMomentumCalculator::ScrollingMomentumCalculator): 32 (WebCore::ScrollingMomentumCalculator::create): 33 (WebCore::BasicScrollingMomentumCalculator::BasicScrollingMomentumCalculator): 34 (WebCore::BasicScrollingMomentumCalculator::scrollOffsetAfterElapsedTime): 35 (WebCore::BasicScrollingMomentumCalculator::animationDuration): 36 (WebCore::BasicScrollingMomentumCalculator::initializeSnapProgressCurve): 37 (WebCore::BasicScrollingMomentumCalculator::animationProgressAfterElapsedTime): 38 * page/scrolling/ScrollingMomentumCalculator.h: 39 * page/scrolling/mac/ScrollingMomentumCalculatorMac.h: 40 * page/scrolling/mac/ScrollingMomentumCalculatorMac.mm: 41 (WebCore::ScrollingMomentumCalculator::create): 42 (WebCore::ScrollingMomentumCalculatorMac::ScrollingMomentumCalculatorMac): 43 (WebCore::ScrollingMomentumCalculatorMac::scrollOffsetAfterElapsedTime): 44 (WebCore::ScrollingMomentumCalculatorMac::animationDuration): 45 (WebCore::ScrollingMomentumCalculatorMac::ensurePlatformMomentumCalculator): 46 * platform/PlatformWheelEvent.h: 47 (WebCore::PlatformWheelEvent::copyWithDeltasAndVelocity): 48 (WebCore::PlatformWheelEvent::scrollingVelocity): 49 50 Change scrolling velocity in PlatformWheelEvent to be a FloatSize instead of a FloatPoint. This change 51 propagates to the ScrollController, where state variables and arguments pertaining to scrolling velocity are 52 also now sizes instead of points. 53 54 * platform/cocoa/ScrollController.h: 55 * platform/cocoa/ScrollController.mm: 56 (WebCore::ScrollController::scheduleStatelessScrollSnap): 57 * platform/cocoa/ScrollSnapAnimatorState.h: 58 * platform/cocoa/ScrollSnapAnimatorState.mm: 59 (WebCore::ScrollSnapAnimatorState::transitionToGlideAnimationState): 60 (WebCore::ScrollSnapAnimatorState::setupAnimationForState): 61 (WebCore::ScrollSnapAnimatorState::teardownAnimationForState): 62 (WebCore::ScrollSnapAnimatorState::currentAnimatedScrollOffset): 63 64 Refactor elapsed time to be Seconds instead of double. Additionally, use MonotonicTime::now() instead of 65 monotonicallyIncreasingTime(), and MonotonicTime instead of double for keeping track of the start time. 66 67 * platform/spi/mac/NSScrollingMomentumCalculatorSPI.h: 68 1 69 2016-11-29 Brady Eidson <beidson@apple.com> 2 70 -
trunk/Source/WebCore/page/EventHandler.cpp
r209070 r209087 304 304 } 305 305 306 static inline bool handleWheelEventInAppropriateEnclosingBox(Node* startNode, WheelEvent& wheelEvent, Element** stopElement, const FloatSize& filteredPlatformDelta, const Float Point& filteredVelocity)306 static inline bool handleWheelEventInAppropriateEnclosingBox(Node* startNode, WheelEvent& wheelEvent, Element** stopElement, const FloatSize& filteredPlatformDelta, const FloatSize& filteredVelocity) 307 307 { 308 308 bool shouldHandleEvent = wheelEvent.deltaX() || wheelEvent.deltaY(); … … 2759 2759 2760 2760 FloatSize filteredPlatformDelta(wheelEvent.deltaX(), wheelEvent.deltaY()); 2761 Float PointfilteredVelocity;2761 FloatSize filteredVelocity; 2762 2762 if (const PlatformWheelEvent* platformWheelEvent = wheelEvent.wheelEvent()) { 2763 2763 filteredPlatformDelta.setWidth(platformWheelEvent->deltaX()); -
trunk/Source/WebCore/page/Page.cpp
r209070 r209087 1996 1996 if (!m_testTrigger) { 1997 1997 m_testTrigger = adoptRef(new WheelEventTestTrigger()); 1998 if (auto* frameView = mainFrame().view()) 1999 frameView->layout(); 1998 // We need to update the scrolling coordinator so that the mainframe scrolling node can expect wheel event test triggers. 1999 if (auto* frameView = mainFrame().view()) { 2000 if (m_scrollingCoordinator) 2001 m_scrollingCoordinator->updateExpectsWheelEventTestTriggerWithFrameView(*frameView); 2002 } 2000 2003 } 2001 2004 -
trunk/Source/WebCore/page/WheelEventDeltaFilter.cpp
r209070 r209087 64 64 } 65 65 66 Float PointWheelEventDeltaFilter::filteredVelocity() const66 FloatSize WheelEventDeltaFilter::filteredVelocity() const 67 67 { 68 68 return m_currentFilteredVelocity; -
trunk/Source/WebCore/page/WheelEventDeltaFilter.h
r209070 r209087 26 26 #pragma once 27 27 28 #include "FloatPoint.h"29 28 #include "FloatSize.h" 30 29 #include <wtf/Deque.h> … … 41 40 WEBCORE_EXPORT virtual void beginFilteringDeltas() = 0; 42 41 WEBCORE_EXPORT virtual void endFilteringDeltas() = 0; 43 WEBCORE_EXPORT Float PointfilteredVelocity() const;42 WEBCORE_EXPORT FloatSize filteredVelocity() const; 44 43 WEBCORE_EXPORT bool isFilteringDeltas() const; 45 44 WEBCORE_EXPORT FloatSize filteredDelta() const; … … 47 46 protected: 48 47 FloatSize m_currentFilteredDelta; 49 Float Pointm_currentFilteredVelocity;48 FloatSize m_currentFilteredVelocity; 50 49 bool m_isFilteringDeltas { false }; 51 50 }; -
trunk/Source/WebCore/page/mac/WheelEventDeltaFilterMac.mm
r209070 r209087 56 56 NSPoint filteredVelocityResult; 57 57 [m_predominantAxisFilter filterInputDelta:NSPoint(FloatPoint(delta.width(), delta.height())) timestamp:monotonicallyIncreasingTime() - m_beginFilteringDeltasTime outputDelta:&filteredDeltaResult velocity:&filteredVelocityResult]; 58 m_currentFilteredVelocity = Float Point(filteredVelocityResult);58 m_currentFilteredVelocity = FloatSize(filteredVelocityResult.x, filteredVelocityResult.y); 59 59 m_currentFilteredDelta = FloatSize(filteredDeltaResult.x, filteredDeltaResult.y); 60 60 } -
trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp
r208985 r209087 171 171 172 172 node->setScrollableAreaParameters(scrollParameters); 173 } 174 175 void AsyncScrollingCoordinator::updateExpectsWheelEventTestTriggerWithFrameView(const FrameView& frameView) 176 { 177 auto* page = frameView.frame().page(); 178 if (!page) 179 return; 180 181 auto* node = downcast<ScrollingStateFrameScrollingNode>(m_scrollingStateTree->stateNodeForID(frameView.scrollLayerID())); 182 if (!node) 183 return; 184 185 node->setExpectsWheelEventTestTrigger(page->expectsWheelEventTriggers()); 173 186 } 174 187 -
trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h
r208985 r209087 64 64 WEBCORE_EXPORT void updateScrollSnapPropertiesWithFrameView(const FrameView&) override; 65 65 #endif 66 67 WEBCORE_EXPORT void updateExpectsWheelEventTestTriggerWithFrameView(const FrameView&) override; 66 68 67 69 protected: -
trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h
r208985 r209087 207 207 208 208 EventTrackingRegions absoluteEventTrackingRegions() const; 209 virtual void updateExpectsWheelEventTestTriggerWithFrameView(const FrameView&) { } 209 210 210 211 protected: -
trunk/Source/WebCore/page/scrolling/ScrollingMomentumCalculator.cpp
r209070 r209087 29 29 #include "FloatPoint.h" 30 30 #include "FloatSize.h" 31 #include <wtf/CurrentTime.h>32 31 33 32 namespace WebCore { 34 33 35 static const double scrollSnapAnimationDuration = 1;36 37 ScrollingMomentumCalculator::ScrollingMomentumCalculator(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const Float Point& initialVelocity)34 static const Seconds scrollSnapAnimationDuration = 1_s; 35 36 ScrollingMomentumCalculator::ScrollingMomentumCalculator(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const FloatSize& initialVelocity) 38 37 : m_initialDelta(initialDelta) 39 38 , m_initialVelocity(initialVelocity) … … 47 46 #if !HAVE(NSSCROLLING_FILTERS) 48 47 49 std::unique_ptr<ScrollingMomentumCalculator> ScrollingMomentumCalculator::create(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const Float Point& initialVelocity)48 std::unique_ptr<ScrollingMomentumCalculator> ScrollingMomentumCalculator::create(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const FloatSize& initialVelocity) 50 49 { 51 50 return std::make_unique<BasicScrollingMomentumCalculator>(viewportSize, contentSize, initialOffset, targetOffset, initialDelta, initialVelocity); … … 54 53 #endif 55 54 56 BasicScrollingMomentumCalculator::BasicScrollingMomentumCalculator(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const Float Point& initialVelocity)55 BasicScrollingMomentumCalculator::BasicScrollingMomentumCalculator(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const FloatSize& initialVelocity) 57 56 : ScrollingMomentumCalculator(viewportSize, contentSize, initialOffset, targetOffset, initialDelta, initialVelocity) 58 57 { … … 74 73 } 75 74 76 FloatPoint BasicScrollingMomentumCalculator::scrollOffsetAfterElapsedTime( double seconds)75 FloatPoint BasicScrollingMomentumCalculator::scrollOffsetAfterElapsedTime(Seconds elapsedTime) 77 76 { 78 77 if (m_momentumCalculatorRequiresInitialization) { … … 82 81 } 83 82 84 float progress = animationProgressAfterElapsedTime( seconds);83 float progress = animationProgressAfterElapsedTime(elapsedTime); 85 84 auto offsetAsSize = m_forceLinearAnimationCurve ? linearlyInterpolatedOffsetAtProgress(progress) : cubicallyInterpolatedOffsetAtProgress(progress); 86 85 return FloatPoint(offsetAsSize.width(), offsetAsSize.height()); 87 86 } 88 87 89 doubleBasicScrollingMomentumCalculator::animationDuration()88 Seconds BasicScrollingMomentumCalculator::animationDuration() 90 89 { 91 90 return scrollSnapAnimationDuration; … … 192 191 for (int i = 0; i < maxNumScrollSnapParameterEstimationIterations; ++i) { 193 192 m_snapAnimationDecayFactor = m_snapAnimationCurveMagnitude / (m_snapAnimationCurveMagnitude - initialProgress); 194 m_snapAnimationCurveMagnitude = 1.0f / (1.0f - std::pow(m_snapAnimationDecayFactor, -framesPerSecond * scrollSnapAnimationDuration ));193 m_snapAnimationCurveMagnitude = 1.0f / (1.0f - std::pow(m_snapAnimationDecayFactor, -framesPerSecond * scrollSnapAnimationDuration.value())); 195 194 if (std::abs(m_snapAnimationDecayFactor - previousDecayFactor) < scrollSnapDecayFactorConvergenceThreshold) 196 195 break; … … 200 199 } 201 200 202 float BasicScrollingMomentumCalculator::animationProgressAfterElapsedTime( double seconds) const203 { 204 float timeProgress = clampTo<float>( seconds/ scrollSnapAnimationDuration, 0, 1);205 return std::min(1.0, m_snapAnimationCurveMagnitude * (1.0 - std::pow(m_snapAnimationDecayFactor, -framesPerSecond * scrollSnapAnimationDuration * timeProgress)));201 float BasicScrollingMomentumCalculator::animationProgressAfterElapsedTime(Seconds elapsedTime) const 202 { 203 float timeProgress = clampTo<float>(elapsedTime / scrollSnapAnimationDuration, 0, 1); 204 return std::min(1.0, m_snapAnimationCurveMagnitude * (1.0 - std::pow(m_snapAnimationDecayFactor, -framesPerSecond * scrollSnapAnimationDuration.value() * timeProgress))); 206 205 } 207 206 -
trunk/Source/WebCore/page/scrolling/ScrollingMomentumCalculator.h
r209070 r209087 31 31 #include "PlatformWheelEvent.h" 32 32 #include "ScrollTypes.h" 33 #include <wtf/Seconds.h> 33 34 34 35 namespace WebCore { … … 39 40 class ScrollingMomentumCalculator { 40 41 public: 41 ScrollingMomentumCalculator(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const Float Point& initialVelocity);42 static std::unique_ptr<ScrollingMomentumCalculator> create(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const Float Point& initialVelocity);42 ScrollingMomentumCalculator(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const FloatSize& initialVelocity); 43 static std::unique_ptr<ScrollingMomentumCalculator> create(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const FloatSize& initialVelocity); 43 44 virtual ~ScrollingMomentumCalculator() { } 44 45 45 virtual FloatPoint scrollOffsetAfterElapsedTime( double time) = 0;46 virtual doubleanimationDuration() = 0;46 virtual FloatPoint scrollOffsetAfterElapsedTime(Seconds) = 0; 47 virtual Seconds animationDuration() = 0; 47 48 48 49 protected: 49 50 FloatSize m_initialDelta; 50 Float Pointm_initialVelocity;51 FloatSize m_initialVelocity; 51 52 FloatSize m_initialScrollOffset; 52 53 FloatSize m_targetScrollOffset; … … 57 58 class BasicScrollingMomentumCalculator final : public ScrollingMomentumCalculator { 58 59 public: 59 BasicScrollingMomentumCalculator(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const Float Point& initialVelocity);60 BasicScrollingMomentumCalculator(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const FloatSize& initialVelocity); 60 61 61 62 private: 62 FloatPoint scrollOffsetAfterElapsedTime( double seconds) final;63 doubleanimationDuration() final;63 FloatPoint scrollOffsetAfterElapsedTime(Seconds) final; 64 Seconds animationDuration() final; 64 65 void initializeInterpolationCoefficientsIfNecessary(); 65 66 void initializeSnapProgressCurve(); 66 float animationProgressAfterElapsedTime( double time) const;67 float animationProgressAfterElapsedTime(Seconds) const; 67 68 FloatSize linearlyInterpolatedOffsetAtProgress(float progress) const; 68 69 FloatSize cubicallyInterpolatedOffsetAtProgress(float progress) const; -
trunk/Source/WebCore/page/scrolling/mac/ScrollingMomentumCalculatorMac.h
r209070 r209087 37 37 class ScrollingMomentumCalculatorMac final : public ScrollingMomentumCalculator { 38 38 public: 39 ScrollingMomentumCalculatorMac(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const Float Point& initialVelocity);39 ScrollingMomentumCalculatorMac(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const FloatSize& initialVelocity); 40 40 41 41 private: 42 FloatPoint scrollOffsetAfterElapsedTime( double time) final;43 doubleanimationDuration() final;42 FloatPoint scrollOffsetAfterElapsedTime(Seconds) final; 43 Seconds animationDuration() final; 44 44 _NSScrollingMomentumCalculator *ensurePlatformMomentumCalculator(); 45 45 -
trunk/Source/WebCore/page/scrolling/mac/ScrollingMomentumCalculatorMac.mm
r209071 r209087 33 33 namespace WebCore { 34 34 35 std::unique_ptr<ScrollingMomentumCalculator> ScrollingMomentumCalculator::create(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const Float Point& initialVelocity)35 std::unique_ptr<ScrollingMomentumCalculator> ScrollingMomentumCalculator::create(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const FloatSize& initialVelocity) 36 36 { 37 37 return std::make_unique<ScrollingMomentumCalculatorMac>(viewportSize, contentSize, initialOffset, targetOffset, initialDelta, initialVelocity); 38 38 } 39 39 40 ScrollingMomentumCalculatorMac::ScrollingMomentumCalculatorMac(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const Float Point& initialVelocity)40 ScrollingMomentumCalculatorMac::ScrollingMomentumCalculatorMac(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatPoint& targetOffset, const FloatSize& initialDelta, const FloatSize& initialVelocity) 41 41 : ScrollingMomentumCalculator(viewportSize, contentSize, initialOffset, targetOffset, initialDelta, initialVelocity) 42 42 { 43 43 } 44 44 45 FloatPoint ScrollingMomentumCalculatorMac::scrollOffsetAfterElapsedTime( double time)45 FloatPoint ScrollingMomentumCalculatorMac::scrollOffsetAfterElapsedTime(Seconds elapsedTime) 46 46 { 47 return [ensurePlatformMomentumCalculator() positionAfterDuration: time];47 return [ensurePlatformMomentumCalculator() positionAfterDuration:elapsedTime.value()]; 48 48 } 49 49 50 doubleScrollingMomentumCalculatorMac::animationDuration()50 Seconds ScrollingMomentumCalculatorMac::animationDuration() 51 51 { 52 return [ensurePlatformMomentumCalculator() durationUntilStop];52 return Seconds([ensurePlatformMomentumCalculator() durationUntilStop]); 53 53 } 54 54 … … 60 60 NSPoint origin = NSMakePoint(m_initialScrollOffset.width(), m_initialScrollOffset.height()); 61 61 NSRect contentFrame = NSMakeRect(0, 0, m_contentSize.width(), m_contentSize.height()); 62 m_platformMomentumCalculator = adoptNS([[_NSScrollingMomentumCalculator alloc] initWithInitialOrigin:origin velocity:m_initialVelocity documentFrame:contentFrame constrainedClippingOrigin:NSZeroPoint clippingSize:m_viewportSize tolerance:NSMakeSize(1, 1)]); 62 NSPoint velocity = NSMakePoint(m_initialVelocity.width(), m_initialVelocity.height()); 63 m_platformMomentumCalculator = adoptNS([[_NSScrollingMomentumCalculator alloc] initWithInitialOrigin:origin velocity:velocity documentFrame:contentFrame constrainedClippingOrigin:NSZeroPoint clippingSize:m_viewportSize tolerance:NSMakeSize(1, 1)]); 63 64 [m_platformMomentumCalculator setDestinationOrigin:NSMakePoint(m_targetScrollOffset.width(), m_targetScrollOffset.height())]; 64 65 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200 -
trunk/Source/WebCore/platform/PlatformWheelEvent.h
r209070 r209087 121 121 } 122 122 123 PlatformWheelEvent copyWithDeltasAndVelocity(float deltaX, float deltaY, FloatPointvelocity) const123 PlatformWheelEvent copyWithDeltasAndVelocity(float deltaX, float deltaY, const FloatSize& velocity) const 124 124 { 125 125 PlatformWheelEvent copy = *this; … … 169 169 #endif 170 170 171 Float PointscrollingVelocity() const { return m_scrollingVelocity; }171 FloatSize scrollingVelocity() const { return m_scrollingVelocity; } 172 172 173 173 #if PLATFORM(WIN) … … 185 185 PlatformWheelEventGranularity m_granularity; 186 186 bool m_directionInvertedFromDevice; 187 FloatPoint m_scrollingVelocity; 187 188 // Scrolling velocity in pixels per second. 189 FloatSize m_scrollingVelocity; 188 190 #if PLATFORM(COCOA) 189 191 bool m_hasPreciseScrollingDeltas; -
trunk/Source/WebCore/platform/cocoa/ScrollController.h
r209070 r209087 191 191 std::unique_ptr<ScrollSnapAnimatorState> m_scrollSnapState; 192 192 #if PLATFORM(MAC) 193 Float Pointm_dragEndedScrollingVelocity;193 FloatSize m_dragEndedScrollingVelocity; 194 194 RunLoop::Timer<ScrollController> m_statelessSnapTransitionTimer; 195 195 RunLoop::Timer<ScrollController> m_scrollSnapTimer; -
trunk/Source/WebCore/platform/cocoa/ScrollController.mm
r209070 r209087 515 515 return; 516 516 517 static const double statelessScrollSnapDelay = 0.75;518 m_statelessSnapTransitionTimer.startOneShot(statelessScrollSnapDelay );517 static const Seconds statelessScrollSnapDelay = 750_ms; 518 m_statelessSnapTransitionTimer.startOneShot(statelessScrollSnapDelay.value()); 519 519 startDeferringTestsDueToScrollSnapping(); 520 520 } -
trunk/Source/WebCore/platform/cocoa/ScrollSnapAnimatorState.h
r209070 r209087 36 36 #include "ScrollTypes.h" 37 37 #include "ScrollingMomentumCalculator.h" 38 #include <wtf/MonotonicTime.h> 38 39 39 40 namespace WebCore { … … 80 81 // State transition helpers. 81 82 void transitionToSnapAnimationState(const FloatSize& contentSize, const FloatSize& viewportSize, float pageScale, const FloatPoint& initialOffset); 82 void transitionToGlideAnimationState(const FloatSize& contentSize, const FloatSize& viewportSize, float pageScale, const FloatPoint& initialOffset, const Float Point& initialVelocity, const FloatSize& initialDelta);83 void transitionToGlideAnimationState(const FloatSize& contentSize, const FloatSize& viewportSize, float pageScale, const FloatPoint& initialOffset, const FloatSize& initialVelocity, const FloatSize& initialDelta); 83 84 void transitionToUserInteractionState(); 84 85 void transitionToDestinationReachedState(); … … 87 88 float targetOffsetForStartOffset(ScrollEventAxis, float maxScrollOffset, float startOffset, float pageScale, float delta, unsigned& outActiveSnapIndex) const; 88 89 void teardownAnimationForState(ScrollSnapState); 89 void setupAnimationForState(ScrollSnapState, const FloatSize& contentSize, const FloatSize& viewportSize, float pageScale, const FloatPoint& initialOffset, const Float Point& initialVelocity, const FloatSize& initialDelta);90 void setupAnimationForState(ScrollSnapState, const FloatSize& contentSize, const FloatSize& viewportSize, float pageScale, const FloatPoint& initialOffset, const FloatSize& initialVelocity, const FloatSize& initialDelta); 90 91 91 92 ScrollSnapState m_currentState { ScrollSnapState::UserInteraction }; … … 96 97 unsigned m_activeSnapIndexY { 0 }; 97 98 98 double m_startTime { 0 };99 MonotonicTime m_startTime; 99 100 std::unique_ptr<ScrollingMomentumCalculator> m_momentumCalculator; 100 101 }; -
trunk/Source/WebCore/platform/cocoa/ScrollSnapAnimatorState.mm
r209070 r209087 26 26 #include "config.h" 27 27 #include "ScrollSnapAnimatorState.h" 28 #include <wtf/CurrentTime.h>29 28 #include <wtf/MathExtras.h> 30 29 … … 44 43 } 45 44 46 void ScrollSnapAnimatorState::transitionToGlideAnimationState(const FloatSize& contentSize, const FloatSize& viewportSize, float pageScale, const FloatPoint& initialOffset, const Float Point& initialVelocity, const FloatSize& initialDelta)45 void ScrollSnapAnimatorState::transitionToGlideAnimationState(const FloatSize& contentSize, const FloatSize& viewportSize, float pageScale, const FloatPoint& initialOffset, const FloatSize& initialVelocity, const FloatSize& initialDelta) 47 46 { 48 47 setupAnimationForState(ScrollSnapState::Gliding, contentSize, viewportSize, pageScale, initialOffset, initialVelocity, initialDelta); 49 48 } 50 49 51 void ScrollSnapAnimatorState::setupAnimationForState(ScrollSnapState state, const FloatSize& contentSize, const FloatSize& viewportSize, float pageScale, const FloatPoint& initialOffset, const Float Point& initialVelocity, const FloatSize& initialDelta)50 void ScrollSnapAnimatorState::setupAnimationForState(ScrollSnapState state, const FloatSize& contentSize, const FloatSize& viewportSize, float pageScale, const FloatPoint& initialOffset, const FloatSize& initialVelocity, const FloatSize& initialDelta) 52 51 { 53 52 ASSERT(state == ScrollSnapState::Snapping || state == ScrollSnapState::Gliding); … … 58 57 float targetOffsetY = targetOffsetForStartOffset(ScrollEventAxis::Vertical, contentSize.height() - viewportSize.height(), initialOffset.y(), pageScale, initialDelta.height(), m_activeSnapIndexY); 59 58 m_momentumCalculator = ScrollingMomentumCalculator::create(viewportSize, contentSize, initialOffset, FloatPoint(targetOffsetX, targetOffsetY), initialDelta, initialVelocity); 60 m_startTime = monotonicallyIncreasingTime();59 m_startTime = MonotonicTime::now(); 61 60 m_currentState = state; 62 61 } … … 79 78 80 79 m_momentumCalculator = nullptr; 81 m_startTime = 0;80 m_startTime = MonotonicTime(); 82 81 m_currentState = state; 83 82 } … … 90 89 } 91 90 92 double elapsedTime = monotonicallyIncreasingTime() - m_startTime;91 Seconds elapsedTime = MonotonicTime::now() - m_startTime; 93 92 isAnimationComplete = elapsedTime >= m_momentumCalculator->animationDuration(); 94 93 return m_momentumCalculator->scrollOffsetAfterElapsedTime(elapsedTime); -
trunk/Source/WebCore/platform/spi/mac/NSScrollingMomentumCalculatorSPI.h
r209071 r209087 32 32 #else 33 33 34 @interface _NSScrollingMomentumCalculator : NSObject ;34 @interface _NSScrollingMomentumCalculator : NSObject 35 35 36 36 - (instancetype)initWithInitialOrigin:(NSPoint)origin velocity:(NSPoint)velocity documentFrame:(NSRect)docFrame constrainedClippingOrigin:(NSPoint)constrainedClippingOrigin clippingSize:(NSSize)clipViewSize tolerance:(NSSize)tolerance; … … 40 40 #endif 41 41 42 @property (atomic)NSPoint destinationOrigin;42 @property NSPoint destinationOrigin; 43 43 @property (readonly) NSTimeInterval durationUntilStop; 44 44
Note: See TracChangeset
for help on using the changeset viewer.