[webkit-changes] [WebKit/WebKit] 57393b: [LBSE] Add RenderSVGResourceClipper
Nikolas Zimmermann
noreply at github.com
Sun Oct 22 11:01:52 PDT 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 57393b599e9588c477ffce15a7a729ddbeceea61
https://github.com/WebKit/WebKit/commit/57393b599e9588c477ffce15a7a729ddbeceea61
Author: Nikolas Zimmermann <nzimmermann at igalia.com>
Date: 2023-10-22 (Sun, 22 Oct 2023)
Changed paths:
M LayoutTests/platform/mac-ventura-wk2-lbse-text/TestExpectations
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/animate-elem-32-t-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/coords-viewattr-03-b-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/fonts-elem-05-t-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/fonts-elem-06-t-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/fonts-kern-01-t-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/masking-intro-01-f-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/masking-path-01-b-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/masking-path-02-b-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/masking-path-04-b-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/masking-path-05-f-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/painting-marker-02-f-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/shapes-intro-01-t-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/text-align-01-b-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/text-text-05-t-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/text-text-06-t-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/batik/text/textEffect2-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/batik/text/textProperties-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/carto.net/textbox-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/custom/embedding-external-svgs-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/custom/path-moveto-only-rendering-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/custom/subpaths-moveto-only-rendering-expected.txt
A LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/custom/text-clip-expected.png
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/custom/text-clip-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/custom/use-on-symbol-inside-pattern-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/filters/filter-clip-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/foreignObject/clip-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/repaint/mask-clip-target-transform-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/text/text-align-01-b-expected.txt
M LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/text/text-text-05-t-expected.txt
M LayoutTests/svg/clip-path/clip-opacity.html
M Source/WebCore/Sources.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/dom/TreeScope.cpp
M Source/WebCore/dom/TreeScope.h
M Source/WebCore/rendering/PaintPhase.h
M Source/WebCore/rendering/RenderBox.cpp
M Source/WebCore/rendering/RenderLayer.cpp
M Source/WebCore/rendering/RenderLayer.h
M Source/WebCore/rendering/RenderLayerInlines.h
M Source/WebCore/rendering/RenderObject.h
M Source/WebCore/rendering/svg/RenderSVGContainer.cpp
M Source/WebCore/rendering/svg/RenderSVGImage.cpp
M Source/WebCore/rendering/svg/RenderSVGModelObject.cpp
M Source/WebCore/rendering/svg/RenderSVGModelObject.h
M Source/WebCore/rendering/svg/RenderSVGResource.cpp
A Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
A Source/WebCore/rendering/svg/RenderSVGResourceClipper.h
A Source/WebCore/rendering/svg/RenderSVGResourceClipperInlines.h
M Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp
M Source/WebCore/rendering/svg/RenderSVGRoot.cpp
M Source/WebCore/rendering/svg/RenderSVGShape.cpp
M Source/WebCore/rendering/svg/RenderSVGText.cpp
M Source/WebCore/rendering/svg/SVGInlineTextBox.cpp
M Source/WebCore/rendering/svg/SVGRenderSupport.cpp
M Source/WebCore/rendering/svg/SVGRenderSupport.h
M Source/WebCore/rendering/svg/SVGRenderingContext.cpp
M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceClipper.cpp
M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceClipper.h
M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceContainer.h
M Source/WebCore/svg/SVGClipPathElement.cpp
M Source/WebCore/svg/SVGClipPathElement.h
M Source/WebCore/svg/SVGElement.cpp
Log Message:
-----------
[LBSE] Add RenderSVGResourceClipper
https://bugs.webkit.org/show_bug.cgi?id=262191
Reviewed by Nikolas Zimmermann.
Implement the first SVG resource in LBSE: clipping (RenderSVGResourceClipper).
Unlike the legacy engine, LBSE does not make use of temporary ImageBuffers for clipping,
but relies on Porter-Duff DestinationIn/SourceOver compositing operations, to achieve
the same effect, but faster. This aligns SVG clipping with HTML/CSS clipping.
This is only the beginning: dynamic invalidations are not working, as we're introducing
them incrementally in a unified, clean way.
Covered by existing tests (dozens of progressions, see TestExpectations).
* LayoutTests/platform/mac-ventura-wk2-lbse-text/TestExpectations:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/animate-elem-32-t-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/coords-viewattr-03-b-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/fonts-elem-05-t-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/fonts-elem-06-t-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/fonts-kern-01-t-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/masking-intro-01-f-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/masking-path-01-b-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/masking-path-02-b-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/masking-path-04-b-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/masking-path-05-f-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/painting-marker-02-f-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/shapes-intro-01-t-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/text-align-01-b-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/text-text-05-t-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/W3C-SVG-1.1/text-text-06-t-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/batik/text/textEffect2-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/batik/text/textProperties-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/carto.net/textbox-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/custom/embedding-external-svgs-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/custom/path-moveto-only-rendering-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/custom/subpaths-moveto-only-rendering-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/custom/text-clip-expected.png: Added.
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/custom/text-clip-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/custom/use-on-symbol-inside-pattern-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/filters/filter-clip-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/foreignObject/clip-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/repaint/mask-clip-target-transform-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/text/text-align-01-b-expected.txt:
* LayoutTests/platform/mac-ventura-wk2-lbse-text/svg/text/text-text-05-t-expected.txt:
* LayoutTests/svg/clip-path/clip-opacity.html:
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/dom/TreeScope.cpp:
(WebCore::TreeScope::removeSVGResource):
(WebCore::TreeScope::lookupSVGResourceById const):
(WebCore::TreeScope::lookupLegacySVGResoureById const):
(WebCore::TreeScope::svgResourceById const): Deleted.
* Source/WebCore/dom/TreeScope.h:
* Source/WebCore/rendering/PaintPhase.h:
* Source/WebCore/rendering/RenderBox.cpp:
(WebCore::RenderBox::hitTestClipPath const):
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::recursiveUpdateLayerPositions):
(WebCore::RenderLayer::updateAncestorDependentState):
(WebCore::RenderLayer::computeHasVisibleContent const):
(WebCore::RenderLayer::beginTransparencyLayers):
(WebCore::RenderLayer::paintSVGResourceLayer):
(WebCore::RenderLayer::setupClipPath):
(WebCore::RenderLayer::paintLayerContents):
(WebCore::RenderLayer::enclosingSVGRootLayer const):
(WebCore::RenderLayer::calculateClipRects const):
* Source/WebCore/rendering/RenderLayer.h:
(WebCore::RenderLayer::isPaintingSVGResourceLayer const):
* Source/WebCore/rendering/RenderLayerInlines.h:
(WebCore::RenderLayer::hasFilter const):
(WebCore::RenderLayer::hasNonOpacityTransparency const):
* Source/WebCore/rendering/RenderObject.h:
(WebCore::RenderObject::isSVGForeignObject const):
(WebCore::RenderObject::isSVGResourceContainer const):
(WebCore::RenderObject::isLegacySVGResourceClipper const):
(WebCore::RenderObject::isSVGResourceClipper const):
* Source/WebCore/rendering/svg/RenderSVGContainer.cpp:
(WebCore::RenderSVGContainer::paint):
* Source/WebCore/rendering/svg/RenderSVGImage.cpp:
(WebCore::RenderSVGImage::paint):
* Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:
(WebCore::RenderSVGModelObject::computeClipPath const):
* Source/WebCore/rendering/svg/RenderSVGModelObject.h:
* Source/WebCore/rendering/svg/RenderSVGResource.cpp:
(WebCore::requestPaintingResource):
* Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp: Added.
(WebCore::RenderSVGResourceClipper::RenderSVGResourceClipper):
(WebCore::RenderSVGResourceClipper::shouldApplyPathClipping const):
(WebCore::currentClippingMode):
(WebCore::sharedClipAllPath):
(WebCore::RenderSVGResourceClipper::applyPathClipping):
(WebCore::RenderSVGResourceClipper::applyMaskClipping):
(WebCore::RenderSVGResourceClipper::hitTestClipContent):
(WebCore::RenderSVGResourceClipper::resourceBoundingBox):
* Source/WebCore/rendering/svg/RenderSVGResourceClipper.h: Added.
* Source/WebCore/rendering/svg/RenderSVGResourceClipperInlines.h: Added.
(WebCore::RenderSVGResourceClipper::clipPathElement const):
(WebCore::RenderSVGResourceClipper::clipPathUnits const):
* Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp:
(WebCore::RenderSVGResourceSolidColor::applyResource):
* Source/WebCore/rendering/svg/RenderSVGRoot.cpp:
(WebCore::RenderSVGRoot::paintObject):
* Source/WebCore/rendering/svg/RenderSVGShape.cpp:
(WebCore::RenderSVGShape::paint):
* Source/WebCore/rendering/svg/RenderSVGText.cpp:
(WebCore::RenderSVGText::paint):
* Source/WebCore/rendering/svg/SVGInlineTextBox.cpp:
(WebCore::SVGInlineTextBox::paint):
* Source/WebCore/rendering/svg/SVGRenderSupport.cpp:
(WebCore::SVGRenderSupport::paintSVGClippingMask):
* Source/WebCore/rendering/svg/SVGRenderSupport.h:
* Source/WebCore/rendering/svg/SVGRenderingContext.cpp:
(WebCore::isRenderingMaskImage):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceClipper.cpp:
(WebCore::LegacyRenderSVGResourceClipper::drawContentIntoMaskImage):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceClipper.h:
(isType):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceContainer.h:
(WebCore::getRenderSVGResourceContainerById):
* Source/WebCore/svg/SVGClipPathElement.cpp:
(WebCore::SVGClipPathElement::createElementRenderer):
(WebCore::SVGClipPathElement::shouldApplyPathClipping const):
* Source/WebCore/svg/SVGClipPathElement.h:
* Source/WebCore/svg/SVGElement.cpp:
(WebCore::isSVGLayerAwareElement):
Canonical link: https://commits.webkit.org/269635@main
More information about the webkit-changes
mailing list