Chromium Code Reviews| Index: third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp |
| diff --git a/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp b/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp |
| index 0ff40ac98a76e1f0088eed1ff66a42638ab3a422..3b11423168c8b208cb3e6cdaf1c058ea797077af 100644 |
| --- a/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp |
| +++ b/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp |
| @@ -69,12 +69,12 @@ static void adjustClipRectsForChildren(const LayoutObject& layoutObject, ClipRec |
| static void applyClipRects(const ClipRectsContext& context, const LayoutObject& layoutObject, LayoutPoint offset, ClipRects& clipRects) |
| { |
| - ASSERT(layoutObject.hasOverflowClip() || layoutObject.hasClip()); |
| + ASSERT(layoutObject.hasOverflowClip() || layoutObject.hasClip() || layoutObject.style()->containsPaint()); |
|
chrishtr
2015/12/09 23:34:58
hasClipRelatedProperty()
|
| LayoutView* view = layoutObject.view(); |
| ASSERT(view); |
| if (clipRects.fixed() && context.rootLayer->layoutObject() == view) |
| offset -= toIntSize(view->frameView()->scrollPosition()); |
| - if (layoutObject.hasOverflowClip()) { |
| + if (layoutObject.hasOverflowClip() || layoutObject.style()->containsPaint()) { |
| ClipRect newOverflowClip = toLayoutBox(layoutObject).overflowClipRect(offset, context.scrollbarRelevancy); |
| newOverflowClip.setHasRadius(layoutObject.style()->hasBorderRadius()); |
| clipRects.setOverflowClipRect(intersection(newOverflowClip, clipRects.overflowClipRect())); |
| @@ -82,6 +82,10 @@ static void applyClipRects(const ClipRectsContext& context, const LayoutObject& |
| clipRects.setPosClipRect(intersection(newOverflowClip, clipRects.posClipRect())); |
| if (layoutObject.isLayoutView()) |
| clipRects.setFixedClipRect(intersection(newOverflowClip, clipRects.fixedClipRect())); |
| + if (layoutObject.style()->containsPaint()) { |
| + clipRects.setPosClipRect(intersection(newOverflowClip, clipRects.posClipRect())); |
| + clipRects.setFixedClipRect(intersection(newOverflowClip, clipRects.fixedClipRect())); |
| + } |
| } |
| if (layoutObject.hasClip()) { |
| LayoutRect newClip = toLayoutBox(layoutObject).clipRect(offset); |
| @@ -213,7 +217,7 @@ void PaintLayerClipper::calculateRects(const ClipRectsContext& context, const La |
| layerBounds = LayoutRect(offset, LayoutSize(m_layoutObject.layer()->size())); |
| // Update the clip rects that will be passed to child layers. |
| - if (m_layoutObject.hasOverflowClip() && shouldRespectOverflowClip(context)) { |
| + if ((m_layoutObject.hasOverflowClip() && shouldRespectOverflowClip(context)) || m_layoutObject.style()->containsPaint()) { |
| foregroundRect.intersect(toLayoutBox(m_layoutObject).overflowClipRect(offset, context.scrollbarRelevancy)); |
| if (m_layoutObject.style()->hasBorderRadius()) |
| foregroundRect.setHasRadius(true); |
| @@ -267,7 +271,7 @@ void PaintLayerClipper::calculateClipRects(const ClipRectsContext& context, Clip |
| adjustClipRectsForChildren(m_layoutObject, clipRects); |
| - if ((m_layoutObject.hasOverflowClip() && shouldRespectOverflowClip(context)) || m_layoutObject.hasClip()) { |
| + if ((m_layoutObject.hasOverflowClip() && shouldRespectOverflowClip(context)) || m_layoutObject.hasClip() || m_layoutObject.style()->containsPaint()) { |
| // This offset cannot use convertToLayerCoords, because sometimes our rootLayer may be across |
| // some transformed layer boundary, for example, in the PaintLayerCompositor overlapMap, where |
| // clipRects are needed in view space. |