[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