Index: Source/core/paint/LayerPainter.cpp |
diff --git a/Source/core/paint/LayerPainter.cpp b/Source/core/paint/LayerPainter.cpp |
index 6092030e16346e74131fa9ddf8e735c606fa9643..d00ce6861dcc3d923586b85163ba3eb9cb1e601f 100644 |
--- a/Source/core/paint/LayerPainter.cpp |
+++ b/Source/core/paint/LayerPainter.cpp |
@@ -253,7 +253,7 @@ void LayerPainter::paintLayerContents(GraphicsContext* context, const LayerPaint |
beginTransparencyLayers(context, paintingInfo.rootLayer, paintingInfo.paintDirtyRect, paintingInfo.subPixelAccumulation, paintingInfo.paintBehavior); |
LayerPaintingInfo localPaintingInfo(paintingInfo); |
- FilterEffectRendererHelper filterPainter(m_renderLayer.filterRenderer() && m_renderLayer.paintsWithFilters()); |
+ bool haveFilterEffect = m_renderLayer.filterRenderer() && m_renderLayer.paintsWithFilters(); |
LayerFragments layerFragments; |
if (shouldPaintContent || shouldPaintOutline || isPaintingOverlayScrollbars) { |
@@ -265,34 +265,29 @@ void LayerPainter::paintLayerContents(GraphicsContext* context, const LayerPaint |
updatePaintingInfoForFragments(layerFragments, localPaintingInfo, paintFlags, shouldPaintContent, &offsetFromRoot); |
} |
- if (filterPainter.haveFilterEffect()) { |
+ if (haveFilterEffect) { |
ASSERT(m_renderLayer.filterInfo()); |
if (!rootRelativeBoundsComputed) |
rootRelativeBounds = m_renderLayer.physicalBoundingBoxIncludingReflectionAndStackingChildren(paintingInfo.rootLayer, offsetFromRoot); |
- if (filterPainter.prepareFilterEffect(&m_renderLayer, rootRelativeBounds, paintingInfo.paintDirtyRect)) { |
- |
- // Do transparency and clipping before starting filter processing. |
- if (haveTransparency) { |
- // If we have a filter and transparency, we have to eagerly start a transparency layer here, rather than risk a child layer lazily starts one after filter processing. |
- beginTransparencyLayers(context, localPaintingInfo.rootLayer, paintingInfo.paintDirtyRect, paintingInfo.subPixelAccumulation, localPaintingInfo.paintBehavior); |
- } |
- // We'll handle clipping to the dirty rect before filter rasterization. |
- // Filter processing will automatically expand the clip rect and the offscreen to accommodate any filter outsets. |
- // FIXME: It is incorrect to just clip to the damageRect here once multiple fragments are involved. |
- ClipRect backgroundRect = layerFragments.isEmpty() ? ClipRect() : layerFragments[0].backgroundRect; |
- clipToRect(localPaintingInfo, context, backgroundRect, paintFlags); |
- // Subsequent code should not clip to the dirty rect, since we've already |
- // done it above, and doing it later will defeat the outsets. |
- localPaintingInfo.clipToDirtyRect = false; |
- filterPainter.beginFilterEffect(context); |
- |
- if (!filterPainter.haveFilterEffect()) { |
- // If the the filter failed to start, undo the clip immediately |
- restoreClip(context, localPaintingInfo.paintDirtyRect, backgroundRect); |
- } |
- |
+ // Do transparency and clipping before starting filter processing. |
+ if (haveTransparency) { |
+ // If we have a filter and transparency, we have to eagerly start a transparency layer here, rather than risk a child layer lazily starts one after filter processing. |
+ beginTransparencyLayers(context, localPaintingInfo.rootLayer, paintingInfo.paintDirtyRect, paintingInfo.subPixelAccumulation, localPaintingInfo.paintBehavior); |
+ } |
+ // We'll handle clipping to the dirty rect before filter rasterization. |
+ // Filter processing will automatically expand the clip rect and the offscreen to accommodate any filter outsets. |
+ // FIXME: It is incorrect to just clip to the damageRect here once multiple fragments are involved. |
+ ClipRect backgroundRect = layerFragments.isEmpty() ? ClipRect() : layerFragments[0].backgroundRect; |
+ clipToRect(localPaintingInfo, context, backgroundRect, paintFlags); |
+ // Subsequent code should not clip to the dirty rect, since we've already |
+ // done it above, and doing it later will defeat the outsets. |
+ localPaintingInfo.clipToDirtyRect = false; |
+ haveFilterEffect = m_renderLayer.filterRenderer()->beginFilterEffect(context, rootRelativeBounds); |
+ if (!haveFilterEffect) { |
+ // If the the filter failed to start, undo the clip immediately |
+ restoreClip(context, localPaintingInfo.paintDirtyRect, backgroundRect); |
} |
} |
@@ -343,11 +338,11 @@ void LayerPainter::paintLayerContents(GraphicsContext* context, const LayerPaint |
if (shouldPaintOverlayScrollbars) |
paintOverflowControlsForFragments(layerFragments, context, localPaintingInfo, paintFlags); |
- if (filterPainter.haveFilterEffect()) { |
+ if (haveFilterEffect) { |
// Apply the correct clipping (ie. overflow: hidden). |
// FIXME: It is incorrect to just clip to the damageRect here once multiple fragments are involved. |
ClipRect backgroundRect = layerFragments.isEmpty() ? ClipRect() : layerFragments[0].backgroundRect; |
- filterPainter.endFilterEffect(context); |
+ m_renderLayer.filterRenderer()->endFilterEffect(context); |
restoreClip(context, localPaintingInfo.paintDirtyRect, backgroundRect); |
} |