| Index: Source/core/platform/graphics/filters/SkiaImageFilterBuilder.cpp
|
| diff --git a/Source/core/platform/graphics/filters/SkiaImageFilterBuilder.cpp b/Source/core/platform/graphics/filters/SkiaImageFilterBuilder.cpp
|
| index 50c3655ff3aefa010989e6bf9d41d0a3a7df4128..454bb0f30448be1e3ccfcdb633cbc391c4dfaa7d 100644
|
| --- a/Source/core/platform/graphics/filters/SkiaImageFilterBuilder.cpp
|
| +++ b/Source/core/platform/graphics/filters/SkiaImageFilterBuilder.cpp
|
| @@ -33,6 +33,7 @@
|
| #include "core/platform/graphics/filters/DropShadowImageFilter.h"
|
| #include "core/platform/graphics/filters/FilterEffect.h"
|
| #include "core/platform/graphics/filters/FilterOperations.h"
|
| +#include "core/platform/graphics/filters/SourceGraphic.h"
|
|
|
| namespace {
|
|
|
| @@ -195,9 +196,16 @@ SkImageFilter* SkiaImageFilterBuilder::build(const FilterOperations& operations)
|
| const FilterOperation& op = *operations.at(i);
|
| switch (op.getOperationType()) {
|
| case FilterOperation::REFERENCE: {
|
| - FilterEffect* filterEffect = static_cast<const ReferenceFilterOperation*>(&op)->filterEffect();
|
| - // FIXME: hook up parent filter to image source
|
| - filter.reset(SkiaImageFilterBuilder::build(filterEffect));
|
| + const ReferenceFilterOperation* referenceFilterOperation = static_cast<const ReferenceFilterOperation*>(&op);
|
| + ReferenceFilter* referenceFilter = referenceFilterOperation->filter();
|
| + if (referenceFilter && referenceFilter->lastEffect()) {
|
| + // Link the source graphic to the previous filter in the chain.
|
| + m_map.set(referenceFilter->sourceGraphic(), filter);
|
| + filter.reset(SkiaImageFilterBuilder::build(referenceFilter->lastEffect()));
|
| + // We might have no reference to the SourceGraphic's Skia filter now, so make
|
| + // sure we don't keep it in the map anymore.
|
| + m_map.remove(referenceFilter->sourceGraphic());
|
| + }
|
| break;
|
| }
|
| case FilterOperation::GRAYSCALE: {
|
|
|