Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(562)

Unified Diff: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp

Issue 2570223002: [SPv2] Associate effect property nodes for SVG paint chunks (Closed)
Patch Set: revert hasNonIso... change Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 cb0862c9be5a8166ea29b843cbbb9601fbfd0f82..53f35eb79b0e8e65b3b9ac8f9d6100291e56e53c 100644
--- a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
@@ -11,6 +11,7 @@
#include "core/layout/LayoutView.h"
#include "core/layout/compositing/CompositingReasonFinder.h"
#include "core/layout/svg/LayoutSVGRoot.h"
+#include "core/layout/svg/SVGLayoutSupport.h"
#include "core/paint/FindPropertiesNeedingUpdate.h"
#include "core/paint/ObjectPaintProperties.h"
#include "core/paint/PaintLayer.h"
@@ -396,10 +397,10 @@ void PaintPropertyTreeBuilder::updateEffect(
PaintPropertyTreeBuilderContext& context) {
const ComputedStyle& style = object.styleRef();
- // TODO(crbug.com/673500): style.isStackingContext() is only meaningful for
- // HTML elements. What we really want to ask is whether the element starts
- // an isolated group, and SVGs use a different rule.
- if (!style.isStackingContext()) {
+ const bool isCSSIsolatedGroup =
+ object.isBoxModelObject() && style.isStackingContext();
+ const bool isSVGExceptRoot = object.isSVG() && !object.isSVGRoot();
+ if (!isCSSIsolatedGroup && !isSVGExceptRoot) {
if (object.needsPaintPropertyUpdate() || context.forceSubtreeUpdate) {
if (auto* properties = object.getMutableForPainting().paintProperties())
context.forceSubtreeUpdate |= properties->clearEffect();
@@ -416,15 +417,17 @@ void PaintPropertyTreeBuilder::updateEffect(
// Yes, including LayoutSVGRoot, because SVG layout objects don't create
// PaintLayer so PaintLayer::hasNonIsolatedDescendantWithBlendMode()
// doesn't catch SVG descendants.
- if (object.hasNonIsolatedBlendingDescendants())
+ if (SVGLayoutSupport::isIsolationRequired(&object))
effectNodeNeeded = true;
} else if (PaintLayer* layer = toLayoutBoxModelObject(object).layer()) {
if (layer->hasNonIsolatedDescendantWithBlendMode())
effectNodeNeeded = true;
}
- SkBlendMode blendMode =
- WebCoreCompositeToSkiaComposite(CompositeSourceOver, style.blendMode());
+ SkBlendMode blendMode = object.isBlendingAllowed()
+ ? WebCoreCompositeToSkiaComposite(
+ CompositeSourceOver, style.blendMode())
+ : SkBlendMode::kSrcOver;
if (blendMode != SkBlendMode::kSrcOver)
effectNodeNeeded = true;

Powered by Google App Engine
This is Rietveld 408576698