[webkit-changes] [WebKit/WebKit] ddf4be: [Filters] GraphicsContext filters have to apply cl...

Said Abou-Hallawa noreply at github.com
Thu Dec 14 15:34:56 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: ddf4bec3e947abd7bf96aa06ec84f91e1a32d162
      https://github.com/WebKit/WebKit/commit/ddf4bec3e947abd7bf96aa06ec84f91e1a32d162
  Author: Said Abou-Hallawa <said at apple.com>
  Date:   2023-12-14 (Thu, 14 Dec 2023)

  Changed paths:
    A LayoutTests/css3/filters/drop-shadow-filter-overflow-expected.html
    A LayoutTests/css3/filters/drop-shadow-filter-overflow.html
    M Source/WebCore/platform/graphics/filters/FilterImageTargetSwitcher.cpp
    M Source/WebCore/platform/graphics/filters/FilterImageTargetSwitcher.h
    M Source/WebCore/platform/graphics/filters/FilterStyleTargetSwitcher.cpp
    M Source/WebCore/platform/graphics/filters/FilterStyleTargetSwitcher.h
    M Source/WebCore/platform/graphics/filters/FilterTargetSwitcher.h
    M Source/WebCore/rendering/RenderLayer.cpp
    M Source/WebCore/rendering/RenderLayer.h
    M Source/WebCore/rendering/RenderLayerFilters.cpp
    M Source/WebCore/rendering/RenderLayerFilters.h

  Log Message:
  -----------
  [Filters] GraphicsContext filters have to apply clipping to the target context before drawing
https://bugs.webkit.org/show_bug.cgi?id=266383
rdar://118522654

Reviewed by Simon Fraser.

Before applying the filter style and calling `beginTransparencyLayer()`, the
clipping rectangle of the target element has to be applied to the destination
GraphicsContext. Otherwise the hidden overflow drawing will appear once the
`endTransparencyLayer()` is called.

RenderLayer::paintLayerContents() needs to calculate the clipping rectangle
before calling setupFilters() so it can be passed to FilterStyleTargetSwitcher.

beginClipAndDrawSourceImage() and endClipAndDrawSourceImage() will be called
when applying CSSFilter. beginDrawSourceImage() and endDrawSourceImage() will
be called when applying the top-level SVGFilter since we clip to the bounding
rectangle of the root element.

* LayoutTests/css3/filters/drop-shadow-filter-overflow-expected.html: Added.
* LayoutTests/css3/filters/drop-shadow-filter-overflow.html: Added.
* Source/WebCore/platform/graphics/filters/FilterImageTargetSwitcher.cpp:
(WebCore::FilterImageTargetSwitcher::beginClipAndDrawSourceImage):
* Source/WebCore/platform/graphics/filters/FilterImageTargetSwitcher.h:
* Source/WebCore/platform/graphics/filters/FilterStyleTargetSwitcher.cpp:
(WebCore::FilterStyleTargetSwitcher::beginClipAndDrawSourceImage):
* Source/WebCore/platform/graphics/filters/FilterStyleTargetSwitcher.h:
* Source/WebCore/platform/graphics/filters/FilterTargetSwitcher.h:
(WebCore::FilterTargetSwitcher::beginClipAndDrawSourceImage): Deleted.
(WebCore::FilterTargetSwitcher::endClipAndDrawSourceImage): Deleted.
(WebCore::FilterTargetSwitcher::beginDrawSourceImage): Deleted.
(WebCore::FilterTargetSwitcher::endDrawSourceImage): Deleted.
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::setupFilters):
(WebCore::RenderLayer::applyFilters):
(WebCore::RenderLayer::paintLayerContents):
* Source/WebCore/rendering/RenderLayer.h:
* Source/WebCore/rendering/RenderLayerFilters.cpp:
(WebCore::RenderLayerFilters::beginFilterEffect):
* Source/WebCore/rendering/RenderLayerFilters.h:

Canonical link: https://commits.webkit.org/272078@main




More information about the webkit-changes mailing list