void PaintPropertyTreeBuilder::updateScrollTranslation(const LayoutObject& object, PaintPropertyTreeBuilderContext& context) { if (!object.isBoxModelObject() || !object.hasOverflowClip()) return; PaintLayer* layer = toLayoutBoxModelObject(object).layer(); ASSERT(layer); DoubleSize scrollOffset = layer->getScrollableArea()->scrollOffset(); if (scrollOffset.isZero() && !layer->scrollsOverflow()) return; RefPtr<TransformPaintPropertyNode> scrollTranslation = TransformPaintPropertyNode::create( TransformationMatrix().translate(-scrollOffset.width(), -scrollOffset.height()), FloatPoint3D(), context.currentTransform); context.currentTransform = scrollTranslation.get(); object.getMutableForPainting().ensureObjectPaintProperties().setScrollTranslation(scrollTranslation.release()); }
void ScrollAnchor::clear() { LayoutObject* layoutObject = m_anchorObject ? m_anchorObject : scrollerLayoutBox(m_scroller); PaintLayer* layer = nullptr; if (LayoutObject* parent = layoutObject->parent()) layer = parent->enclosingLayer(); // Walk up the layer tree to clear any scroll anchors. while (layer) { if (PaintLayerScrollableArea* scrollableArea = layer->getScrollableArea()) { ScrollAnchor* anchor = scrollableArea->scrollAnchor(); DCHECK(anchor); anchor->clearSelf(); } layer = layer->parent(); } if (FrameView* view = layoutObject->frameView()) { ScrollAnchor* anchor = view->scrollAnchor(); DCHECK(anchor); anchor->clearSelf(); } }