[webkit-changes] [WebKit/WebKit] f48555: Introduce BorderShape to prepare for non-rounded c...

Simon Fraser noreply at github.com
Tue Aug 20 16:15:55 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: f48555f2c5d09dba8dc48ad5383ad982265c84be
      https://github.com/WebKit/WebKit/commit/f48555f2c5d09dba8dc48ad5383ad982265c84be
  Author: Simon Fraser <simon.fraser at apple.com>
  Date:   2024-08-20 (Tue, 20 Aug 2024)

  Changed paths:
    M LayoutTests/interaction-region/border-radii-expected.txt
    M LayoutTests/interaction-region/position-only-update-expected.txt
    M LayoutTests/tiled-drawing/scrolling/non-fast-region/wheel-handler-in-columns-expected.txt
    M Source/WebCore/Sources.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/page/InteractionRegion.cpp
    M Source/WebCore/platform/graphics/RoundedRect.cpp
    M Source/WebCore/platform/graphics/RoundedRect.h
    M Source/WebCore/rendering/BackgroundPainter.cpp
    M Source/WebCore/rendering/BorderPainter.cpp
    M Source/WebCore/rendering/BorderPainter.h
    A Source/WebCore/rendering/BorderShape.cpp
    A Source/WebCore/rendering/BorderShape.h
    M Source/WebCore/rendering/MotionPath.cpp
    M Source/WebCore/rendering/RenderBlock.cpp
    M Source/WebCore/rendering/RenderBox.cpp
    M Source/WebCore/rendering/RenderBox.h
    M Source/WebCore/rendering/RenderElement.cpp
    M Source/WebCore/rendering/RenderLayerBacking.cpp
    M Source/WebCore/rendering/RenderReplaced.cpp
    M Source/WebCore/rendering/RenderTable.cpp
    M Source/WebCore/rendering/RenderTheme.cpp
    M Source/WebCore/rendering/ios/RenderThemeIOS.h
    M Source/WebCore/rendering/ios/RenderThemeIOS.mm
    M Source/WebCore/rendering/shapes/BoxShape.cpp
    M Source/WebCore/rendering/style/RenderStyle.cpp
    M Source/WebCore/rendering/style/RenderStyle.h

  Log Message:
  -----------
  Introduce BorderShape to prepare for non-rounded corner shapes
https://bugs.webkit.org/show_bug.cgi?id=278269
rdar://134102043

Reviewed by Antti Koivisto.

There's a lot of code currently that assumes that CSS boxes are rects or rounded rects.
With `corner-shape`, that's no longer true, so we need a class that hides the complexities
of clipping, painting and hit-testing more complex border shapes.

This change introduces the `BorderShape` class, and uses it in all the places that used
to call `RenderStyle::getRoundedBorderFor()` which can be removed. Many call sites
continue to use RoundedRects; these will gradually be migrated to a form where BorderShape
itself handles the functionality, but for now, call `BorderShape::deprecated...`
functions to keep code working.

`RenderBox::borderRadii()` had some surprising code that actually returns a rounded
rect for the padding box; noted with a FIXME. This is only called from WebKitLegacy
and WebKit.

A future change will adopt BorderShape for call sites of `RenderStyle::getRoundedInnerBorderFor()`.

* LayoutTests/interaction-region/border-radii-expected.txt: The event region rects are now pixel-snapped.
* LayoutTests/interaction-region/position-only-update-expected.txt: Ditto
* LayoutTests/tiled-drawing/scrolling/non-fast-region/wheel-handler-in-columns-expected.txt: Ditto
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/page/InteractionRegion.cpp:
(WebCore::interactionRegionForRenderedRegion):
* Source/WebCore/platform/graphics/RoundedRect.cpp:
(WebCore::RoundedRect::Radii::areRenderableInRect const):
(WebCore::RoundedRect::Radii::makeRenderableInRect):
(WebCore::RoundedRect::isRenderable const):
(WebCore::RoundedRect::adjustRadii):
* Source/WebCore/platform/graphics/RoundedRect.h:
* Source/WebCore/rendering/BackgroundPainter.cpp:
(WebCore::BackgroundPainter::backgroundRoundedRect const):
(WebCore::BackgroundPainter::paintBoxShadow const):
* Source/WebCore/rendering/BorderPainter.cpp:
(WebCore::BorderPainter::pathForBorderArea):
(WebCore::BorderPainter::paintBorder const):
(WebCore::BorderPainter::borderRectAdjustedForBleedAvoidance const):
(WebCore::BorderPainter::borderInnerRectAdjustedForBleedAvoidance const): Deleted.
* Source/WebCore/rendering/BorderPainter.h:
* Source/WebCore/rendering/BorderShape.cpp: Added.
(WebCore::calcRadiiFor):
(WebCore::BorderShape::shapeForBorderRect):
(WebCore::BorderShape::BorderShape):
(WebCore::BorderShape::deprecatedRoundedRect const):
(WebCore::BorderShape::deprecatedInnerRoundedRect const):
(WebCore::BorderShape::deprecatedPixelSnappedRoundedRect const):
(WebCore::BorderShape::deprecatedPixelSnappedInnerRoundedRect const):
(WebCore::BorderShape::snappedOuterRect const):
(WebCore::BorderShape::snappedInnerRect const):
(WebCore::addRoundedRectToPath):
(WebCore::BorderShape::pathForOuterShape const):
(WebCore::BorderShape::pathForInnerShape const):
(WebCore::BorderShape::pathForBorderArea const):
(WebCore::BorderShape::clipToOuterShape):
(WebCore::BorderShape::clipToInnerShape):
(WebCore::BorderShape::clipOutInnerShape):
(WebCore::BorderShape::fillOuterShape):
(WebCore::BorderShape::innerEdgeRoundedRect const):
(WebCore::BorderShape::innerEdgeRect const):
* Source/WebCore/rendering/BorderShape.h: Added.
(WebCore::BorderShape::radii const):
(WebCore::BorderShape::setRadii):
(WebCore::BorderShape::isRounded const):
* Source/WebCore/rendering/MotionPath.cpp:
(WebCore::containingBlockRectForRenderer):
* Source/WebCore/rendering/RenderBlock.cpp:
(WebCore::RenderBlock::paintObject):
* Source/WebCore/rendering/RenderBox.cpp:
(WebCore::RenderBox::borderRadii const):
(WebCore::RenderBox::hitTestBorderRadius const):
(WebCore::RenderBox::paintBoxDecorations):
(WebCore::RenderBox::borderRoundedRect const): Deleted.
(WebCore::RenderBox::roundedBorderBoxRect const): Deleted.
* Source/WebCore/rendering/RenderBox.h:
* Source/WebCore/rendering/RenderElement.cpp:
(WebCore::RenderElement::repaintAfterLayoutIfNeeded):
* Source/WebCore/rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateBackdropFiltersGeometry):
(WebCore::RenderLayerBacking::updateConfiguration):
* Source/WebCore/rendering/RenderReplaced.cpp:
(WebCore::RenderReplaced::paint):
* Source/WebCore/rendering/RenderTable.cpp:
(WebCore::RenderTable::paintBoxDecorations):
* Source/WebCore/rendering/RenderTheme.cpp:
(WebCore::RenderTheme::paint):
* Source/WebCore/rendering/ios/RenderThemeIOS.h:
* Source/WebCore/rendering/ios/RenderThemeIOS.mm:
(WebCore::RenderThemeIOS::paintTextFieldDecorations):
(WebCore::RenderThemeIOS::addRoundedBorderClip): Deleted. It was unused.
* Source/WebCore/rendering/shapes/BoxShape.cpp:
(WebCore::computeRoundedRectForBoxShape):
* Source/WebCore/rendering/style/RenderStyle.cpp:
(WebCore::RenderStyle::getRoundedBorderFor const): Deleted.
* Source/WebCore/rendering/style/RenderStyle.h:

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



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list