[webkit-changes] [WebKit/WebKit] bbebc5: [LBSE] Unbreak clipping (last minute regression)
Nikolas Zimmermann
noreply at github.com
Sun Nov 5 10:32:16 PST 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: bbebc590512613655555a348725daf9abd23e75f
https://github.com/WebKit/WebKit/commit/bbebc590512613655555a348725daf9abd23e75f
Author: Nikolas Zimmermann <nzimmermann at igalia.com>
Date: 2023-11-05 (Sun, 05 Nov 2023)
Changed paths:
M Source/WebCore/rendering/RenderLayer.cpp
Log Message:
-----------
[LBSE] Unbreak clipping (last minute regression)
https://bugs.webkit.org/show_bug.cgi?id=264224
Reviewed by Rob Buis.
SVG clipping is broken, due to a last minute change in RenderLayer.
The intention to check if a renderer inherits from either RenderSVGResourceContainer
or RenderSVGHiddenContainer was tested using only one "dynamicDowncast<RenderSVGHiddenContainer">,
as RenderSVGResourceContainer also inherits from RenderSVGHiddenContainer.
However, the is<> mechanism, implemented using the RenderObject::isXYZ() methods, does not
work anymore like this, due to the introduction of the non-virtual type() method. Nowadays
is<RenderSVGHiddenContainer> boils down to:
bool isSVGHiddenContainer() const { return type() == Type::SVGHiddenContainer; }
Any renderer that inherits from RenderSVGHiddenContainer, e.g. RenderSVGResourceClipper,
therefore returns 'false' for is<RenderSVGHiddenContainer>(), because RenderSVGResourceClipper
carries a different type() - here 'Type::SVGResourceClipper'.
--> One explicitly needs to check both is<RenderSVGResourceClipper>() || is<RenderSVGResourceContainer>())
to check if a renderer inherits from RenderSVGResourceClipper or RenderSVGResourceContainer -- not possible
with a single check, given the way isRenderSVGResourceContainer() is currently implemented.
Let's first fix this regression for now, and then discuss the correct future mechanism. Whether
we should respect the base-class hierarchy in is<> or not.
Covered by existing tests, when LBSE is activated.
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::updateAncestorDependentState):
Canonical link: https://commits.webkit.org/270248@main
More information about the webkit-changes
mailing list