void RemoteScrollingCoordinatorProxy::connectStateNodeLayers(ScrollingStateTree& stateTree, const RemoteLayerTreeHost& layerTreeHost) { for (auto it : stateTree.nodeMap()) { ScrollingStateNode* currNode = it.value; switch (currNode->nodeType()) { case ScrollingNode: { ScrollingStateScrollingNode* scrollingStateNode = toScrollingStateScrollingNode(currNode); if (scrollingStateNode->hasChangedProperty(ScrollingStateNode::ScrollLayer)) scrollingStateNode->setLayer(layerTreeHost.getLayer(scrollingStateNode->layer())); if (scrollingStateNode->hasChangedProperty(ScrollingStateScrollingNode::CounterScrollingLayer)) scrollingStateNode->setCounterScrollingLayer(layerTreeHost.getLayer(scrollingStateNode->counterScrollingLayer())); // FIXME: we should never have header and footer layers coming from the WebProcess. if (scrollingStateNode->hasChangedProperty(ScrollingStateScrollingNode::HeaderLayer)) scrollingStateNode->setHeaderLayer(layerTreeHost.getLayer(scrollingStateNode->headerLayer())); if (scrollingStateNode->hasChangedProperty(ScrollingStateScrollingNode::FooterLayer)) scrollingStateNode->setFooterLayer(layerTreeHost.getLayer(scrollingStateNode->footerLayer())); break; } case FixedNode: if (currNode->hasChangedProperty(ScrollingStateNode::ScrollLayer)) currNode->setLayer(layerTreeHost.getLayer(currNode->layer())); break; case StickyNode: if (currNode->hasChangedProperty(ScrollingStateNode::ScrollLayer)) currNode->setLayer(layerTreeHost.getLayer(currNode->layer())); break; } } }
void AsyncScrollingCoordinator::updateScrollingNode(ScrollingNodeID nodeID, GraphicsLayer* scrollLayer, GraphicsLayer* counterScrollingLayer) { ScrollingStateScrollingNode* node = toScrollingStateScrollingNode(m_scrollingStateTree->stateNodeForID(nodeID)); ASSERT(node); if (!node) return; node->setLayer(scrollLayer); node->setCounterScrollingLayer(counterScrollingLayer); }
bool ArgumentCoder<ScrollingStateScrollingNode>::decode(ArgumentDecoder& decoder, ScrollingStateScrollingNode& node) { if (!decoder.decode(static_cast<ScrollingStateNode&>(node))) return false; SCROLLING_NODE_DECODE(ViewportSize, FloatSize, setViewportSize); SCROLLING_NODE_DECODE(TotalContentsSize, IntSize, setTotalContentsSize); SCROLLING_NODE_DECODE(ScrollPosition, FloatPoint, setScrollPosition); SCROLLING_NODE_DECODE(ScrollOrigin, IntPoint, setScrollOrigin); SCROLLING_NODE_DECODE(FrameScaleFactor, float, setFrameScaleFactor); SCROLLING_NODE_DECODE(NonFastScrollableRegion, Region, setNonFastScrollableRegion); SCROLLING_NODE_DECODE(WheelEventHandlerCount, int, setWheelEventHandlerCount); SCROLLING_NODE_DECODE(ReasonsForSynchronousScrolling, SynchronousScrollingReasons, setSynchronousScrollingReasons); SCROLLING_NODE_DECODE(ScrollableAreaParams, ScrollableAreaParameters, setScrollableAreaParameters); SCROLLING_NODE_DECODE_ENUM(BehaviorForFixedElements, ScrollBehaviorForFixedElements, setScrollBehaviorForFixedElements); if (node.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition)) { FloatPoint scrollPosition; if (!decoder.decode(scrollPosition)) return false; bool representsProgrammaticScroll; if (!decoder.decode(representsProgrammaticScroll)) return false; node.setRequestedScrollPosition(scrollPosition, representsProgrammaticScroll); } SCROLLING_NODE_DECODE(HeaderHeight, int, setHeaderHeight); SCROLLING_NODE_DECODE(FooterHeight, int, setFooterHeight); SCROLLING_NODE_DECODE(TopContentInset, float, setTopContentInset); if (node.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) { GraphicsLayer::PlatformLayerID layerID; if (!decoder.decode(layerID)) return false; node.setScrolledContentsLayer(layerID); } if (node.hasChangedProperty(ScrollingStateScrollingNode::CounterScrollingLayer)) { GraphicsLayer::PlatformLayerID layerID; if (!decoder.decode(layerID)) return false; node.setCounterScrollingLayer(layerID); } return true; }