Chromium Code Reviews| Index: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp |
| diff --git a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp |
| index 7809718197662d42c7d098da2a81de3594935373..5b68b74d74f7d9cc5d7b134999dae473b9218da3 100644 |
| --- a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp |
| +++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp |
| @@ -26,6 +26,7 @@ PaintPropertyTreeBuilder::setupInitialContext() { |
| context.current.clip = context.absolutePosition.clip = |
| context.fixedPosition.clip = ClipPaintPropertyNode::root(); |
| context.currentEffect = EffectPaintPropertyNode::root(); |
| + context.inputClipOfCurrentEffect = ClipPaintPropertyNode::root(); |
| context.current.transform = context.absolutePosition.transform = |
| context.fixedPosition.transform = TransformPaintPropertyNode::root(); |
| context.current.scroll = context.absolutePosition.scroll = |
| @@ -356,7 +357,8 @@ void PaintPropertyTreeBuilder::updateEffect( |
| filter = layer->createCompositorFilterOperationsForFilter(style); |
| } |
| - const ClipPaintPropertyNode* outputClip = ClipPaintPropertyNode::root(); |
| + const ClipPaintPropertyNode* outputClip = context.inputClipOfCurrentEffect; |
| + const ClipPaintPropertyNode* expansionHint = nullptr; |
| // The CSS filter spec didn't specify how filters interact with overflow |
| // clips. The implementation here mimics the old Blink/WebKit behavior for |
| // backward compatibility. |
| @@ -382,6 +384,7 @@ void PaintPropertyTreeBuilder::updateEffect( |
| // TODO(trchen): A filter may contain spatial operations such that an |
| // output pixel may depend on an input pixel outside of the output clip. |
| // We should generate a special clip node to represent this expansion. |
| + expansionHint = outputClip; |
|
chrishtr
2016/11/14 19:45:10
Why is it called expansionHint? It's not a hint is
trchen
2016/11/23 04:47:18
We haven't implemented one yet. The output clip is
|
| } |
| if (effectNodeNeeded) { |
| @@ -396,11 +399,11 @@ void PaintPropertyTreeBuilder::updateEffect( |
| const auto* properties = object.paintProperties(); |
| if (properties && properties->effect()) { |
| context.currentEffect = properties->effect(); |
| - // TODO(pdr): Once the expansion clip node is created above, it should be |
| - // used here to update all current clip nodes; |
| - const ClipPaintPropertyNode* expansionHint = context.current.clip; |
| - context.current.clip = context.absolutePosition.clip = |
| - context.fixedPosition.clip = expansionHint; |
| + if (expansionHint) { |
| + context.inputClipOfCurrentEffect = context.current.clip = |
| + context.absolutePosition.clip = context.fixedPosition.clip = |
| + expansionHint; |
| + } |
| } |
| } |