Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: b59ae7a025c9154ab39f3c745f0c333c761d0b98
https://github.com/WebKit/WebKit/commit/b59ae7a025c9154ab39f3c745f0c333c761d0b98
Author: Elika Etemad <[email protected]>
Date: 2025-07-11 (Fri, 11 Jul 2025)
Changed paths:
A
LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/position-area-percents-001-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/position-area-percents-001-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/position-area-percents-001.html
M Source/WebCore/rendering/PositionedLayoutConstraints.cpp
M Source/WebCore/rendering/PositionedLayoutConstraints.h
M Source/WebCore/rendering/RenderBox.cpp
M Source/WebCore/style/AnchorPositionEvaluator.cpp
M Source/WebCore/style/StyleTreeResolver.cpp
Log Message:
-----------
Compute padding percentage correctly for position-area
https://bugs.webkit.org/show_bug.cgi?id=294256
rdar://153636536
Reviewed by Alan Baradlay.
Percentage padding is supposed to be resolved against the inline size of the
containing block. The position-area property modifies the containing block,
but we weren't accounting for this in in our padding calculations.
This patch fixes this by updating containingBlockLogicalWidthForContent
(and containingBlockLogicalHeightForContent) to call
PositionedLayoutConstraints,
which handles all of the complications for out-of-flow containing block sizing.
It also splits PositionedLayoutConstraints constructor into two pieces, so that
we aren't doing extra work when we don't need to, and does a bunch of additional
clean up in PositionedLayoutConstraints to make all of this clearer and cleaner.
Changes include:
- reorganizing the API into methods that can be called with/without
computeInsets()
- rename m_marginPercentageBasis to m_containingInlineAxis and give it a getter
- introduce new computeInsets() method to split out second half of constructor
- store renderer and selfAxis internally, and delete them from method
parameters
- updating all call sites accordingly
*
LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/position-area-percents-001-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/position-area-percents-001-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/position-area-percents-001.html:
Added.
Test for percentage margin/padding/insets in both axes, with mixed writing
modes.
* Source/WebCore/rendering/PositionedLayoutConstraints.cpp:
(WebCore::PositionedLayoutConstraints::PositionedLayoutConstraints):
Split the constructor's logic, keeping just the CB computation.
Store renderer/selfAxis parameters.
Rename local variables for consistency with new containingInlineSize() method.
(WebCore::PositionedLayoutConstraints::computeInsets):
New method for the second half of the constructor (inset/margin computation).
(WebCore::PositionedLayoutConstraints::captureInsets
(WebCore::PositionedLayoutConstraints::captureGridArea):
(WebCore::PositionedLayoutConstraints::captureAnchorGeometry):
(WebCore::PositionedLayoutConstraints::resolvePosition const):
(WebCore::PositionedLayoutConstraints::resolveAlignmentShift const):
(WebCore::PositionedLayoutConstraints::computeStaticPosition):
(WebCore::PositionedLayoutConstraints::computeInlineStaticDistance):
(WebCore::PositionedLayoutConstraints::computeBlockStaticDistance):
(WebCore::PositionedLayoutConstraints::fixupLogicalTopPosition const):
Delete parameters in favor of new data members.
* Source/WebCore/rendering/PositionedLayoutConstraints.h:
(WebCore::PositionedLayoutConstraints::containingSize const):
(WebCore::PositionedLayoutConstraints::containingInlineSize const):
(WebCore::PositionedLayoutConstraints::containingAxis const):
(WebCore::PositionedLayoutConstraints::container const):
(WebCore::PositionedLayoutConstraints::defaultAnchorBox const):
(WebCore::PositionedLayoutConstraints::alignment const):
(WebCore::PositionedLayoutConstraints::startIsBefore const):
(WebCore::PositionedLayoutConstraints::bordersPlusPadding const):
(WebCore::PositionedLayoutConstraints::marginBefore const):
(WebCore::PositionedLayoutConstraints::marginAfter const):
(WebCore::PositionedLayoutConstraints::insetBefore const):
(WebCore::PositionedLayoutConstraints::insetAfter const):
(WebCore::PositionedLayoutConstraints::marginBeforeValue const):
(WebCore::PositionedLayoutConstraints::marginAfterValue const):
Reorganize the API definition to clarify which methods can be called without
calling computeInsets().
Add new m_selfAxis and m_renderer members to cache these inputs.
Rename m_marginPercentageBasis to m_containingInlineSize.
* Source/WebCore/rendering/RenderBox.cpp:
(WebCore::RenderBox::containingBlockLogicalWidthForContent const):
(WebCore::RenderBox::containingBlockLogicalHeightForContent const):
Update to use PositionedLayoutConstraints for out-of-flow boxes.
(WebCore::RenderBox::computePositionedLogicalWidth const):
(WebCore::RenderBox::computePositionedLogicalHeight const):
(WebCore::RenderBox::computePositionedLogicalWidthReplaced const):
(WebCore::RenderBox::computePositionedLogicalHeightReplaced const):
* Source/WebCore/style/AnchorPositionEvaluator.cpp:
(WebCore::Style::AnchorPositionEvaluator::overflowsInsetModifiedContainingBlock):
* Source/WebCore/style/StyleTreeResolver.cpp:
(WebCore::Style::TreeResolver::sortPositionOptionsIfNeeded):
Update PositionedLayoutConstraints call sites.
Canonical link: https://commits.webkit.org/297275@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes