diff options
Diffstat (limited to 'Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp')
-rw-r--r-- | Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp | 220 |
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()) { |