[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