| Index: Source/core/page/scrolling/ScrollState.h
|
| diff --git a/Source/core/page/scrolling/ScrollState.h b/Source/core/page/scrolling/ScrollState.h
|
| index d88e86d404b0e489084cdaa8f3e919806c51851e..4f1061eb0d8e984312c4d77d4a01b78dfa4e5d9f 100644
|
| --- a/Source/core/page/scrolling/ScrollState.h
|
| +++ b/Source/core/page/scrolling/ScrollState.h
|
| @@ -18,13 +18,18 @@ class ScrollState final : public RefCountedWillBeGarbageCollected<ScrollState>,
|
| public:
|
| static PassRefPtrWillBeRawPtr<ScrollState> create(
|
| double deltaX, double deltaY, double deltaGranularity, double velocityX,
|
| - double velocityY, bool inInertialPhase, bool isEnding, bool fromUserInput = false,
|
| - bool shouldPropagate = true, bool deltaConsumedForScrollSequence = false);
|
| + double velocityY, bool inInertialPhase,
|
| + bool isBeginning = false, bool isEnding = false,
|
| + bool fromUserInput = false, bool shouldPropagate = true,
|
| + bool deltaConsumedForScrollSequence = false);
|
|
|
| // Web exposed methods.
|
|
|
| // Reduce deltas by x, y.
|
| void consumeDelta(double x, double y, ExceptionState&);
|
| + // Pops the first element off of |m_scrollChain| and calls
|
| + // |distributeScroll| on it.
|
| + void distributeToScrollChainDescendant();
|
| // Positive when scrolling left.
|
| double deltaX() const { return m_deltaX; }
|
| // Positive when scrolling up.
|
| @@ -37,6 +42,8 @@ public:
|
| double velocityY() const { return m_velocityY; }
|
| // True for events dispatched after the users's gesture has finished.
|
| bool inInertialPhase() const { return m_inInertialPhase; }
|
| + // True if this is the first event for this scroll.
|
| + bool isBeginning() const { return m_isBeginning; }
|
| // True if this is the last event for this scroll.
|
| bool isEnding() const { return m_isEnding; }
|
| // True if this scroll is the direct result of user input.
|
| @@ -47,6 +54,11 @@ public:
|
| // Non web exposed methods.
|
| void consumeDeltaNative(double x, double y);
|
|
|
| + void setScrollChain(WillBeHeapDeque<RefPtrWillBeMember<Element>> scrollChain)
|
| + {
|
| + m_scrollChain = scrollChain;
|
| + }
|
| +
|
| void setCurrentNativeScrollingElement(Element* element)
|
| {
|
| m_currentNativeScrollingElement = element;
|
| @@ -57,31 +69,30 @@ public:
|
| return m_currentNativeScrollingElement.get();
|
| }
|
|
|
| - void setDeltaConsumedForScrollSequence(bool deltaConsumedForScrollSequence)
|
| - {
|
| - m_deltaConsumedForScrollSequence = deltaConsumedForScrollSequence;
|
| - }
|
| -
|
| bool deltaConsumedForScrollSequence() const
|
| {
|
| return m_deltaConsumedForScrollSequence;
|
| }
|
|
|
| + // Scroll begin and end must propagate to all nodes to ensure
|
| + // their state is updated.
|
| bool fullyConsumed() const
|
| {
|
| - return !m_deltaX && !m_deltaY && !m_isEnding;
|
| + return !m_deltaX && !m_deltaY && !m_isEnding && !m_isBeginning;
|
| }
|
|
|
| DEFINE_INLINE_TRACE()
|
| {
|
| visitor->trace(m_currentNativeScrollingElement);
|
| + visitor->trace(m_scrollChain);
|
| };
|
|
|
| private:
|
| ScrollState();
|
| ScrollState(double deltaX, double deltaY, double deltaGranularity,
|
| - double velocityX, double velocityY, bool inInertialPhase, bool isEnding,
|
| - bool fromUserInput, bool shouldPropagate, bool deltaConsumedForScrollSequence);
|
| + double velocityX, double velocityY, bool inInertialPhase, bool isBeginning,
|
| + bool isEnding, bool fromUserInput, bool shouldPropagate,
|
| + bool deltaConsumedForScrollSequence);
|
|
|
| double m_deltaX;
|
| double m_deltaY;
|
| @@ -89,14 +100,18 @@ private:
|
| double m_velocityX;
|
| double m_velocityY;
|
| bool m_inInertialPhase;
|
| + bool m_isBeginning;
|
| bool m_isEnding;
|
|
|
| bool m_fromUserInput;
|
| bool m_shouldPropagate;
|
| // The last native element to respond to a scroll, or null if none exists.
|
| RefPtrWillBeMember<Element> m_currentNativeScrollingElement;
|
| - // Whether the scroll sequence has had any delta consumed.
|
| + // Whether the scroll sequence has had any delta consumed, in the
|
| + // current frame, or any child frames.
|
| bool m_deltaConsumedForScrollSequence;
|
| +
|
| + WillBeHeapDeque<RefPtrWillBeMember<Element>> m_scrollChain;
|
| };
|
|
|
| } // namespace blink
|
|
|