bool ArgumentCoder<ScrollingStateStickyNode>::decode(ArgumentDecoder& decoder, ScrollingStateStickyNode& node) { if (!decoder.decode(static_cast<ScrollingStateNode&>(node))) return false; if (node.hasChangedProperty(ScrollingStateStickyNode::ViewportConstraints)) { StickyPositionViewportConstraints decodedValue; if (!decoder.decode(decodedValue)) return false; node.updateConstraints(decodedValue); } return true; }
void AsyncScrollingCoordinator::updateViewportConstrainedNode(ScrollingNodeID nodeID, const ViewportConstraints& constraints, GraphicsLayer* graphicsLayer) { ASSERT(supportsFixedPositionLayers()); ScrollingStateNode* node = m_scrollingStateTree->stateNodeForID(nodeID); if (!node) return; switch (constraints.constraintType()) { case ViewportConstraints::FixedPositionConstraint: { ScrollingStateFixedNode* fixedNode = toScrollingStateFixedNode(node); fixedNode->setLayer(graphicsLayer); fixedNode->updateConstraints((const FixedPositionViewportConstraints&)constraints); break; } case ViewportConstraints::StickyPositionConstraint: { ScrollingStateStickyNode* stickyNode = toScrollingStateStickyNode(node); stickyNode->setLayer(graphicsLayer); stickyNode->updateConstraints((const StickyPositionViewportConstraints&)constraints); break; } } }