| Index: Source/core/paint/DeprecatedPaintLayerPainter.cpp
|
| diff --git a/Source/core/paint/DeprecatedPaintLayerPainter.cpp b/Source/core/paint/DeprecatedPaintLayerPainter.cpp
|
| index b377cdfe02ee91c70e0e96d8affed000d1cd5b5d..21d80455bc4c91c4cc419f62f638bb6be0fb6d01 100644
|
| --- a/Source/core/paint/DeprecatedPaintLayerPainter.cpp
|
| +++ b/Source/core/paint/DeprecatedPaintLayerPainter.cpp
|
| @@ -120,7 +120,7 @@ void DeprecatedPaintLayerPainter::paintLayerContentsAndReflection(GraphicsContex
|
|
|
| class ClipPathHelper {
|
| public:
|
| - ClipPathHelper(GraphicsContext* context, const DeprecatedPaintLayer& paintLayer, const DeprecatedPaintLayerPaintingInfo& paintingInfo, LayoutRect& rootRelativeBounds, bool& rootRelativeBoundsComputed,
|
| + ClipPathHelper(GraphicsContext* context, const DeprecatedPaintLayer& paintLayer, DeprecatedPaintLayerPaintingInfo& paintingInfo, LayoutRect& rootRelativeBounds, bool& rootRelativeBoundsComputed,
|
| const LayoutPoint& offsetFromRoot, PaintLayerFlags paintFlags)
|
| : m_resourceClipper(0), m_paintLayer(paintLayer), m_context(context)
|
| {
|
| @@ -134,6 +134,8 @@ public:
|
|
|
| m_clipperState = SVGClipPainter::ClipperNotApplied;
|
|
|
| + paintingInfo.ancestorHasClipPathClipping = true;
|
| +
|
| ASSERT(style.clipPath());
|
| if (style.clipPath()->type() == ClipPathOperation::SHAPE) {
|
| ShapeClipPathOperation* clipPath = toShapeClipPathOperation(style.clipPath());
|
| @@ -178,7 +180,7 @@ private:
|
| GraphicsContext* m_context;
|
| };
|
|
|
| -void DeprecatedPaintLayerPainter::paintLayerContents(GraphicsContext* context, const DeprecatedPaintLayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags, FragmentPolicy fragmentPolicy)
|
| +void DeprecatedPaintLayerPainter::paintLayerContents(GraphicsContext* context, const DeprecatedPaintLayerPaintingInfo& paintingInfoArg, PaintLayerFlags paintFlags, FragmentPolicy fragmentPolicy)
|
| {
|
| ASSERT(m_paintLayer.isSelfPaintingLayer() || m_paintLayer.hasSelfPaintingLayerDescendant());
|
| ASSERT(!(paintFlags & PaintLayerAppliedTransform));
|
| @@ -203,6 +205,8 @@ void DeprecatedPaintLayerPainter::paintLayerContents(GraphicsContext* context, c
|
| if (paintFlags & PaintLayerPaintingRootBackgroundOnly && !m_paintLayer.layoutObject()->isLayoutView() && !m_paintLayer.layoutObject()->isDocumentElement())
|
| return;
|
|
|
| + DeprecatedPaintLayerPaintingInfo paintingInfo = paintingInfoArg;
|
| +
|
| // Ensure our lists are up-to-date.
|
| m_paintLayer.stackingNode()->updateLayerListsIfNeeded();
|
|
|
| @@ -217,6 +221,9 @@ void DeprecatedPaintLayerPainter::paintLayerContents(GraphicsContext* context, c
|
| LayoutRect rootRelativeBounds;
|
| bool rootRelativeBoundsComputed = false;
|
|
|
| + if (paintingInfo.ancestorHasClipPathClipping && m_paintLayer.layoutObject()->style()->position() != StaticPosition)
|
| + UseCounter::count(m_paintLayer.layoutObject()->document(), UseCounter::ClipPathOfPositionedElement);
|
| +
|
| // These helpers output clip and compositing operations using a RAII pattern. Stack-allocated-varibles are destructed in the reverse order of construction,
|
| // so they are nested properly.
|
| ClipPathHelper clipPathHelper(context, m_paintLayer, paintingInfo, rootRelativeBounds, rootRelativeBoundsComputed, offsetFromRoot, paintFlags);
|
| @@ -384,8 +391,11 @@ void DeprecatedPaintLayerPainter::paintLayerWithTransform(GraphicsContext* conte
|
| clipRectForFragment.intersect(fragment.backgroundRect);
|
| if (clipRectForFragment.isEmpty())
|
| continue;
|
| - if (needsToClip(paintingInfo, clipRectForFragment))
|
| + if (needsToClip(paintingInfo, clipRectForFragment)) {
|
| + if (m_paintLayer.layoutObject()->style()->position() != StaticPosition && clipRectForFragment.isClippedByClipCss())
|
| + UseCounter::count(m_paintLayer.layoutObject()->document(), UseCounter::ClipCssOfPositionedElement);
|
| clipRecorder.emplace(*context, *parentLayer->layoutObject(), DisplayItem::ClipLayerParent, clipRectForFragment, &paintingInfo, fragment.paginationOffset, paintFlags);
|
| + }
|
| }
|
|
|
| paintFragmentByApplyingTransform(context, paintingInfo, paintFlags, fragment.paginationOffset);
|
| @@ -409,6 +419,7 @@ void DeprecatedPaintLayerPainter::paintFragmentByApplyingTransform(GraphicsConte
|
| // Now do a paint with the root layer shifted to be us.
|
| DeprecatedPaintLayerPaintingInfo transformedPaintingInfo(&m_paintLayer, LayoutRect(enclosingIntRect(transform.inverse().mapRect(paintingInfo.paintDirtyRect))), paintingInfo.globalPaintFlags(),
|
| adjustedSubPixelAccumulation, paintingInfo.paintingRoot);
|
| + transformedPaintingInfo.ancestorHasClipPathClipping = paintingInfo.ancestorHasClipPathClipping;
|
| paintLayerContentsAndReflection(context, transformedPaintingInfo, paintFlags, ForceSingleFragment);
|
| }
|
|
|
|
|