Title: [288183] trunk
Revision
288183
Author
[email protected]
Date
2022-01-19 00:37:08 -0800 (Wed, 19 Jan 2022)

Log Message

filterRegion and outsets of referenced SVG filter are calculated incorrectly
https://bugs.webkit.org/show_bug.cgi?id=235338

Reviewed by Darin Adler.

Source/WebCore:

Calculate the filterRegion of the referenced SVGFilter by calling
SVGLengthContext::resolveRectangle() given the targetBoundingBox of the
CSSFilter.

There is no need to set the filterRegion of the referenced SVG filter
from CSSFilter::setFilterRegion() since its filterRegion is the union
of the filterRegions all its referenced SVGFilters.

Calculate the outsets of the SVGFilter by looping through its _expression_
of FilterEffects.

Test: css3/filters/reference-filter-outsets.html

* platform/graphics/filters/FEDropShadow.cpp:
(WebCore::FEDropShadow::outsets const):
* platform/graphics/filters/FEDropShadow.h:
* platform/graphics/filters/FEGaussianBlur.cpp:
(WebCore::FEGaussianBlur::outsets const):
* platform/graphics/filters/FEGaussianBlur.h:
* platform/graphics/filters/FEOffset.cpp:
(WebCore::FEOffset::outsets const):
* platform/graphics/filters/FEOffset.h:
* platform/graphics/filters/Filter.h:
* platform/graphics/filters/FilterFunction.h:
(WebCore::FilterFunction::outsets const):
* rendering/CSSFilter.cpp:
(WebCore::createSVGFilter):
(WebCore::CSSFilter::setFilterRegion):
(WebCore::CSSFilter::outsets const):
* rendering/CSSFilter.h:
* rendering/RenderLayerFilters.cpp:
(WebCore::RenderLayerFilters::beginFilterEffect):
* svg/graphics/filters/SVGFilter.cpp:
(WebCore::SVGFilter::create):
(WebCore::SVGFilter::outsets const):
(WebCore::SVGFilter::lastEffect const): Deleted.
* svg/graphics/filters/SVGFilter.h:

LayoutTests:

* css3/filters/reference-filter-outsets-expected.html: Added.
* css3/filters/reference-filter-outsets.html: Added.

* css3/filters/reference-filter-set-filter-regions-expected.html:
* css3/filters/reference-filter-set-filter-regions.html:
The original expected page is wrong. To test the referenced SVG filter
correctly, the <div> element needs to move such that all its outsets are
not truncated.

* platform/win/TestExpectations:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (288182 => 288183)


--- trunk/LayoutTests/ChangeLog	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/LayoutTests/ChangeLog	2022-01-19 08:37:08 UTC (rev 288183)
@@ -1,3 +1,21 @@
+2022-01-19  Said Abou-Hallawa  <[email protected]>
+
+        filterRegion and outsets of referenced SVG filter are calculated incorrectly
+        https://bugs.webkit.org/show_bug.cgi?id=235338
+
+        Reviewed by Darin Adler.
+
+        * css3/filters/reference-filter-outsets-expected.html: Added.
+        * css3/filters/reference-filter-outsets.html: Added.
+
+        * css3/filters/reference-filter-set-filter-regions-expected.html:
+        * css3/filters/reference-filter-set-filter-regions.html:
+        The original expected page is wrong. To test the referenced SVG filter
+        correctly, the <div> element needs to move such that all its outsets are
+        not truncated.
+
+        * platform/win/TestExpectations:
+
 2022-01-18  Jon Lee  <[email protected]>
 
         Unreviewed gardening of GPU Process bot tests.

Added: trunk/LayoutTests/css3/filters/reference-filter-outsets-expected.html (0 => 288183)


--- trunk/LayoutTests/css3/filters/reference-filter-outsets-expected.html	                        (rev 0)
+++ trunk/LayoutTests/css3/filters/reference-filter-outsets-expected.html	2022-01-19 08:37:08 UTC (rev 288183)
@@ -0,0 +1,35 @@
+<style>
+    .container {
+        width: 90px;
+        height: 90px;
+        display: inline-block;
+        background-color: black;
+        margin: 10px;
+    }
+    .box {
+        width: 100px;
+        height: 100px;
+        display: inline-block;
+        background-color: green;
+    }
+</style>
+<body>
+    <div>
+        <div class="container" style="transform: translate(-10px, -10px);">
+            <div class="box" style="transform: translate(10px, 10px);"></div>
+        </div>
+
+        <div class="container" style="transform: translate(30px, -10px);">
+            <div class="box" style="transform: translate(-20px, 10px);"></div>
+        </div>
+    </div>
+    <div>
+        <div class="container" style="transform: translate(-10px, 30px);">
+            <div class="box" style="transform: translate(10px, -20px);"></div>
+        </div>
+
+        <div class="container" style="transform: translate(30px, 30px);">
+            <div class="box" style="transform: translate(-20px, -20px);"></div>
+        </div>
+    </div>
+</body>

Added: trunk/LayoutTests/css3/filters/reference-filter-outsets.html (0 => 288183)


--- trunk/LayoutTests/css3/filters/reference-filter-outsets.html	                        (rev 0)
+++ trunk/LayoutTests/css3/filters/reference-filter-outsets.html	2022-01-19 08:37:08 UTC (rev 288183)
@@ -0,0 +1,63 @@
+<style>
+    .box {
+        width: 100px;
+        height: 100px;
+        display: inline-block;
+        background-color: green;
+        margin: 10px;
+    }
+</style>
+<body>
+    <div>
+        <svg style="position: absolute; top: -999999px" xmlns="http://www.w3.org/2000/svg">
+            <filter id="svgDropShadow1">
+                <feOffset dx="-20" dy="-20" result="offsetSource"/>
+                <feFlood flood-color="black"/>
+                <feComposite in2="offsetSource" operator="in"/>
+                <feMerge>
+                    <feMergeNode/>
+                    <feMergeNode in="SourceGraphic"/>
+                </feMerge>
+            </filter>
+        </svg>
+        <div class="box" style="filter: url(#svgDropShadow1);"></div>
+        <svg style="position: absolute; top: -999999px" xmlns="http://www.w3.org/2000/svg">
+            <filter id="svgDropShadow2">
+                <feOffset dx="20" dy="-20" result="offsetSource"/>
+                <feFlood flood-color="black"/>
+                <feComposite in2="offsetSource" operator="in"/>
+                <feMerge>
+                    <feMergeNode/>
+                    <feMergeNode in="SourceGraphic"/>
+                </feMerge>
+            </filter>
+        </svg>
+        <div class="box" style="filter: url(#svgDropShadow2);"></div>
+    </div>
+    <div>
+        <svg style="position: absolute; top: -999999px" xmlns="http://www.w3.org/2000/svg">
+            <filter id="svgDropShadow3">
+                <feOffset dx="-20" dy="20" result="offsetSource"/>
+                <feFlood flood-color="black"/>
+                <feComposite in2="offsetSource" operator="in"/>
+                <feMerge>
+                    <feMergeNode/>
+                    <feMergeNode in="SourceGraphic"/>
+                </feMerge>
+            </filter>
+        </svg>
+        <div class="box" style="filter: url(#svgDropShadow3);"></div>
+        <svg style="position: absolute; top: -999999px" xmlns="http://www.w3.org/2000/svg">
+            <filter id="svgDropShadow4">
+                <feOffset dx="20" dy="20" result="offsetSource"/>
+                <feFlood flood-color="black"/>
+                <feComposite in2="offsetSource" operator="in"/>
+                <feMerge>
+                    <feMergeNode/>
+                    <feMergeNode in="SourceGraphic"/>
+                </feMerge>
+            </filter>
+        </svg>
+        <div class="box" style="filter: url(#svgDropShadow4);"></div>
+    </div>
+</body>

Modified: trunk/LayoutTests/css3/filters/reference-filter-set-filter-regions-expected.html (288182 => 288183)


--- trunk/LayoutTests/css3/filters/reference-filter-set-filter-regions-expected.html	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/LayoutTests/css3/filters/reference-filter-set-filter-regions-expected.html	2022-01-19 08:37:08 UTC (rev 288183)
@@ -1,8 +1,11 @@
 <head>
     <style>
         .box {
-          width: 200px;
-          height: 200px;
+          position: absolute;
+          left: 20px;
+          top: 20px;
+          width: 240px;
+          height: 240px;
           background-color: green;
         }
     </style>

Modified: trunk/LayoutTests/css3/filters/reference-filter-set-filter-regions.html (288182 => 288183)


--- trunk/LayoutTests/css3/filters/reference-filter-set-filter-regions.html	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/LayoutTests/css3/filters/reference-filter-set-filter-regions.html	2022-01-19 08:37:08 UTC (rev 288183)
@@ -1,6 +1,9 @@
 <head>
     <style>
         .box {
+          position: absolute;
+          left: 40px;
+          top: 40px;
           width: 200px;
           height: 200px;
           background-color: silver;

Modified: trunk/LayoutTests/platform/win/TestExpectations (288182 => 288183)


--- trunk/LayoutTests/platform/win/TestExpectations	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/LayoutTests/platform/win/TestExpectations	2022-01-19 08:37:08 UTC (rev 288183)
@@ -127,6 +127,7 @@
 webkit.org/b/74716 css3/filters/filter-is-on-subpixel-position.html [ Skip ]
 webkit.org/b/74716 css3/masking/clip-path-filter.html [ Skip ]
 webkit.org/b/74716 css3/filters/backdrop [ Skip ]
+webkit.org/b/74716 css3/filters/reference-filter-set-filter-regions.html [ Skip ]
 
 # platformLayerTreeAsText is only implemented for Cocoa ports.
 fast/harness/platform-layer-tree-as-text.html [ Skip ]

Modified: trunk/Source/WebCore/ChangeLog (288182 => 288183)


--- trunk/Source/WebCore/ChangeLog	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/Source/WebCore/ChangeLog	2022-01-19 08:37:08 UTC (rev 288183)
@@ -1,3 +1,48 @@
+2022-01-19  Said Abou-Hallawa  <[email protected]>
+
+        filterRegion and outsets of referenced SVG filter are calculated incorrectly
+        https://bugs.webkit.org/show_bug.cgi?id=235338
+
+        Reviewed by Darin Adler.
+
+        Calculate the filterRegion of the referenced SVGFilter by calling 
+        SVGLengthContext::resolveRectangle() given the targetBoundingBox of the
+        CSSFilter.
+
+        There is no need to set the filterRegion of the referenced SVG filter 
+        from CSSFilter::setFilterRegion() since its filterRegion is the union
+        of the filterRegions all its referenced SVGFilters.
+
+        Calculate the outsets of the SVGFilter by looping through its _expression_
+        of FilterEffects.
+
+        Test: css3/filters/reference-filter-outsets.html
+
+        * platform/graphics/filters/FEDropShadow.cpp:
+        (WebCore::FEDropShadow::outsets const):
+        * platform/graphics/filters/FEDropShadow.h:
+        * platform/graphics/filters/FEGaussianBlur.cpp:
+        (WebCore::FEGaussianBlur::outsets const):
+        * platform/graphics/filters/FEGaussianBlur.h:
+        * platform/graphics/filters/FEOffset.cpp:
+        (WebCore::FEOffset::outsets const):
+        * platform/graphics/filters/FEOffset.h:
+        * platform/graphics/filters/Filter.h:
+        * platform/graphics/filters/FilterFunction.h:
+        (WebCore::FilterFunction::outsets const):
+        * rendering/CSSFilter.cpp:
+        (WebCore::createSVGFilter):
+        (WebCore::CSSFilter::setFilterRegion):
+        (WebCore::CSSFilter::outsets const):
+        * rendering/CSSFilter.h:
+        * rendering/RenderLayerFilters.cpp:
+        (WebCore::RenderLayerFilters::beginFilterEffect):
+        * svg/graphics/filters/SVGFilter.cpp:
+        (WebCore::SVGFilter::create):
+        (WebCore::SVGFilter::outsets const):
+        (WebCore::SVGFilter::lastEffect const): Deleted.
+        * svg/graphics/filters/SVGFilter.h:
+
 2022-01-18  Sam Weinig  <[email protected]>
 
         ColorTypes are no longer constexpr in debug builds due to std::isnan() in range assertion

Modified: trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.cpp (288182 => 288183)


--- trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.cpp	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.cpp	2022-01-19 08:37:08 UTC (rev 288183)
@@ -61,7 +61,7 @@
     return filter.clipToMaxEffectRect(imageRect, primitiveSubregion);
 }
 
-IntOutsets FEDropShadow::outsets() const
+IntOutsets FEDropShadow::outsets(const Filter&) const
 {
     IntSize outsetSize = FEGaussianBlur::calculateOutsetSize({ m_stdX, m_stdY });
     return {

Modified: trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.h (288182 => 288183)


--- trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.h	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.h	2022-01-19 08:37:08 UTC (rev 288183)
@@ -55,7 +55,7 @@
 
     FloatRect calculateImageRect(const Filter&, const FilterImageVector& inputs, const FloatRect& primitiveSubregion) const override;
 
-    IntOutsets outsets() const override;
+    IntOutsets outsets(const Filter&) const override;
 
     std::unique_ptr<FilterEffectApplier> createApplier(const Filter&) const override;
 

Modified: trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp (288182 => 288183)


--- trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp	2022-01-19 08:37:08 UTC (rev 288183)
@@ -120,9 +120,9 @@
     return filter.clipToMaxEffectRect(imageRect, primitiveSubregion);
 }
 
-IntOutsets FEGaussianBlur::outsets() const
+IntOutsets FEGaussianBlur::outsets(const Filter& filter) const
 {
-    IntSize outsetSize = calculateOutsetSize({ m_stdX, m_stdY });
+    IntSize outsetSize = calculateOutsetSize(filter.resolvedSize({ m_stdX, m_stdY }));
     return { outsetSize.height(), outsetSize.width(), outsetSize.height(), outsetSize.width() };
 }
 

Modified: trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.h (288182 => 288183)


--- trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.h	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.h	2022-01-19 08:37:08 UTC (rev 288183)
@@ -52,7 +52,7 @@
 
     FloatRect calculateImageRect(const Filter&, const FilterImageVector& inputs, const FloatRect& primitiveSubregion) const override;
 
-    IntOutsets outsets() const override;
+    IntOutsets outsets(const Filter&) const override;
 
     bool resultIsAlphaImage(const FilterImageVector& inputs) const override;
 

Modified: trunk/Source/WebCore/platform/graphics/filters/FEOffset.cpp (288182 => 288183)


--- trunk/Source/WebCore/platform/graphics/filters/FEOffset.cpp	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/Source/WebCore/platform/graphics/filters/FEOffset.cpp	2022-01-19 08:37:08 UTC (rev 288183)
@@ -60,6 +60,23 @@
     return filter.clipToMaxEffectRect(imageRect, primitiveSubregion);
 }
 
+IntOutsets FEOffset::outsets(const Filter& filter) const
+{
+    auto offset = expandedIntSize(filter.resolvedSize({ m_dx, m_dy }));
+
+    IntOutsets outsets;
+    if (offset.height() < 0)
+        outsets.setTop(-offset.height());
+    else
+        outsets.setBottom(offset.height());
+    if (offset.width() < 0)
+        outsets.setLeft(-offset.width());
+    else
+        outsets.setRight(offset.width());
+
+    return outsets;
+}
+
 bool FEOffset::resultIsAlphaImage(const FilterImageVector& inputs) const
 {
     return inputs[0]->isAlphaImage();

Modified: trunk/Source/WebCore/platform/graphics/filters/FEOffset.h (288182 => 288183)


--- trunk/Source/WebCore/platform/graphics/filters/FEOffset.h	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/Source/WebCore/platform/graphics/filters/FEOffset.h	2022-01-19 08:37:08 UTC (rev 288183)
@@ -44,6 +44,8 @@
 
     FloatRect calculateImageRect(const Filter&, const FilterImageVector& inputs, const FloatRect& primitiveSubregion) const override;
 
+    IntOutsets outsets(const Filter&) const override;
+
     bool resultIsAlphaImage(const FilterImageVector& inputs) const override;
 
     std::unique_ptr<FilterEffectApplier> createApplier(const Filter&) const override;

Modified: trunk/Source/WebCore/platform/graphics/filters/Filter.h (288182 => 288183)


--- trunk/Source/WebCore/platform/graphics/filters/Filter.h	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/Source/WebCore/platform/graphics/filters/Filter.h	2022-01-19 08:37:08 UTC (rev 288183)
@@ -36,6 +36,7 @@
 
 class Filter : public FilterFunction {
     using FilterFunction::apply;
+    using FilterFunction::outsets;
 
 public:
     enum class ClipOperation { Intersect, Unite };
@@ -65,6 +66,7 @@
 
     bool clampFilterRegionIfNeeded();
 
+    virtual IntOutsets outsets() const = 0;
     virtual RefPtr<FilterImage> apply(FilterImage* sourceImage, FilterResults&) = 0;
     WEBCORE_EXPORT RefPtr<FilterImage> apply(ImageBuffer* sourceImage, const FloatRect& sourceImageRect, FilterResults&);
 

Modified: trunk/Source/WebCore/platform/graphics/filters/FilterFunction.h (288182 => 288183)


--- trunk/Source/WebCore/platform/graphics/filters/FilterFunction.h	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterFunction.h	2022-01-19 08:37:08 UTC (rev 288183)
@@ -98,7 +98,7 @@
 #endif
 
     virtual RefPtr<FilterImage> apply(const Filter&, FilterImage&, FilterResults&) { return nullptr; }
-    virtual IntOutsets outsets() const { return { }; }
+    virtual IntOutsets outsets(const Filter&) const { return { }; }
 
     virtual WTF::TextStream& externalRepresentation(WTF::TextStream&, FilterRepresentation = FilterRepresentation::TestOutput) const = 0;
 

Modified: trunk/Source/WebCore/rendering/CSSFilter.cpp (288182 => 288183)


--- trunk/Source/WebCore/rendering/CSSFilter.cpp	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/Source/WebCore/rendering/CSSFilter.cpp	2022-01-19 08:37:08 UTC (rev 288183)
@@ -32,8 +32,6 @@
 #include "FEDropShadow.h"
 #include "FEGaussianBlur.h"
 #include "FilterOperations.h"
-#include "GraphicsContext.h"
-#include "LengthFunctions.h"
 #include "Logging.h"
 #include "ReferencedSVGResources.h"
 #include "RenderElement.h"
@@ -235,8 +233,10 @@
         return nullptr;
     }
 
+    auto filterRegion = SVGLengthContext::resolveRectangle<SVGFilterElement>(filterElement, filterElement->filterUnits(), targetBoundingBox);
+
     SVGFilterBuilder builder;
-    return SVGFilter::create(*filterElement, builder, filter.renderingMode(), filter.filterScale(), filter.clipOperation(), targetBoundingBox, targetBoundingBox);
+    return SVGFilter::create(*filterElement, builder, filter.renderingMode(), filter.filterScale(), filter.clipOperation(), filterRegion, targetBoundingBox);
 }
 
 bool CSSFilter::buildFilterFunctions(RenderElement& renderer, const FilterOperations& operations, const FloatRect& targetBoundingBox)
@@ -371,12 +371,6 @@
 void CSSFilter::setFilterRegion(const FloatRect& filterRegion)
 {
     Filter::setFilterRegion(filterRegion);
-
-    for (auto& function : m_functions) {
-        if (function->isSVGFilter())
-            downcast<SVGFilter>(function.ptr())->setFilterRegion(filterRegion);
-    }
-
     clampFilterRegionIfNeeded();
 }
 
@@ -389,7 +383,7 @@
         return m_outsets;
 
     for (auto& function : m_functions)
-        m_outsets += function->outsets();
+        m_outsets += function->outsets(*this);
     return m_outsets;
 }
 

Modified: trunk/Source/WebCore/rendering/CSSFilter.h (288182 => 288183)


--- trunk/Source/WebCore/rendering/CSSFilter.h	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/Source/WebCore/rendering/CSSFilter.h	2022-01-19 08:37:08 UTC (rev 288183)
@@ -30,10 +30,7 @@
 
 namespace WebCore {
 
-class FilterEffect;
 class FilterOperations;
-class GraphicsContext;
-class ReferenceFilterOperation;
 class RenderElement;
 class SourceGraphic;
 

Modified: trunk/Source/WebCore/rendering/RenderLayerFilters.cpp (288182 => 288183)


--- trunk/Source/WebCore/rendering/RenderLayerFilters.cpp	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/Source/WebCore/rendering/RenderLayerFilters.cpp	2022-01-19 08:37:08 UTC (rev 288183)
@@ -164,10 +164,8 @@
     
     // For CSSFilter, filterRegion = targetBoundingBox + filter->outsets()
     auto filterRegion = targetBoundingBox;
-    if (filter.hasFilterThatMovesPixels()) {
+    if (filter.hasFilterThatMovesPixels())
         filterRegion += filter.outsets();
-        filterRegion.intersect(filterBoxRect);
-    }
 
     if (filterRegion.isEmpty())
         return nullptr;

Modified: trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp (288182 => 288183)


--- trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp	2022-01-19 08:37:08 UTC (rev 288183)
@@ -52,7 +52,6 @@
     if (!filter->supportsCoreImageRendering())
         filter->setRenderingMode(RenderingMode::Unaccelerated);
 #endif
-
     return filter;
 }
 
@@ -97,13 +96,6 @@
 }
 #endif
 
-RefPtr<FilterEffect> SVGFilter::lastEffect() const
-{
-    if (m_expression.isEmpty())
-        return nullptr;
-    return m_expression.last().effect.ptr();
-}
-
 FilterEffectVector SVGFilter::effectsOfType(FilterFunction::Type filterType) const
 {
     HashSet<Ref<FilterEffect>> effects;
@@ -161,8 +153,10 @@
 
 IntOutsets SVGFilter::outsets() const
 {
-    ASSERT(lastEffect());
-    return lastEffect()->outsets();
+    IntOutsets outsets;
+    for (auto& term : m_expression)
+        outsets += term.effect->outsets(*this);
+    return outsets;
 }
 
 TextStream& SVGFilter::externalRepresentation(TextStream& ts, FilterRepresentation representation) const

Modified: trunk/Source/WebCore/svg/graphics/filters/SVGFilter.h (288182 => 288183)


--- trunk/Source/WebCore/svg/graphics/filters/SVGFilter.h	2022-01-19 07:51:32 UTC (rev 288182)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFilter.h	2022-01-19 08:37:08 UTC (rev 288183)
@@ -56,8 +56,6 @@
 
     void setExpression(SVGFilterExpression&& _expression_) { m_expression = WTFMove(_expression_); }
 
-    RefPtr<FilterEffect> lastEffect() const;
-
 #if USE(CORE_IMAGE)
     bool supportsCoreImageRendering() const final;
 #endif
@@ -64,6 +62,8 @@
     FloatSize resolvedSize(const FloatSize&) const final;
 
     RefPtr<FilterImage> apply(const Filter&, FilterImage& sourceImage, FilterResults&) final;
+
+    IntOutsets outsets(const Filter&) const final { return outsets(); }
     IntOutsets outsets() const final;
 
     FloatRect m_targetBoundingBox;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to