Index: third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp |
diff --git a/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp b/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp |
index bb7a3f932b15b7f932fe9211271b621ad237ad3c..f54c0ce6e3a1e765251247089ea2e991b7051e82 100644 |
--- a/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp |
+++ b/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp |
@@ -122,31 +122,32 @@ GraphicsContext* SVGFilterPainter::prepareEffect(const LayoutObject& object, SVG |
} |
OwnPtrWillBeRawPtr<FilterData> filterData = FilterData::create(); |
- FloatRect targetBoundingBox = object.objectBoundingBox(); |
+ FloatRect referenceBox = object.objectBoundingBox(); |
SVGFilterElement* filterElement = toSVGFilterElement(m_filter.element()); |
- FloatRect filterRegion = SVGLengthContext::resolveRectangle<SVGFilterElement>(filterElement, filterElement->filterUnits()->currentValue()->enumValue(), targetBoundingBox); |
+ FloatRect filterRegion = SVGLengthContext::resolveRectangle<SVGFilterElement>(filterElement, filterElement->filterUnits()->currentValue()->enumValue(), referenceBox); |
if (filterRegion.isEmpty()) |
return nullptr; |
// Create the SVGFilter object. |
bool primitiveBoundingBoxMode = filterElement->primitiveUnits()->currentValue()->enumValue() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX; |
Filter::UnitScaling unitScaling = primitiveBoundingBoxMode ? Filter::BoundingBox : Filter::UserSpace; |
- filterData->filter = Filter::create(targetBoundingBox, filterRegion, 1, unitScaling); |
+ filterData->filter = Filter::create(referenceBox, filterRegion, 1, unitScaling); |
+ filterData->nodeMap = SVGFilterGraphNodeMap::create(); |
IntRect sourceRegion = enclosingIntRect(intersection(filterRegion, object.strokeBoundingBox())); |
filterData->filter->sourceGraphic()->setSourceRect(sourceRegion); |
// Create all relevant filter primitives. |
- filterData->builder = m_filter.buildPrimitives(filterData->filter.get()); |
- if (!filterData->builder) |
- return nullptr; |
+ SVGFilterBuilder builder(filterData->filter->sourceGraphic(), filterData->nodeMap.get()); |
+ builder.buildGraph(filterData->filter.get(), *filterElement, referenceBox); |
- FilterEffect* lastEffect = filterData->filter->lastEffect(); |
+ FilterEffect* lastEffect = builder.lastEffect(); |
if (!lastEffect) |
return nullptr; |
lastEffect->determineFilterPrimitiveSubregion(ClipToFilterRegion); |
+ filterData->filter->setLastEffect(lastEffect); |
FilterData* data = filterData.get(); |
// TODO(pdr): Can this be moved out of painter? |