Index: third_party/WebKit/Source/core/layout/svg/ReferenceFilterBuilder.cpp |
diff --git a/third_party/WebKit/Source/core/layout/svg/ReferenceFilterBuilder.cpp b/third_party/WebKit/Source/core/layout/svg/ReferenceFilterBuilder.cpp |
index 98754878cefbde7cae7a6a32eb4dd269e75a9df5..d4fd2509f80728601384d0f033abf2eb699f8b15 100644 |
--- a/third_party/WebKit/Source/core/layout/svg/ReferenceFilterBuilder.cpp |
+++ b/third_party/WebKit/Source/core/layout/svg/ReferenceFilterBuilder.cpp |
@@ -29,13 +29,9 @@ |
#include "core/dom/Element.h" |
#include "core/fetch/DocumentResource.h" |
-#include "core/layout/LayoutObject.h" |
-#include "core/paint/PaintLayer.h" |
#include "core/svg/SVGDocumentExtensions.h" |
#include "core/svg/SVGFilterElement.h" |
-#include "core/svg/graphics/filters/SVGFilterBuilder.h" |
-#include "platform/graphics/filters/Filter.h" |
-#include "platform/graphics/filters/SourceGraphic.h" |
+#include "platform/graphics/filters/FilterOperation.h" |
namespace blink { |
@@ -62,16 +58,14 @@ void ReferenceFilterBuilder::setDocumentResourceReference(const FilterOperation* |
documentResourceReferences().add(filterOperation, documentResourceReference); |
} |
-Filter* ReferenceFilterBuilder::build(float zoom, Element* element, FilterEffect* previousEffect, const ReferenceFilterOperation& filterOperation, const FloatSize* referenceBoxSize, const SkPaint* fillPaint, const SkPaint* strokePaint) |
+SVGFilterElement* ReferenceFilterBuilder::resolveFilterReference(const ReferenceFilterOperation& filterOperation, Element& element) |
{ |
- TreeScope* treeScope = &element->treeScope(); |
+ TreeScope* treeScope = &element.treeScope(); |
if (DocumentResourceReference* documentResourceRef = documentResourceReference(&filterOperation)) { |
- DocumentResource* cachedSVGDocument = documentResourceRef->document(); |
- |
// If we have an SVG document, this is an external reference. Otherwise |
// we look up the referenced node in the current document. |
- if (cachedSVGDocument) |
+ if (DocumentResource* cachedSVGDocument = documentResourceRef->document()) |
treeScope = cachedSVGDocument->document(); |
} |
@@ -83,35 +77,14 @@ Filter* ReferenceFilterBuilder::build(float zoom, Element* element, FilterEffect |
if (!filter) { |
// Although we did not find the referenced filter, it might exist later |
// in the document. |
- treeScope->document().accessSVGExtensions().addPendingResource(filterOperation.fragment(), element); |
+ treeScope->document().accessSVGExtensions().addPendingResource(filterOperation.fragment(), &element); |
return nullptr; |
} |
if (!isSVGFilterElement(*filter)) |
return nullptr; |
- SVGFilterElement& filterElement = toSVGFilterElement(*filter); |
- |
- FloatRect referenceBox; |
- if (referenceBoxSize) { |
- referenceBox = FloatRect(FloatPoint(), *referenceBoxSize); |
- } else if (element->inShadowIncludingDocument() && element->layoutObject() && element->layoutObject()->enclosingLayer()) { |
- FloatSize size(element->layoutObject()->enclosingLayer()->physicalBoundingBoxIncludingReflectionAndStackingChildren(LayoutPoint()).size()); |
- referenceBox = FloatRect(FloatPoint(), size); |
- } |
- referenceBox.scale(1.0f / zoom); |
- FloatRect filterRegion = SVGLengthContext::resolveRectangle<SVGFilterElement>(&filterElement, filterElement.filterUnits()->currentValue()->enumValue(), referenceBox); |
- bool primitiveBoundingBoxMode = filterElement.primitiveUnits()->currentValue()->enumValue() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX; |
- Filter::UnitScaling unitScaling = primitiveBoundingBoxMode ? Filter::BoundingBox : Filter::UserSpace; |
- Filter* result = Filter::create(referenceBox, filterRegion, zoom, unitScaling); |
- if (!previousEffect) |
- previousEffect = result->getSourceGraphic(); |
- |
- SVGFilterBuilder builder(previousEffect, nullptr, fillPaint, strokePaint); |
- builder.buildGraph(result, filterElement, referenceBox); |
- |
- result->setLastEffect(builder.lastEffect()); |
- return result; |
+ return toSVGFilterElement(filter); |
} |
} // namespace blink |