| 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 49c035b3a1e6abc0f5b03271856be7154a227cff..d20124482b0e0ba6a90ac15470571d246ab0de9d 100644
|
| --- a/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp
|
| @@ -7,6 +7,7 @@
|
| #include "core/layout/svg/LayoutSVGResourceFilter.h"
|
| #include "core/paint/FilterEffectBuilder.h"
|
| #include "core/paint/LayoutObjectDrawingRecorder.h"
|
| +#include "core/svg/graphics/filters/SVGFilterBuilder.h"
|
| #include "platform/graphics/filters/SkiaImageFilterBuilder.h"
|
| #include "platform/graphics/filters/SourceGraphic.h"
|
| #include "wtf/PtrUtil.h"
|
| @@ -29,13 +30,14 @@ void SVGFilterRecordingContext::endContent(FilterData* filterData)
|
| {
|
| DCHECK_EQ(filterData->m_state, FilterData::RecordingContent);
|
|
|
| - SourceGraphic* sourceGraphic = filterData->filter->getSourceGraphic();
|
| + Filter* filter = filterData->lastEffect->getFilter();
|
| + SourceGraphic* sourceGraphic = filter->getSourceGraphic();
|
| DCHECK(sourceGraphic);
|
|
|
| // Use the context that contains the filtered content.
|
| DCHECK(m_paintController);
|
| DCHECK(m_context);
|
| - m_context->beginRecording(filterData->filter->filterRegion());
|
| + m_context->beginRecording(filter->filterRegion());
|
| m_paintController->commitNewDisplayItems();
|
| m_paintController->paintArtifact().replay(*m_context);
|
|
|
| @@ -51,18 +53,18 @@ void SVGFilterRecordingContext::endContent(FilterData* filterData)
|
| static void paintFilteredContent(GraphicsContext& context, FilterData* filterData)
|
| {
|
| DCHECK_EQ(filterData->m_state, FilterData::ReadyToPaint);
|
| - DCHECK(filterData->filter->getSourceGraphic());
|
| + DCHECK(filterData->lastEffect->getFilter()->getSourceGraphic());
|
|
|
| filterData->m_state = FilterData::PaintingFilter;
|
|
|
| - FilterEffect* lastEffect = filterData->filter->lastEffect();
|
| + FilterEffect* lastEffect = filterData->lastEffect;
|
| sk_sp<SkImageFilter> imageFilter = SkiaImageFilterBuilder::build(lastEffect, ColorSpaceDeviceRGB);
|
| context.save();
|
|
|
| // Clip drawing of filtered image to the minimum required paint rect.
|
| context.clipRect(lastEffect->determineAbsolutePaintRect(lastEffect->absoluteBounds()));
|
|
|
| - FloatRect boundaries = filterData->filter->filterRegion();
|
| + FloatRect boundaries = lastEffect->getFilter()->filterRegion();
|
| context.beginLayer(1, SkXfermode::kSrcOver_Mode, &boundaries, ColorFilterNone, std::move(imageFilter));
|
| context.endLayer();
|
| context.restore();
|
| @@ -97,7 +99,7 @@ GraphicsContext* SVGFilterPainter::prepareEffect(const LayoutObject& object, SVG
|
| filter->getSourceGraphic()->setSourceRect(sourceRegion);
|
|
|
| FilterData* filterData = FilterData::create();
|
| - filterData->filter = filter;
|
| + filterData->lastEffect = filter->lastEffect();
|
| filterData->nodeMap = nodeMap;
|
|
|
| // TODO(pdr): Can this be moved out of painter?
|
| @@ -128,7 +130,7 @@ void SVGFilterPainter::finishEffect(const LayoutObject& object, SVGFilterRecordi
|
| if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(context, object, DisplayItem::kSVGFilter))
|
| return;
|
|
|
| - FloatRect filterRegion = filterData ? filterData->filter->filterRegion() : FloatRect();
|
| + FloatRect filterRegion = filterData ? filterData->lastEffect->getFilter()->filterRegion() : FloatRect();
|
| LayoutObjectDrawingRecorder recorder(context, object, DisplayItem::kSVGFilter, filterRegion);
|
| if (filterData && filterData->m_state == FilterData::ReadyToPaint)
|
| paintFilteredContent(context, filterData);
|
|
|