Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 49ccbd38ad53774502fcb0ff8d42828e2d569d45
https://github.com/WebKit/WebKit/commit/49ccbd38ad53774502fcb0ff8d42828e2d569d45
Author: Simon Fraser <[email protected]>
Date: 2026-09-01 (Tue, 01 Sep 2026)
Changed paths:
M
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/corner-shape-bevel-overflow.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection001-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection001-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection001.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection002-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection002-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection002.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection003-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection003-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection003.html
M Source/WebCore/platform/graphics/BezierUtilities.cpp
M Source/WebCore/platform/graphics/BezierUtilities.h
M Source/WebCore/platform/graphics/CornerShapeUtilities.cpp
M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
M Tools/TestWebKitAPI/Tests/WebCore/BezierUtilitiesTests.cpp
Log Message:
-----------
[corner-shape] Incorrect rendering when inner corners intersect
https://bugs.webkit.org/show_bug.cgi?id=322658
rdar://185931169
Reviewed by Tim Nguyen.
With larger border thickness and border-radius, adjacent corners of the inner
border edge can intesect,
causing bad rendering with overlapping and holes.
Fix by implementing logic to intersect bezier paths, but we only need to
support the simple, monotonic curves
that are used by corner-shape. `addSuperellipseCornerCurves` calls functions in
CornerShapeUtilities to do this.
The intersection logic uses a recursive function (`appendCurveCrossings()`)
with a depth limit.
Even non-adjacent corners can intersect (see
inner-corner-intersection003.html), which `addSuperellipseCornerCurves()`
handles.
Add API tests for the Bezier functions. BezierUtilitiesTests.cpp wasn't being
compiled at all, so add it
to the target.
Based on work by Lilly Le (@cupidsity).
Tests: Tools/TestWebKitAPI/Tests/WebCore/BezierUtilitiesTests.cpp
imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection001-ref.html
imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection001.html
imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection002-ref.html
imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection002.html
imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection003-ref.html
imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection003.html
*
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection001-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection001-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection001.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection002-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection002-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection002.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection003-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection003-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/inner-corner-intersection003.html:
Added.
* Source/WebCore/platform/graphics/BezierUtilities.cpp:
(WebCore::trimBezierToRect):
(WebCore::findMonotonicBezierCurvesIntersection):
(WebCore::trimMonotonicBezierCurvesAtIntersection):
* Source/WebCore/platform/graphics/BezierUtilities.h:
(WebCore::BezierCurvesIntersection::isTailToHead const):
* Source/WebCore/platform/graphics/CornerShapeUtilities.cpp:
(WebCore::borderContourPath):
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add
BezierUtilitiesTests.cpp to the target; it wasn't compiled before.
* Tools/TestWebKitAPI/Tests/WebCore/BezierUtilitiesTests.cpp:
(TestWebKitAPI::trimAtIntersection):
(TestWebKitAPI::TEST(BezierUtilities,
TrimMonotonicCurvesLeavesSeparatedRunsAlone)):
(TestWebKitAPI::TEST(BezierUtilities,
TrimMonotonicCurvesMeetsStraightRunsAtTheirIntersection)):
(TestWebKitAPI::TEST(BezierUtilities,
TrimMonotonicCurvesFindsIntersectionAwayFromMidParameter)):
(TestWebKitAPI::TEST(BezierUtilities,
TrimMonotonicCurvesLeavesParallelRunsAlone)):
(TestWebKitAPI::TEST(BezierUtilities,
TrimMonotonicCurvesKeepsEarlierSegmentsWhole)):
(TestWebKitAPI::TEST(BezierUtilities,
TrimMonotonicCurvesLeavesRunsMeetingAtAPointAlone)):
(TestWebKitAPI::TEST(BezierUtilities,
TrimMonotonicCurvesMeetsCurvedRunsAtOnePoint)):
(TestWebKitAPI::TEST(BezierUtilities, TrimMonotonicCurvesHandlesEmptyRuns)):
(TestWebKitAPI::TEST(BezierUtilities,
FindMonotonicCurvesReportsWhereTheIntersectionSits)):
(TestWebKitAPI::TEST(BezierUtilities,
FindMonotonicCurvesRejectsTheReversedOrdering)):
(TestWebKitAPI::TEST(BezierUtilities, FindMonotonicCurvesDoesNotModifyTheRuns)):
*
LayoutTests/imported/w3c/web-platform-tests/css/css-borders/corner-shape/corner-shape-bevel-overflow.html:
Canonical link: https://commits.webkit.org/320287@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications