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

Reply via email to