Title: [282732] trunk/Source/WebCore
Revision
282732
Author
[email protected]
Date
2021-09-18 17:56:15 -0700 (Sat, 18 Sep 2021)

Log Message

Scroll offsets in ScrollingMomentumCalculator should be FloatPoint, not FloatSize
https://bugs.webkit.org/show_bug.cgi?id=230451

Reviewed by Wenson Hsieh.

Scroll offsets are generally represented as IntPoint or FloatPoint. Have
ScrollingMomentumCalculator conform to this convention.

* page/scrolling/ScrollingMomentumCalculator.cpp:
(WebCore::ScrollingMomentumCalculator::ScrollingMomentumCalculator):
(WebCore::ScrollingMomentumCalculator::setRetargetedScrollOffset):
(WebCore::ScrollingMomentumCalculator::predictedDestinationOffset):
(WebCore::BasicScrollingMomentumCalculator::linearlyInterpolatedOffsetAtProgress):
(WebCore::BasicScrollingMomentumCalculator::cubicallyInterpolatedOffsetAtProgress const):
(WebCore::BasicScrollingMomentumCalculator::scrollOffsetAfterElapsedTime):
(WebCore::BasicScrollingMomentumCalculator::initializeInterpolationCoefficientsIfNecessary):
* page/scrolling/ScrollingMomentumCalculator.h:
(WebCore::ScrollingMomentumCalculator::retargetedScrollOffset const):
* page/scrolling/mac/ScrollingMomentumCalculatorMac.h:
* page/scrolling/mac/ScrollingMomentumCalculatorMac.mm:
(WebCore::ScrollingMomentumCalculatorMac::scrollOffsetAfterElapsedTime):
(WebCore::ScrollingMomentumCalculatorMac::predictedDestinationOffset):
(WebCore::ScrollingMomentumCalculatorMac::retargetedScrollOffsetDidChange):
(WebCore::ScrollingMomentumCalculatorMac::ensurePlatformMomentumCalculator):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (282731 => 282732)


--- trunk/Source/WebCore/ChangeLog	2021-09-18 22:59:41 UTC (rev 282731)
+++ trunk/Source/WebCore/ChangeLog	2021-09-19 00:56:15 UTC (rev 282732)
@@ -1,5 +1,32 @@
 2021-09-18  Simon Fraser  <[email protected]>
 
+        Scroll offsets in ScrollingMomentumCalculator should be FloatPoint, not FloatSize
+        https://bugs.webkit.org/show_bug.cgi?id=230451
+
+        Reviewed by Wenson Hsieh.
+
+        Scroll offsets are generally represented as IntPoint or FloatPoint. Have
+        ScrollingMomentumCalculator conform to this convention.
+
+        * page/scrolling/ScrollingMomentumCalculator.cpp:
+        (WebCore::ScrollingMomentumCalculator::ScrollingMomentumCalculator):
+        (WebCore::ScrollingMomentumCalculator::setRetargetedScrollOffset):
+        (WebCore::ScrollingMomentumCalculator::predictedDestinationOffset):
+        (WebCore::BasicScrollingMomentumCalculator::linearlyInterpolatedOffsetAtProgress):
+        (WebCore::BasicScrollingMomentumCalculator::cubicallyInterpolatedOffsetAtProgress const):
+        (WebCore::BasicScrollingMomentumCalculator::scrollOffsetAfterElapsedTime):
+        (WebCore::BasicScrollingMomentumCalculator::initializeInterpolationCoefficientsIfNecessary):
+        * page/scrolling/ScrollingMomentumCalculator.h:
+        (WebCore::ScrollingMomentumCalculator::retargetedScrollOffset const):
+        * page/scrolling/mac/ScrollingMomentumCalculatorMac.h:
+        * page/scrolling/mac/ScrollingMomentumCalculatorMac.mm:
+        (WebCore::ScrollingMomentumCalculatorMac::scrollOffsetAfterElapsedTime):
+        (WebCore::ScrollingMomentumCalculatorMac::predictedDestinationOffset):
+        (WebCore::ScrollingMomentumCalculatorMac::retargetedScrollOffsetDidChange):
+        (WebCore::ScrollingMomentumCalculatorMac::ensurePlatformMomentumCalculator):
+
+2021-09-18  Simon Fraser  <[email protected]>
+
         Remove some logging left in by mistake.
 
         Unreviewed.

Modified: trunk/Source/WebCore/page/scrolling/ScrollingMomentumCalculator.cpp (282731 => 282732)


--- trunk/Source/WebCore/page/scrolling/ScrollingMomentumCalculator.cpp	2021-09-18 22:59:41 UTC (rev 282731)
+++ trunk/Source/WebCore/page/scrolling/ScrollingMomentumCalculator.cpp	2021-09-19 00:56:15 UTC (rev 282732)
@@ -45,13 +45,13 @@
 ScrollingMomentumCalculator::ScrollingMomentumCalculator(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatSize& initialDelta, const FloatSize& initialVelocity)
     : m_initialDelta(initialDelta)
     , m_initialVelocity(initialVelocity)
-    , m_initialScrollOffset(initialOffset.x(), initialOffset.y())
+    , m_initialScrollOffset(initialOffset)
     , m_viewportSize(viewportSize)
     , m_contentSize(contentSize)
 {
 }
 
-void ScrollingMomentumCalculator::setRetargetedScrollOffset(const FloatSize& target)
+void ScrollingMomentumCalculator::setRetargetedScrollOffset(const FloatPoint& target)
 {
     if (m_retargetedScrollOffset && m_retargetedScrollOffset == target)
         return;
@@ -60,10 +60,10 @@
     retargetedScrollOffsetDidChange();
 }
 
-FloatSize ScrollingMomentumCalculator::predictedDestinationOffset()
+FloatPoint ScrollingMomentumCalculator::predictedDestinationOffset()
 {
-    float initialOffsetX = clampTo<float>(m_initialScrollOffset.width() + projectedInertialScrollDistance(m_initialDelta.width()), 0, m_contentSize.width() - m_viewportSize.width());
-    float initialOffsetY = clampTo<float>(m_initialScrollOffset.height() + projectedInertialScrollDistance(m_initialDelta.height()), 0, m_contentSize.height() - m_viewportSize.height());
+    float initialOffsetX = clampTo<float>(m_initialScrollOffset.x() + projectedInertialScrollDistance(m_initialDelta.width()), 0, m_contentSize.width() - m_viewportSize.width());
+    float initialOffsetY = clampTo<float>(m_initialScrollOffset.y() + projectedInertialScrollDistance(m_initialDelta.height()), 0, m_contentSize.height() - m_viewportSize.height());
     return { initialOffsetX, initialOffsetY };
 }
 
@@ -85,15 +85,15 @@
 {
 }
 
-FloatSize BasicScrollingMomentumCalculator::linearlyInterpolatedOffsetAtProgress(float progress)
+FloatPoint BasicScrollingMomentumCalculator::linearlyInterpolatedOffsetAtProgress(float progress)
 {
     return m_initialScrollOffset + progress * (retargetedScrollOffset() - m_initialScrollOffset);
 }
 
-FloatSize BasicScrollingMomentumCalculator::cubicallyInterpolatedOffsetAtProgress(float progress) const
+FloatPoint BasicScrollingMomentumCalculator::cubicallyInterpolatedOffsetAtProgress(float progress) const
 {
     ASSERT(!m_forceLinearAnimationCurve);
-    FloatSize interpolatedPoint;
+    FloatPoint interpolatedPoint;
     for (int i = 0; i < 4; ++i)
         interpolatedPoint += std::pow(progress, i) * m_snapAnimationCurveCoefficients[i];
 
@@ -109,8 +109,7 @@
     }
 
     float progress = animationProgressAfterElapsedTime(elapsedTime);
-    auto offsetAsSize = m_forceLinearAnimationCurve ? linearlyInterpolatedOffsetAtProgress(progress) : cubicallyInterpolatedOffsetAtProgress(progress);
-    return FloatPoint(offsetAsSize.width(), offsetAsSize.height());
+    return m_forceLinearAnimationCurve ? linearlyInterpolatedOffsetAtProgress(progress) : cubicallyInterpolatedOffsetAtProgress(progress);
 }
 
 Seconds BasicScrollingMomentumCalculator::animationDuration()
@@ -163,12 +162,13 @@
     }
 
     float sideLength = startToEndDistance / (2.0f * cosTheta + 1.0f);
-    FloatSize controlVector1 = m_initialScrollOffset + sideLength * m_initialDelta / initialDeltaMagnitude;
+    auto initialOffsetAsSize = toFloatSize(m_initialScrollOffset);
+    FloatSize controlVector1 = initialOffsetAsSize + sideLength * m_initialDelta / initialDeltaMagnitude;
     FloatSize controlVector2 = controlVector1 + (sideLength * startToEndVector / startToEndDistance);
-    m_snapAnimationCurveCoefficients[0] = m_initialScrollOffset;
-    m_snapAnimationCurveCoefficients[1] = 3 * (controlVector1 - m_initialScrollOffset);
-    m_snapAnimationCurveCoefficients[2] = 3 * (m_initialScrollOffset - 2 * controlVector1 + controlVector2);
-    m_snapAnimationCurveCoefficients[3] = 3 * (controlVector1 - controlVector2) - m_initialScrollOffset + retargetedScrollOffset();
+    m_snapAnimationCurveCoefficients[0] = initialOffsetAsSize;
+    m_snapAnimationCurveCoefficients[1] = 3 * (controlVector1 - initialOffsetAsSize);
+    m_snapAnimationCurveCoefficients[2] = 3 * (initialOffsetAsSize - 2 * controlVector1 + controlVector2);
+    m_snapAnimationCurveCoefficients[3] = 3 * (controlVector1 - controlVector2) - initialOffsetAsSize + toFloatSize(retargetedScrollOffset());
     m_forceLinearAnimationCurve = false;
 }
 

Modified: trunk/Source/WebCore/page/scrolling/ScrollingMomentumCalculator.h (282731 => 282732)


--- trunk/Source/WebCore/page/scrolling/ScrollingMomentumCalculator.h	2021-09-18 22:59:41 UTC (rev 282731)
+++ trunk/Source/WebCore/page/scrolling/ScrollingMomentumCalculator.h	2021-09-19 00:56:15 UTC (rev 282732)
@@ -37,28 +37,30 @@
 class ScrollingMomentumCalculator {
     WTF_MAKE_FAST_ALLOCATED;
 public:
+    WEBCORE_EXPORT static void setPlatformMomentumScrollingPredictionEnabled(bool);
+
+    static std::unique_ptr<ScrollingMomentumCalculator> create(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatSize& initialDelta, const FloatSize& initialVelocity);
+
     ScrollingMomentumCalculator(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatSize& initialDelta, const FloatSize& initialVelocity);
-    static std::unique_ptr<ScrollingMomentumCalculator> create(const FloatSize& viewportSize, const FloatSize& contentSize, const FloatPoint& initialOffset, const FloatSize& initialDelta, const FloatSize& initialVelocity);
-    WEBCORE_EXPORT static void setPlatformMomentumScrollingPredictionEnabled(bool);
     virtual ~ScrollingMomentumCalculator() = default;
 
     virtual FloatPoint scrollOffsetAfterElapsedTime(Seconds) = 0;
     virtual Seconds animationDuration() = 0;
-    virtual FloatSize predictedDestinationOffset();
-    void setRetargetedScrollOffset(const FloatSize&);
+    virtual FloatPoint predictedDestinationOffset();
+    void setRetargetedScrollOffset(const FloatPoint&);
 
 protected:
-    const FloatSize& retargetedScrollOffset() const { return m_retargetedScrollOffset.value(); }
+    const FloatPoint& retargetedScrollOffset() const { return m_retargetedScrollOffset.value(); }
     virtual void retargetedScrollOffsetDidChange() { }
 
     FloatSize m_initialDelta;
     FloatSize m_initialVelocity;
-    FloatSize m_initialScrollOffset;
+    FloatPoint m_initialScrollOffset;
     FloatSize m_viewportSize;
     FloatSize m_contentSize;
 
 private:
-    std::optional<FloatSize> m_retargetedScrollOffset;
+    std::optional<FloatPoint> m_retargetedScrollOffset;
 };
 
 class BasicScrollingMomentumCalculator final : public ScrollingMomentumCalculator {
@@ -71,8 +73,8 @@
     void initializeInterpolationCoefficientsIfNecessary();
     void initializeSnapProgressCurve();
     float animationProgressAfterElapsedTime(Seconds) const;
-    FloatSize linearlyInterpolatedOffsetAtProgress(float progress);
-    FloatSize cubicallyInterpolatedOffsetAtProgress(float progress) const;
+    FloatPoint linearlyInterpolatedOffsetAtProgress(float progress);
+    FloatPoint cubicallyInterpolatedOffsetAtProgress(float progress) const;
 
     float m_snapAnimationCurveMagnitude { 0 };
     float m_snapAnimationDecayFactor { 0 };

Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingMomentumCalculatorMac.h (282731 => 282732)


--- trunk/Source/WebCore/page/scrolling/mac/ScrollingMomentumCalculatorMac.h	2021-09-18 22:59:41 UTC (rev 282731)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingMomentumCalculatorMac.h	2021-09-19 00:56:15 UTC (rev 282732)
@@ -39,8 +39,9 @@
 private:
     FloatPoint scrollOffsetAfterElapsedTime(Seconds) final;
     Seconds animationDuration() final;
-    FloatSize predictedDestinationOffset() final;
+    FloatPoint predictedDestinationOffset() final;
     void retargetedScrollOffsetDidChange() final;
+
     _NSScrollingMomentumCalculator *ensurePlatformMomentumCalculator();
     bool requiresMomentumScrolling();
 

Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingMomentumCalculatorMac.mm (282731 => 282732)


--- trunk/Source/WebCore/page/scrolling/mac/ScrollingMomentumCalculatorMac.mm	2021-09-18 22:59:41 UTC (rev 282731)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingMomentumCalculatorMac.mm	2021-09-19 00:56:15 UTC (rev 282732)
@@ -52,12 +52,12 @@
 FloatPoint ScrollingMomentumCalculatorMac::scrollOffsetAfterElapsedTime(Seconds elapsedTime)
 {
     if (!requiresMomentumScrolling())
-        return { retargetedScrollOffset().width(), retargetedScrollOffset().height() };
+        return retargetedScrollOffset();
 
     return [ensurePlatformMomentumCalculator() positionAfterDuration:elapsedTime.value()];
 }
 
-FloatSize ScrollingMomentumCalculatorMac::predictedDestinationOffset()
+FloatPoint ScrollingMomentumCalculatorMac::predictedDestinationOffset()
 {
     if (!gEnablePlatformMomentumScrollingPrediction)
         return ScrollingMomentumCalculator::predictedDestinationOffset();
@@ -69,7 +69,7 @@
 void ScrollingMomentumCalculatorMac::retargetedScrollOffsetDidChange()
 {
     _NSScrollingMomentumCalculator *calculator = ensurePlatformMomentumCalculator();
-    calculator.destinationOrigin = NSMakePoint(retargetedScrollOffset().width(), retargetedScrollOffset().height());
+    calculator.destinationOrigin = retargetedScrollOffset();
     [calculator calculateToReachDestination];
 }
 
@@ -93,7 +93,7 @@
     if (m_platformMomentumCalculator)
         return m_platformMomentumCalculator.get();
 
-    NSPoint origin = NSMakePoint(m_initialScrollOffset.width(), m_initialScrollOffset.height());
+    NSPoint origin = m_initialScrollOffset;
     NSRect contentFrame = NSMakeRect(0, 0, m_contentSize.width(), m_contentSize.height());
     NSPoint velocity = NSMakePoint(m_initialVelocity.width(), m_initialVelocity.height());
     m_platformMomentumCalculator = adoptNS([[_NSScrollingMomentumCalculator alloc] initWithInitialOrigin:origin velocity:velocity documentFrame:contentFrame constrainedClippingOrigin:NSZeroPoint clippingSize:m_viewportSize tolerance:NSMakeSize(1, 1)]);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to