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

Unified Diff: Source/core/platform/graphics/filters/SkiaImageFilterBuilder.cpp

Issue 13984002: Extracting the SVG Filter Reference implementation out of the FilterEffectRenderer into its own typ… Base URL: https://chromium.googlesource.com/chromium/blink@master
Patch Set: Updated to ToT, fixed style, warnings Created 7 years, 7 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: 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: {
« no previous file with comments | « Source/core/platform/graphics/filters/ReferenceFilter.cpp ('k') | Source/core/rendering/FilterEffectRenderer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698