Chromium Code Reviews| Index: Source/core/rendering/RenderLayer.cpp |
| diff --git a/Source/core/rendering/RenderLayer.cpp b/Source/core/rendering/RenderLayer.cpp |
| index ce1b55467411bbc81f6aa8ac81e3eafc3f8d2f27..ef30b52f2848672143c4ffab5fe52354e9feb3ab 100644 |
| --- a/Source/core/rendering/RenderLayer.cpp |
| +++ b/Source/core/rendering/RenderLayer.cpp |
| @@ -3901,6 +3901,15 @@ inline bool RenderLayer::needsCompositingLayersRebuiltForFilters(const RenderSty |
| return false; |
| } |
| +inline bool RenderLayer::needsCompositingLayersRebuiltForBlending(const RenderStyle* oldStyle, const RenderStyle* newStyle) const |
| +{ |
| + ASSERT(newStyle); |
| + if (!hasCompositedLayerMapping()) |
| + return false; |
| + return (shouldIsolateCompositedDescendants() && !stackingNode()->isStackingContext()) |
| + || (oldStyle && (oldStyle->hasBlendMode() != newStyle->hasBlendMode())); |
| +} |
| + |
| void RenderLayer::updateFilters(const RenderStyle* oldStyle, const RenderStyle* newStyle) |
| { |
| if (!hasOrHadFilters(oldStyle, newStyle)) |
| @@ -3947,7 +3956,8 @@ void RenderLayer::styleChanged(StyleDifference, const RenderStyle* oldStyle) |
| if (compositor()->updateLayerCompositingState(this) |
| || needsCompositingLayersRebuiltForClip(oldStyle, newStyle) |
| || needsCompositingLayersRebuiltForOverflow(oldStyle, newStyle) |
| - || needsCompositingLayersRebuiltForFilters(oldStyle, newStyle, didPaintWithFilters)) |
| + || needsCompositingLayersRebuiltForFilters(oldStyle, newStyle, didPaintWithFilters) |
| + || needsCompositingLayersRebuiltForBlending(oldStyle, newStyle)) |
|
rosca
2013/11/25 21:11:41
I added this new check. The tree must be rebuilt i
|
| compositor()->setCompositingLayersNeedRebuild(); |
| else if (hasCompositedLayerMapping()) |
| compositedLayerMapping()->updateGraphicsLayerGeometry(); |