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

Unified Diff: third_party/WebKit/Source/core/layout/svg/ReferenceFilterBuilder.cpp

Issue 1382163003: Split SVGFilterbuilder into "builder" and "node map" parts (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: No SVGFilterBuilder::m_filter; Reverse order of args to addPrimitive. Created 5 years, 2 months 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/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();
}

Powered by Google App Engine
This is Rietveld 408576698