[webkit-changes] [WebKit/WebKit] 3000bc: Make layout overflow calculations account for alig...

fantasai noreply at github.com
Tue Jan 30 04:52:47 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 3000bc1bca1c3535f35ab726f48f98cfc11a035d
      https://github.com/WebKit/WebKit/commit/3000bc1bca1c3535f35ab726f48f98cfc11a035d
  Author: Elika Etemad <fantasai.bugs at inkedblade.net>
  Date:   2024-01-30 (Tue, 30 Jan 2024)

  Changed paths:
    M LayoutTests/TestExpectations
    M LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/negative-overflow-002-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-flexbox/negative-overflow-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-content-alignment-overflow-002-expected.txt
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-001-ref.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-002-ref.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-block-001-expected.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-block-001.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-block-002-expected.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-block-002.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-reverse-001-expected.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-reverse-001.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-reverse-002-expected.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-reverse-002.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-wrap-001-expected.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-wrap-001.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-wrap-002-expected.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-col-wrap-002.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-reverse-001-expected.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-reverse-001.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-reverse-002-expected.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-reverse-002.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-wrap-001-expected.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-wrap-001.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-wrap-002-expected.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-flex-row-wrap-002.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-grid-001-expected.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-grid-001.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-grid-002-expected.html
    A LayoutTests/imported/w3c/web-platform-tests/css/css-overflow/overflow-alignment-grid-002.html
    R LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/css/css-flexbox/negative-overflow-002-expected.txt
    M Source/WebCore/platform/LengthBox.h
    M Source/WebCore/platform/RectEdges.h
    M Source/WebCore/rendering/RenderBlockFlow.cpp
    M Source/WebCore/rendering/RenderBlockFlow.h
    M Source/WebCore/rendering/RenderBox.cpp
    M Source/WebCore/rendering/RenderBox.h
    M Source/WebCore/rendering/RenderBoxInlines.h
    M Source/WebCore/rendering/RenderFlexibleBox.cpp
    M Source/WebCore/rendering/RenderFlexibleBox.h
    M Source/WebCore/rendering/RenderGrid.cpp
    M Source/WebCore/rendering/RenderGrid.h
    M Source/WebCore/rendering/style/StyleContentAlignmentData.cpp
    M Source/WebCore/rendering/style/StyleContentAlignmentData.h

  Log Message:
  -----------
  Make layout overflow calculations account for align-content/justify-content.
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




More information about the webkit-changes mailing list