Issue with filters and columns.
Created attachment 244402 [details] Testcase
rdar://problem/19313858
The rootRelativeBounds computed by RenderLayer::setupFilters() doesn't take columns into account.
clip-path is similarly broken.
Fix is something like this: diff --git a/Source/WebCore/rendering/RenderLayer.cpp b/Source/WebCore/rendering/RenderLayer.cpp index 1e9f4955775fa120f39cca40126296089e043746..8688273887be2d6dba3d741afe925a02071de05b 100644 --- a/Source/WebCore/rendering/RenderLayer.cpp +++ b/Source/WebCore/rendering/RenderLayer.cpp @@ -4094,12 +4094,14 @@ void RenderLayer::paintLayerContents(GraphicsContext* context, const LayerPainti bool needToAdjustSubpixelQuantization = setupFontSubpixelQuantization(context, didQuantizeFonts); // Apply clip-path to context. - bool hasClipPath = setupClipPath(context, paintingInfo, offsetFromRoot, rootRelativeBounds, rootRelativeBoundsComputed); + LayoutSize columnAwareOffsetFromRoot = toLayoutSize(convertToLayerCoords(paintingInfo.rootLayer, LayoutPoint(), AdjustForColumns)); + bool hasClipPath = setupClipPath(context, paintingInfo, columnAwareOffsetFromRoot, rootRelativeBounds, rootRelativeBoundsComputed); LayerPaintingInfo localPaintingInfo(paintingInfo); GraphicsContext* transparencyLayerContext = context; - std::unique_ptr<FilterEffectRendererHelper> filterPainter = setupFilters(context, localPaintingInfo, paintFlags, offsetFromRoot, rootRelativeBounds, rootRelativeBoundsComputed); + + std::unique_ptr<FilterEffectRendererHelper> filterPainter = setupFilters(context, localPaintingInfo, paintFlags, columnAwareOffsetFromRoot, rootRelativeBounds, rootRelativeBoundsComputed); if (filterPainter) { context = filterPainter->filterContext(); if (context != transparencyLayerContext && haveTransparency) {
Created attachment 244539 [details] Patch
Comment on attachment 244539 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=244539&action=review > Source/WebCore/rendering/RenderLayer.cpp:4110 > + if (renderer().flowThreadContainingBlock() && (renderer().hasClipPath() || hasFilterThatIsPainting(context, paintFlags))) Is the renderer().flowThreadContainingBlock() permissive enough to handle blocks deeply nested inside columns?
Comment on attachment 244539 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=244539&action=review >> Source/WebCore/rendering/RenderLayer.cpp:4110 >> + if (renderer().flowThreadContainingBlock() && (renderer().hasClipPath() || hasFilterThatIsPainting(context, paintFlags))) > > Is the renderer().flowThreadContainingBlock() permissive enough to handle blocks deeply nested inside columns? I believe so.
Committed r178380: <http://trac.webkit.org/changeset/178380>