ClipRect RenderLayerClipper::backgroundClipRect(const ClipRectsContext& clipRectsContext) const { ASSERT(m_renderer.layer()->parent()); if (clipRectsContext.clipRectsType == CompositingClipRects) const_cast<RenderLayerClipper*>(this)->clearClipRectsIncludingDescendants(CompositingClipRects); ClipRects parentRects; // If we cross into a different pagination context, then we can't rely on the cache. // Just switch over to using TemporaryClipRects. if (clipRectsContext.clipRectsType != TemporaryClipRects && m_renderer.layer()->parent()->enclosingPaginationLayer() != m_renderer.layer()->enclosingPaginationLayer()) { ClipRectsContext tempContext(clipRectsContext); tempContext.clipRectsType = TemporaryClipRects; parentClipRects(tempContext, parentRects); } else { parentClipRects(clipRectsContext, parentRects); } ClipRect backgroundClipRect = backgroundClipRectForPosition(parentRects, m_renderer.style()->position()); RenderView* view = m_renderer.view(); ASSERT(view); // Note: infinite clipRects should not be scrolled here, otherwise they will accidentally no longer be considered infinite. if (parentRects.fixed() && clipRectsContext.rootLayer->renderer() == view && backgroundClipRect != PaintInfo::infiniteRect()) backgroundClipRect.move(view->frameView()->scrollOffsetForFixedPosition()); return backgroundClipRect; }
ClipRect PaintLayerClipper::backgroundClipRect( const ClipRectsContext& context) const { if (m_geometryMapper) { ClipRect backgroundClipRect = clipRectWithGeometryMapper(context, false); #ifdef CHECK_CLIP_RECTS ClipRect testBackgroundClipRect = PaintLayerClipper(m_layer, false).backgroundClipRect(context); CHECK_RECTS_EQ(testBackgroundClipRect, backgroundClipRect); #endif return backgroundClipRect; } DCHECK(m_layer.parent()); LayoutView* layoutView = m_layer.layoutObject()->view(); DCHECK(layoutView); RefPtr<ClipRects> parentClipRects = ClipRects::create(); if (&m_layer == context.rootLayer) parentClipRects->reset(LayoutRect(LayoutRect::infiniteIntRect())); else m_layer.parent()->clipper().getOrCalculateClipRects(context, *parentClipRects); ClipRect result = backgroundClipRectForPosition( *parentClipRects, m_layer.layoutObject()->styleRef().position()); // Note: infinite clipRects should not be scrolled here, otherwise they will // accidentally no longer be considered infinite. if (parentClipRects->fixed() && context.rootLayer->layoutObject() == layoutView && result != LayoutRect(LayoutRect::infiniteIntRect())) result.move(LayoutSize(layoutView->frameView()->scrollOffset())); return result; }
ClipRect RenderLayerClipper::backgroundClipRect(const ClipRectsContext& context) const { ASSERT(m_renderer.layer()->parent()); ASSERT(m_renderer.view()); ClipRects parentClipRects; if (m_renderer.layer() == context.rootLayer) parentClipRects.reset(PaintInfo::infiniteRect()); else m_renderer.layer()->parent()->clipper().getOrCalculateClipRects(context, parentClipRects); return backgroundClipRectForPosition(parentClipRects, m_renderer.style()->position()); }
ClipRect PaintLayerClipper::backgroundClipRect(const ClipRectsContext& context) const { ASSERT(m_layoutObject.layer()->parent()); ASSERT(m_layoutObject.view()); RefPtr<ClipRects> parentClipRects = ClipRects::create(); if (m_layoutObject.layer() == context.rootLayer) parentClipRects->reset(LayoutRect(LayoutRect::infiniteIntRect())); else m_layoutObject.layer()->parent()->clipper().getOrCalculateClipRects(context, *parentClipRects); ClipRect result = backgroundClipRectForPosition(*parentClipRects, m_layoutObject.style()->position()); // Note: infinite clipRects should not be scrolled here, otherwise they will accidentally no longer be considered infinite. if (parentClipRects->fixed() && context.rootLayer->layoutObject() == m_layoutObject.view() && result != LayoutRect(LayoutRect::infiniteIntRect())) result.move(toIntSize(m_layoutObject.view()->frameView()->scrollPosition())); return result; }
ClipRect RenderLayerClipper::backgroundClipRect(const ClipRectsContext& context) const { ASSERT(m_renderer.layer()->parent()); ASSERT(m_renderer.view()); ClipRects parentClipRects; if (m_renderer.layer() == context.rootLayer) parentClipRects.reset(PaintInfo::infiniteRect()); else m_renderer.layer()->parent()->clipper().getOrCalculateClipRects(context, parentClipRects); ClipRect result = backgroundClipRectForPosition(parentClipRects, m_renderer.style()->position()); // Note: infinite clipRects should not be scrolled here, otherwise they will accidentally no longer be considered infinite. if (parentClipRects.fixed() && context.rootLayer->renderer() == m_renderer.view() && result != PaintInfo::infiniteRect()) result.move(m_renderer.view()->frameView()->scrollOffsetForFixedPosition()); return result; }