- 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)]);