Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Make layout overflow calculations account for align-content/justify-c…
…ontent. https://bugs.webkit.org/show_bug.cgi?id=267849 rdar://121366949 Reviewed by Simon Fraser. 1. Updates logic in RenderBlockFlow, RenderGrid, and RenderFlexibleBox to account for align-content/justify-content as appropriate by: a) Changing allowed overflow calculations to return allowances rather than sides of the box so that allowable overflow can be accounted for when centering or end-aligning content. b) Updating isEndward() and isStartward() to fully incorporate flex-specific left/right logic to make this easier. 2. Fixes an obvious error in isEndward() center handling (now that we need it). 3. Fixes broken overflow calculation in RTL + vertical writing modes. 4. Fixes broken alignment calculation in flexbox in RTL + vertical writing modes. 5. Applies alignContentShift to oldClientAfterEdge to correct block overflow calculation. Caveat: RenderFlexibleBox doesn't store allowances, so this fix isn't 100% correct for certain types of overflow; but it handles the common cases. * LayoutTests/TestExpectations: Mark image failures due to missing 'safe' implementation in flexbox. * LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/negative-overflow-002-expected.txt: Rebaseline. * LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/negative-overflow-expected.txt: Rebaseline. * LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-content-alignment-overflow-002-expected.txt: Rebaseline. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-001-ref.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-002-ref.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-block-001-expected.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-block-001.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-block-002-expected.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-block-002.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-reverse-001-expected.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-reverse-001.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-reverse-002-expected.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-reverse-002.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-wrap-001-expected.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-wrap-001.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-wrap-002-expected.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-wrap-002.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-reverse-001-expected.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-reverse-001.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-reverse-002-expected.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-reverse-002.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-wrap-001-expected.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-wrap-001.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-wrap-002-expected.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-wrap-002.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-grid-001-expected.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-grid-001.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-grid-002-expected.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-grid-002.html: Added. * LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/css/css-flexbox/negative-overflow-002-expected.txt: Removed. * Source/WebCore/platform/LengthBox.h: Add LayoutOptionalOutsets typedef. * Source/WebCore/platform/RectEdges.h: (WebCore::RectEdges::xFlippedCopy): Add method for use in RenderFlexibleBox. (WebCore::RectEdges::yFlippedCopy): Add method for use in RenderFlexibleBox. (WebCore::RectEdges::blockFlippedCopy): Add logical version. (WebCore::RectEdges::inlineFlippedCopy): Add logical version. * Source/WebCore/rendering/RenderBlockFlow.cpp: (WebCore::RenderBlockFlow::layoutBlock): Cache alignment overflow allowance. (WebCore::RenderBlockFlow::shiftForAlignContent): Allow scroll containers to align. (WebCore::RenderBlockFlow::allowedLayoutOverflow const): Add new overflow method. (WebCore::RenderBlockFlow::isTopLayoutOverflowAllowed const): Deleted. (WebCore::RenderBlockFlow::isLeftLayoutOverflowAllowed const): Deleted. * Source/WebCore/rendering/RenderBlockFlow.h: Switch to new layout overflow API. * Source/WebCore/rendering/RenderBox.cpp: (WebCore::RenderBox::allowedLayoutOverflow const): Implement new layout overflow API. (WebCore::RenderBox::addLayoutOverflow): Hook into new layout overflow API. * Source/WebCore/rendering/RenderBox.h: Switch to new layout overflow API. * Source/WebCore/rendering/RenderBoxInlines.h: Remove old API. (WebCore::RenderBox::intrinsicLogicalHeight const): (WebCore::RenderBox::isLeftLayoutOverflowAllowed const): Deleted. (WebCore::RenderBox::isTopLayoutOverflowAllowed const): Deleted. * Source/WebCore/rendering/RenderFlexibleBox.cpp: (WebCore::initialJustifyContentOffset): Fix broken left/right alignment calculation. (WebCore::leftRightAxisDirectionFromStyle): Add helper method. (WebCore::RenderFlexibleBox::allowedLayoutOverflow const): Implement new layout overflow API. (WebCore::RenderFlexibleBox::isTopLayoutOverflowAllowed const): Deleted. (WebCore::RenderFlexibleBox::isLeftLayoutOverflowAllowed const): Deleted. * Source/WebCore/rendering/RenderFlexibleBox.h: Switch to new layout overflow API. * Source/WebCore/rendering/RenderGrid.cpp: (WebCore::RenderGrid::allowedLayoutOverflow const): Implement new layout overflow API. * Source/WebCore/rendering/RenderGrid.h: Switch to new layout overflow API. * Source/WebCore/rendering/style/StyleContentAlignmentData.cpp: (WebCore::StyleContentAlignmentData::iStartward const): Incorporate Flexbox left/right logic. (WebCore::StyleContentAlignmentData::isEndward const): Make centering return false. Incorporate Flexbox left/right logic. * Source/WebCore/rendering/style/StyleContentAlignmentData.h: Update to pass optional TextDirection. Canonical link: https://commits.webkit.org/273737@main
- Loading branch information