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 0c08e165b199e035e690f5b660fdb94097baa063..c26e496de9819883ec70489232db8eee095e0349 100644 |
--- a/third_party/WebKit/Source/core/layout/svg/ReferenceFilterBuilder.cpp |
+++ b/third_party/WebKit/Source/core/layout/svg/ReferenceFilterBuilder.cpp |
@@ -28,16 +28,11 @@ |
#include "config.h" |
#include "core/layout/svg/ReferenceFilterBuilder.h" |
-#include "core/css/CSSPrimitiveValue.h" |
-#include "core/css/CSSPrimitiveValueMappings.h" |
-#include "core/css/StylePropertySet.h" |
#include "core/dom/Element.h" |
-#include "core/dom/ElementTraversal.h" |
#include "core/fetch/DocumentResource.h" |
#include "core/layout/LayoutBox.h" |
-#include "core/layout/svg/LayoutSVGResourceFilter.h" |
#include "core/svg/SVGDocumentExtensions.h" |
-#include "core/svg/SVGFilterPrimitiveStandardAttributes.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" |
@@ -69,26 +64,6 @@ void ReferenceFilterBuilder::clearDocumentResourceReference(const FilterOperatio |
documentResourceReferences->remove(filterOperation); |
} |
-// Returns the color-interpolation-filters property of the element. |
-static EColorInterpolation colorInterpolationForElement(SVGElement& element, EColorInterpolation parentColorInterpolation) |
-{ |
- if (const LayoutObject* layoutObject = element.layoutObject()) |
- return layoutObject->styleRef().svgStyle().colorInterpolationFilters(); |
- |
- // No layout has been performed, try to determine the property value |
- // "manually" (used by external SVG files.) |
- if (const StylePropertySet* propertySet = element.presentationAttributeStyle()) { |
- RefPtrWillBeRawPtr<CSSValue> cssValue = propertySet->getPropertyCSSValue(CSSPropertyColorInterpolationFilters); |
- if (cssValue && cssValue->isPrimitiveValue()) { |
- const CSSPrimitiveValue& primitiveValue = *((CSSPrimitiveValue*)cssValue.get()); |
- return static_cast<EColorInterpolation>(primitiveValue); |
- } |
- } |
- // 'auto' is the default (per Filter Effects), but since the property is |
- // inherited, propagate the parent's value. |
- return parentColorInterpolation; |
-} |
- |
PassRefPtrWillBeRawPtr<Filter> ReferenceFilterBuilder::build(float zoom, Element* element, FilterEffect* previousEffect, const ReferenceFilterOperation& filterOperation) |
{ |
TreeScope* treeScope = &element->treeScope(); |
@@ -129,26 +104,11 @@ PassRefPtrWillBeRawPtr<Filter> ReferenceFilterBuilder::build(float zoom, Element |
RefPtrWillBeRawPtr<Filter> result(Filter::create(referenceBox, filterRegion, zoom, unitScaling)); |
if (!previousEffect) |
previousEffect = result->sourceGraphic(); |
- RefPtrWillBeRawPtr<SVGFilterBuilder> builder = SVGFilterBuilder::create(previousEffect); |
- EColorInterpolation filterColorInterpolation = colorInterpolationForElement(filterElement, CI_AUTO); |
+ SVGFilterBuilder builder(previousEffect); |
+ builder.buildGraph(result.get(), filterElement, referenceBox); |
- for (SVGElement* element = Traversal<SVGElement>::firstChild(filterElement); element; element = Traversal<SVGElement>::nextSibling(*element)) { |
- if (!element->isFilterEffect()) |
- continue; |
- |
- SVGFilterPrimitiveStandardAttributes* effectElement = static_cast<SVGFilterPrimitiveStandardAttributes*>(element); |
- RefPtrWillBeRawPtr<FilterEffect> effect = effectElement->build(builder.get(), result.get()); |
- if (!effect) |
- continue; |
- |
- effectElement->setStandardAttributes(effect.get()); |
- effect->setEffectBoundaries(SVGLengthContext::resolveRectangle<SVGFilterPrimitiveStandardAttributes>(effectElement, filterElement.primitiveUnits()->currentValue()->enumValue(), referenceBox)); |
- EColorInterpolation colorInterpolation = colorInterpolationForElement(*effectElement, filterColorInterpolation); |
- effect->setOperatingColorSpace(colorInterpolation == CI_LINEARRGB ? ColorSpaceLinearRGB : ColorSpaceDeviceRGB); |
- builder->add(AtomicString(effectElement->result()->currentValue()->value()), effect); |
- } |
- result->setLastEffect(builder->lastEffect()); |
+ result->setLastEffect(builder.lastEffect()); |
return result.release(); |
} |