[webkit-changes] [WebKit/WebKit] 95664c: [SVG] Move marker related code from LegacyRenderSV...

Yusuke Suzuki noreply at github.com
Thu Oct 12 00:50:56 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 95664cfd77a025b5154b8fc6dd52a6cbd9c0f544
      https://github.com/WebKit/WebKit/commit/95664cfd77a025b5154b8fc6dd52a6cbd9c0f544
  Author: Yusuke Suzuki <ysuzuki at apple.com>
  Date:   2023-10-12 (Thu, 12 Oct 2023)

  Changed paths:
    M Source/WebCore/rendering/svg/RenderSVGEllipse.cpp
    M Source/WebCore/rendering/svg/RenderSVGPath.cpp
    M Source/WebCore/rendering/svg/RenderSVGPath.h
    M Source/WebCore/rendering/svg/RenderSVGRect.cpp
    M Source/WebCore/rendering/svg/RenderSVGShape.cpp
    M Source/WebCore/rendering/svg/RenderSVGShape.h
    M Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp
    M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGEllipse.cpp
    M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGPath.cpp
    M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGPath.h
    M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGRect.cpp
    M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGShape.cpp
    M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGShape.h

  Log Message:
  -----------
  [SVG] Move marker related code from LegacyRenderSVGShape to LegacyRenderSVGPath
https://bugs.webkit.org/show_bug.cgi?id=262756
rdar://116557017

Reviewed by Cameron McCormack.

This is one step of the patch series implementing approximate repainting rect for SVG path, derived from blink's work[1].

This change moves marker related code from LegacyRenderSVGShape to LegacyRenderSVGPath
because only LegacyRenderSVGPath can have markers. `<path>`, `<line>`, `<polyline>` and `<polygon>`
can have that and all creates LegacyRenderSVGPath.

1. This makes LegacyRenderSVGShape::updateShapeFromElement more concise. This now only creates path, and computes two bounding boxes.
2. Previously we were calling LegacyRenderSVGShape::updateShapeFromElement from various places to update path. But this is not a good
   way since it updates m_fillBoundingBox and m_strokeBoundingBox while the class' updateShapeFromElement already filled that.
   Since now LegacyRenderSVGShape::updateShapeFromElement is just creating a path and computing these two bounding boxes, we introduce
   ensurePath and use it in the places which is not overriding LegacyRenderSVGShape::updateShapeFromElement. This avoids accidentally
   updating already computed m_fillBoundingBox / m_strokeBoundingBox computing again. If they gets different, then it becomes a bug.
   (If newly path-based computed m_strokeBoundingBox is different from m_strokeBoundingBox computed in the class's updateShapeFromElement,
   getBBox etc. can return different value at different timing). This change makes m_strokeBoundingBox and m_fillBoundingBox more consistent.
3. We duplicate the change in LBSE.

[1]: https://bugs.chromium.org/p/chromium/issues/detail?id=435097

* Source/WebCore/rendering/svg/RenderSVGEllipse.cpp:
(WebCore::RenderSVGEllipse::updateShapeFromElement):
(WebCore::RenderSVGEllipse::shapeDependentStrokeContains):
* Source/WebCore/rendering/svg/RenderSVGPath.cpp:
(WebCore::RenderSVGPath::updateShapeFromElement):
(WebCore::RenderSVGPath::calculateUpdatedStrokeBoundingBox const):
(WebCore::markerForType):
(WebCore::RenderSVGPath::shouldGenerateMarkerPositions const):
(WebCore::RenderSVGPath::drawMarkers):
(WebCore::RenderSVGPath::computeMarkerBoundingBox const):
(WebCore::RenderSVGPath::processMarkerPositions):
* Source/WebCore/rendering/svg/RenderSVGPath.h:
* Source/WebCore/rendering/svg/RenderSVGRect.cpp:
(WebCore::RenderSVGRect::updateShapeFromElement):
(WebCore::RenderSVGRect::shapeDependentStrokeContains):
* Source/WebCore/rendering/svg/RenderSVGShape.cpp:
(WebCore::RenderSVGShape::updateShapeFromElement):
(WebCore::RenderSVGShape::fillStrokeMarkers):
(WebCore::RenderSVGShape::ensurePath):
(WebCore::RenderSVGShape::shouldGenerateMarkerPositions const): Deleted.
(WebCore::markerForType): Deleted.
(WebCore::RenderSVGShape::computeMarkerBoundingBox const): Deleted.
(WebCore::RenderSVGShape::drawMarkers): Deleted.
(WebCore::RenderSVGShape::processMarkerPositions): Deleted.
* Source/WebCore/rendering/svg/RenderSVGShape.h:
(WebCore::RenderSVGShape::shapeType const):
(WebCore::RenderSVGShape::drawMarkers):
* Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:
(WebCore::SVGBoundingBoxComputation::handleShapeOrTextOrInline const):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGEllipse.cpp:
(WebCore::LegacyRenderSVGEllipse::updateShapeFromElement):
(WebCore::LegacyRenderSVGEllipse::shapeDependentStrokeContains):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGPath.cpp:
(WebCore::LegacyRenderSVGPath::updateShapeFromElement):
(WebCore::LegacyRenderSVGPath::calculateUpdatedStrokeBoundingBox const):
(WebCore::markerForType):
(WebCore::LegacyRenderSVGPath::shouldGenerateMarkerPositions const):
(WebCore::LegacyRenderSVGPath::drawMarkers):
(WebCore::LegacyRenderSVGPath::markerRect const):
(WebCore::LegacyRenderSVGPath::processMarkerPositions):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGPath.h:
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGRect.cpp:
(WebCore::LegacyRenderSVGRect::updateShapeFromElement):
(WebCore::LegacyRenderSVGRect::shapeDependentStrokeContains):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGShape.cpp:
(WebCore::LegacyRenderSVGShape::updateShapeFromElement):
(WebCore::LegacyRenderSVGShape::layout):
(WebCore::LegacyRenderSVGShape::fillStrokeMarkers):
(WebCore::LegacyRenderSVGShape::calculateStrokeBoundingBox const):
(WebCore::LegacyRenderSVGShape::ensurePath):
(WebCore::LegacyRenderSVGShape::shouldGenerateMarkerPositions const): Deleted.
(WebCore::markerForType): Deleted.
(WebCore::LegacyRenderSVGShape::markerRect const): Deleted.
(WebCore::LegacyRenderSVGShape::drawMarkers): Deleted.
(WebCore::LegacyRenderSVGShape::processMarkerPositions): Deleted.
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGShape.h:
(WebCore::LegacyRenderSVGShape::drawMarkers):

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




More information about the webkit-changes mailing list