summaryrefslogtreecommitdiff
path: root/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp')
-rw-r--r--Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp220
1 files changed, 84 insertions, 136 deletions
diff --git a/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp b/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp
index 8ef8ff6a5..b3de26324 100644
--- a/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp
+++ b/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 Apple Inc. All rights reserved.
+ * Copyright (C) 2012, 2015 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -30,80 +30,45 @@
#include "ScrollingStateTree.h"
#include "TextStream.h"
-#include <wtf/OwnPtr.h>
namespace WebCore {
-PassOwnPtr<ScrollingStateScrollingNode> ScrollingStateScrollingNode::create(ScrollingStateTree& stateTree, ScrollingNodeID nodeID)
-{
- return adoptPtr(new ScrollingStateScrollingNode(stateTree, nodeID));
-}
-
-ScrollingStateScrollingNode::ScrollingStateScrollingNode(ScrollingStateTree& stateTree, ScrollingNodeID nodeID)
- : ScrollingStateNode(ScrollingNode, stateTree, nodeID)
-#if PLATFORM(MAC) && !PLATFORM(IOS)
- , m_verticalScrollbarPainter(0)
- , m_horizontalScrollbarPainter(0)
-#endif
- , m_frameScaleFactor(1)
- , m_wheelEventHandlerCount(0)
- , m_synchronousScrollingReasons(0)
- , m_behaviorForFixed(StickToDocumentBounds)
- , m_headerHeight(0)
- , m_footerHeight(0)
- , m_requestedScrollPositionRepresentsProgrammaticScroll(false)
+ScrollingStateScrollingNode::ScrollingStateScrollingNode(ScrollingStateTree& stateTree, ScrollingNodeType nodeType, ScrollingNodeID nodeID)
+ : ScrollingStateNode(nodeType, stateTree, nodeID)
{
}
ScrollingStateScrollingNode::ScrollingStateScrollingNode(const ScrollingStateScrollingNode& stateNode, ScrollingStateTree& adoptiveTree)
: ScrollingStateNode(stateNode, adoptiveTree)
-#if PLATFORM(MAC) && !PLATFORM(IOS)
- , m_verticalScrollbarPainter(stateNode.verticalScrollbarPainter())
- , m_horizontalScrollbarPainter(stateNode.horizontalScrollbarPainter())
-#endif
- , m_viewportRect(stateNode.viewportRect())
+ , m_scrollableAreaSize(stateNode.scrollableAreaSize())
, m_totalContentsSize(stateNode.totalContentsSize())
+ , m_reachableContentsSize(stateNode.reachableContentsSize())
+ , m_scrollPosition(stateNode.scrollPosition())
+ , m_requestedScrollPosition(stateNode.requestedScrollPosition())
, m_scrollOrigin(stateNode.scrollOrigin())
+#if ENABLE(CSS_SCROLL_SNAP)
+ , m_snapOffsetsInfo(stateNode.m_snapOffsetsInfo)
+#endif
, m_scrollableAreaParameters(stateNode.scrollableAreaParameters())
- , m_nonFastScrollableRegion(stateNode.nonFastScrollableRegion())
- , m_frameScaleFactor(stateNode.frameScaleFactor())
- , m_wheelEventHandlerCount(stateNode.wheelEventHandlerCount())
- , m_synchronousScrollingReasons(stateNode.synchronousScrollingReasons())
- , m_behaviorForFixed(stateNode.scrollBehaviorForFixedElements())
- , m_headerHeight(stateNode.headerHeight())
- , m_footerHeight(stateNode.footerHeight())
- , m_requestedScrollPosition(stateNode.requestedScrollPosition())
, m_requestedScrollPositionRepresentsProgrammaticScroll(stateNode.requestedScrollPositionRepresentsProgrammaticScroll())
+ , m_expectsWheelEventTestTrigger(stateNode.expectsWheelEventTestTrigger())
{
- if (hasChangedProperty(CounterScrollingLayer))
- setCounterScrollingLayer(stateNode.counterScrollingLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
-
- if (hasChangedProperty(HeaderLayer))
- setHeaderLayer(stateNode.headerLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
-
- if (hasChangedProperty(FooterLayer))
- setFooterLayer(stateNode.footerLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
}
ScrollingStateScrollingNode::~ScrollingStateScrollingNode()
{
}
-PassOwnPtr<ScrollingStateNode> ScrollingStateScrollingNode::clone(ScrollingStateTree& adoptiveTree)
+void ScrollingStateScrollingNode::setScrollableAreaSize(const FloatSize& size)
{
- return adoptPtr(new ScrollingStateScrollingNode(*this, adoptiveTree));
-}
-
-void ScrollingStateScrollingNode::setViewportRect(const IntRect& viewportRect)
-{
- if (m_viewportRect == viewportRect)
+ if (m_scrollableAreaSize == size)
return;
- m_viewportRect = viewportRect;
- setPropertyChanged(ViewportRect);
+ m_scrollableAreaSize = size;
+ setPropertyChanged(ScrollableAreaSize);
}
-void ScrollingStateScrollingNode::setTotalContentsSize(const IntSize& totalContentsSize)
+void ScrollingStateScrollingNode::setTotalContentsSize(const FloatSize& totalContentsSize)
{
if (m_totalContentsSize == totalContentsSize)
return;
@@ -112,159 +77,142 @@ void ScrollingStateScrollingNode::setTotalContentsSize(const IntSize& totalConte
setPropertyChanged(TotalContentsSize);
}
-void ScrollingStateScrollingNode::setScrollOrigin(const IntPoint& scrollOrigin)
+void ScrollingStateScrollingNode::setReachableContentsSize(const FloatSize& reachableContentsSize)
{
- if (m_scrollOrigin == scrollOrigin)
+ if (m_reachableContentsSize == reachableContentsSize)
return;
- m_scrollOrigin = scrollOrigin;
- setPropertyChanged(ScrollOrigin);
+ m_reachableContentsSize = reachableContentsSize;
+ setPropertyChanged(ReachableContentsSize);
}
-void ScrollingStateScrollingNode::setScrollableAreaParameters(const ScrollableAreaParameters& parameters)
+void ScrollingStateScrollingNode::setScrollPosition(const FloatPoint& scrollPosition)
{
- if (m_scrollableAreaParameters == parameters)
+ if (m_scrollPosition == scrollPosition)
return;
- m_scrollableAreaParameters = parameters;
- setPropertyChanged(ScrollableAreaParams);
+ m_scrollPosition = scrollPosition;
+ setPropertyChanged(ScrollPosition);
}
-void ScrollingStateScrollingNode::setFrameScaleFactor(float scaleFactor)
+void ScrollingStateScrollingNode::setScrollOrigin(const IntPoint& scrollOrigin)
{
- if (m_frameScaleFactor == scaleFactor)
+ if (m_scrollOrigin == scrollOrigin)
return;
- m_frameScaleFactor = scaleFactor;
-
- setPropertyChanged(FrameScaleFactor);
+ m_scrollOrigin = scrollOrigin;
+ setPropertyChanged(ScrollOrigin);
}
-void ScrollingStateScrollingNode::setNonFastScrollableRegion(const Region& nonFastScrollableRegion)
+#if ENABLE(CSS_SCROLL_SNAP)
+void ScrollingStateScrollingNode::setHorizontalSnapOffsets(const Vector<float>& snapOffsets)
{
- if (m_nonFastScrollableRegion == nonFastScrollableRegion)
+ if (m_snapOffsetsInfo.horizontalSnapOffsets == snapOffsets)
return;
- m_nonFastScrollableRegion = nonFastScrollableRegion;
- setPropertyChanged(NonFastScrollableRegion);
+ m_snapOffsetsInfo.horizontalSnapOffsets = snapOffsets;
+ setPropertyChanged(HorizontalSnapOffsets);
}
-void ScrollingStateScrollingNode::setWheelEventHandlerCount(unsigned wheelEventHandlerCount)
+void ScrollingStateScrollingNode::setVerticalSnapOffsets(const Vector<float>& snapOffsets)
{
- if (m_wheelEventHandlerCount == wheelEventHandlerCount)
+ if (m_snapOffsetsInfo.verticalSnapOffsets == snapOffsets)
return;
- m_wheelEventHandlerCount = wheelEventHandlerCount;
- setPropertyChanged(WheelEventHandlerCount);
+ m_snapOffsetsInfo.verticalSnapOffsets = snapOffsets;
+ setPropertyChanged(VerticalSnapOffsets);
}
-void ScrollingStateScrollingNode::setSynchronousScrollingReasons(SynchronousScrollingReasons reasons)
+void ScrollingStateScrollingNode::setHorizontalSnapOffsetRanges(const Vector<ScrollOffsetRange<float>>& scrollOffsetRanges)
{
- if (m_synchronousScrollingReasons == reasons)
+ if (m_snapOffsetsInfo.horizontalSnapOffsetRanges == scrollOffsetRanges)
return;
- m_synchronousScrollingReasons = reasons;
- setPropertyChanged(ReasonsForSynchronousScrolling);
+ m_snapOffsetsInfo.horizontalSnapOffsetRanges = scrollOffsetRanges;
+ setPropertyChanged(HorizontalSnapOffsetRanges);
}
-void ScrollingStateScrollingNode::setScrollBehaviorForFixedElements(ScrollBehaviorForFixedElements behaviorForFixed)
+void ScrollingStateScrollingNode::setVerticalSnapOffsetRanges(const Vector<ScrollOffsetRange<float>>& scrollOffsetRanges)
{
- if (m_behaviorForFixed == behaviorForFixed)
+ if (m_snapOffsetsInfo.verticalSnapOffsetRanges == scrollOffsetRanges)
return;
- m_behaviorForFixed = behaviorForFixed;
- setPropertyChanged(BehaviorForFixedElements);
-}
-
-void ScrollingStateScrollingNode::setRequestedScrollPosition(const IntPoint& requestedScrollPosition, bool representsProgrammaticScroll)
-{
- m_requestedScrollPosition = requestedScrollPosition;
- m_requestedScrollPositionRepresentsProgrammaticScroll = representsProgrammaticScroll;
- setPropertyChanged(RequestedScrollPosition);
+ m_snapOffsetsInfo.verticalSnapOffsetRanges = scrollOffsetRanges;
+ setPropertyChanged(VerticalSnapOffsetRanges);
}
-void ScrollingStateScrollingNode::setHeaderHeight(int headerHeight)
+void ScrollingStateScrollingNode::setCurrentHorizontalSnapPointIndex(unsigned index)
{
- if (m_headerHeight == headerHeight)
+ if (m_currentHorizontalSnapPointIndex == index)
return;
-
- m_headerHeight = headerHeight;
- setPropertyChanged(HeaderHeight);
+
+ m_currentHorizontalSnapPointIndex = index;
+ setPropertyChanged(CurrentHorizontalSnapOffsetIndex);
}
-void ScrollingStateScrollingNode::setFooterHeight(int footerHeight)
+void ScrollingStateScrollingNode::setCurrentVerticalSnapPointIndex(unsigned index)
{
- if (m_footerHeight == footerHeight)
+ if (m_currentVerticalSnapPointIndex == index)
return;
-
- m_footerHeight = footerHeight;
- setPropertyChanged(FooterHeight);
+
+ m_currentVerticalSnapPointIndex = index;
+ setPropertyChanged(CurrentVerticalSnapOffsetIndex);
}
+#endif
-void ScrollingStateScrollingNode::setCounterScrollingLayer(const LayerRepresentation& layerRepresentation)
+void ScrollingStateScrollingNode::setScrollableAreaParameters(const ScrollableAreaParameters& parameters)
{
- if (layerRepresentation == m_counterScrollingLayer)
+ if (m_scrollableAreaParameters == parameters)
return;
-
- m_counterScrollingLayer = layerRepresentation;
- setPropertyChanged(CounterScrollingLayer);
+ m_scrollableAreaParameters = parameters;
+ setPropertyChanged(ScrollableAreaParams);
}
-void ScrollingStateScrollingNode::setHeaderLayer(const LayerRepresentation& layerRepresentation)
+void ScrollingStateScrollingNode::setRequestedScrollPosition(const FloatPoint& requestedScrollPosition, bool representsProgrammaticScroll)
{
- if (layerRepresentation == m_headerLayer)
- return;
-
- m_headerLayer = layerRepresentation;
-
- setPropertyChanged(HeaderLayer);
+ m_requestedScrollPosition = requestedScrollPosition;
+ m_requestedScrollPositionRepresentsProgrammaticScroll = representsProgrammaticScroll;
+ setPropertyChanged(RequestedScrollPosition);
}
-
-void ScrollingStateScrollingNode::setFooterLayer(const LayerRepresentation& layerRepresentation)
+void ScrollingStateScrollingNode::setExpectsWheelEventTestTrigger(bool expectsTestTrigger)
{
- if (layerRepresentation == m_footerLayer)
+ if (expectsTestTrigger == m_expectsWheelEventTestTrigger)
return;
-
- m_footerLayer = layerRepresentation;
- setPropertyChanged(FooterLayer);
+ m_expectsWheelEventTestTrigger = expectsTestTrigger;
+ setPropertyChanged(ExpectsWheelEventTestTrigger);
}
-#if !(PLATFORM(MAC) && !PLATFORM(IOS))
-void ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars(Scrollbar*, Scrollbar*)
+void ScrollingStateScrollingNode::dumpProperties(TextStream& ts, int indent, ScrollingStateTreeAsTextBehavior) const
{
-}
-#endif
-
-void ScrollingStateScrollingNode::dumpProperties(TextStream& ts, int indent) const
-{
- ts << "(" << "Scrolling node" << "\n";
-
- if (!m_viewportRect.isEmpty()) {
+ if (m_scrollPosition != FloatPoint()) {
writeIndent(ts, indent + 1);
- ts << "(viewport rect " << m_viewportRect.x() << " " << m_viewportRect.y() << " " << m_viewportRect.width() << " " << m_viewportRect.height() << ")\n";
+ ts << "(scroll position "
+ << TextStream::FormatNumberRespectingIntegers(m_scrollPosition.x()) << " "
+ << TextStream::FormatNumberRespectingIntegers(m_scrollPosition.y()) << ")\n";
}
- if (!m_totalContentsSize.isEmpty()) {
+ if (!m_scrollableAreaSize.isEmpty()) {
writeIndent(ts, indent + 1);
- ts << "(contents size " << m_totalContentsSize.width() << " " << m_totalContentsSize.height() << ")\n";
+ ts << "(scrollable area size "
+ << TextStream::FormatNumberRespectingIntegers(m_scrollableAreaSize.width()) << " "
+ << TextStream::FormatNumberRespectingIntegers(m_scrollableAreaSize.height()) << ")\n";
}
- if (m_frameScaleFactor != 1) {
- writeIndent(ts, indent + 1);
- ts << "(frame scale factor " << m_frameScaleFactor << ")\n";
- }
-
- if (m_synchronousScrollingReasons) {
+ if (!m_totalContentsSize.isEmpty()) {
writeIndent(ts, indent + 1);
- ts << "(Scrolling on main thread because: " << ScrollingCoordinator::synchronousScrollingReasonsAsText(m_synchronousScrollingReasons) << ")\n";
+ ts << "(contents size "
+ << TextStream::FormatNumberRespectingIntegers(m_totalContentsSize.width()) << " "
+ << TextStream::FormatNumberRespectingIntegers(m_totalContentsSize.height()) << ")\n";
}
if (m_requestedScrollPosition != IntPoint()) {
writeIndent(ts, indent + 1);
- ts << "(requested scroll position " << m_requestedScrollPosition.x() << " " << m_requestedScrollPosition.y() << ")\n";
+ ts << "(requested scroll position "
+ << TextStream::FormatNumberRespectingIntegers(m_requestedScrollPosition.x()) << " "
+ << TextStream::FormatNumberRespectingIntegers(m_requestedScrollPosition.y()) << ")\n";
}
if (m_scrollOrigin != IntPoint()) {