Changeset 261980 in webkit


Ignore:
Timestamp:
May 20, 2020 6:58:33 PM (4 years ago)
Author:
Alan Bujtas
Message:

[LFC][TFC] Preferred width computation should take border collapsing into account
https://bugs.webkit.org/show_bug.cgi?id=212141

Reviewed by Antti Koivisto.

Source/WebCore:

Test: fast/layoutformattingcontext/table-simple-border-collapse2.html

  • layout/tableformatting/TableFormattingContext.cpp:

(WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):

  • layout/tableformatting/TableFormattingContext.h:

(WebCore::Layout::TableFormattingContext::Geometry::Geometry):

  • layout/tableformatting/TableFormattingContextGeometry.cpp:

(WebCore::Layout::TableFormattingContext::Geometry::intrinsicWidthConstraintsForCell):

LayoutTests:

  • fast/layoutformattingcontext/table-simple-border-collapse2-expected.html: Added.
  • fast/layoutformattingcontext/table-simple-border-collapse2.html: Added.
Location:
trunk
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r261979 r261980  
     12020-05-20  Zalan Bujtas  <zalan@apple.com>
     2
     3        [LFC][TFC] Preferred width computation should take border collapsing into account
     4        https://bugs.webkit.org/show_bug.cgi?id=212141
     5
     6        Reviewed by Antti Koivisto.
     7
     8        * fast/layoutformattingcontext/table-simple-border-collapse2-expected.html: Added.
     9        * fast/layoutformattingcontext/table-simple-border-collapse2.html: Added.
     10
    1112020-05-20  Zalan Bujtas  <zalan@apple.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r261979 r261980  
     12020-05-20  Zalan Bujtas  <zalan@apple.com>
     2
     3        [LFC][TFC] Preferred width computation should take border collapsing into account
     4        https://bugs.webkit.org/show_bug.cgi?id=212141
     5
     6        Reviewed by Antti Koivisto.
     7
     8        Test: fast/layoutformattingcontext/table-simple-border-collapse2.html
     9
     10        * layout/tableformatting/TableFormattingContext.cpp:
     11        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):
     12        * layout/tableformatting/TableFormattingContext.h:
     13        (WebCore::Layout::TableFormattingContext::Geometry::Geometry):
     14        * layout/tableformatting/TableFormattingContextGeometry.cpp:
     15        (WebCore::Layout::TableFormattingContext::Geometry::intrinsicWidthConstraintsForCell):
     16
    1172020-05-20  Zalan Bujtas  <zalan@apple.com>
    218
  • trunk/Source/WebCore/layout/tableformatting/TableFormattingContext.cpp

    r261919 r261980  
    322322        auto intrinsicWidth = formattingState.intrinsicWidthConstraintsForBox(cellBox);
    323323        if (!intrinsicWidth) {
    324             intrinsicWidth = geometry().intrinsicWidthConstraintsForCell(cellBox);
     324            intrinsicWidth = geometry().intrinsicWidthConstraintsForCell(*cell);
    325325            formattingState.setIntrinsicWidthConstraintsForBox(cellBox, *intrinsicWidth);
    326326        }
  • trunk/Source/WebCore/layout/tableformatting/TableFormattingContext.h

    r261810 r261980  
    6868        LayoutUnit cellHeigh(const ContainerBox&) const;
    6969        Optional<LayoutUnit> computedColumnWidth(const ContainerBox& columnBox) const;
    70         FormattingContext::IntrinsicWidthConstraints intrinsicWidthConstraintsForCell(const ContainerBox& cellBox);
     70        FormattingContext::IntrinsicWidthConstraints intrinsicWidthConstraintsForCell(const TableGrid::Cell&);
    7171        InlineLayoutUnit usedBaselineForCell(const ContainerBox& cellBox);
    7272
    7373    private:
    7474        friend class TableFormattingContext;
    75         Geometry(const TableFormattingContext&);
     75        Geometry(const TableFormattingContext&, const TableGrid&);
    7676
    7777        const TableFormattingContext& formattingContext() const { return downcast<TableFormattingContext>(FormattingContext::Geometry::formattingContext()); }
     78        const TableGrid& m_grid;
    7879    };
    79     TableFormattingContext::Geometry geometry() const { return Geometry(*this); }
     80    TableFormattingContext::Geometry geometry() const { return Geometry(*this, formattingState().tableGrid()); }
    8081    TableFormattingContext::TableLayout tableLayout() const { return TableLayout(*this, formattingState().tableGrid()); }
    8182
     
    9394};
    9495
    95 inline TableFormattingContext::Geometry::Geometry(const TableFormattingContext& tableFormattingContext)
     96inline TableFormattingContext::Geometry::Geometry(const TableFormattingContext& tableFormattingContext, const TableGrid& grid)
    9697    : FormattingContext::Geometry(tableFormattingContext)
     98    , m_grid(grid)
    9799{
    98100}
  • trunk/Source/WebCore/layout/tableformatting/TableFormattingContextGeometry.cpp

    r261832 r261980  
    5656}
    5757
    58 FormattingContext::IntrinsicWidthConstraints TableFormattingContext::Geometry::intrinsicWidthConstraintsForCell(const ContainerBox& cellBox)
     58FormattingContext::IntrinsicWidthConstraints TableFormattingContext::Geometry::intrinsicWidthConstraintsForCell(const TableGrid::Cell& cell)
    5959{
    60     auto fixedMarginBorderAndPadding = [&] {
    61         auto& style = cellBox.style();
    62         return fixedValue(style.marginStart()).valueOr(0)
    63             + LayoutUnit { style.borderLeftWidth() }
    64             + fixedValue(style.paddingLeft()).valueOr(0)
    65             + fixedValue(style.paddingRight()).valueOr(0)
    66             + LayoutUnit { style.borderRightWidth() }
    67             + fixedValue(style.marginEnd()).valueOr(0);
     60    auto& cellBox = cell.box();
     61    auto& style = cellBox.style();
     62
     63    auto computedHorizontalBorder = [&] {
     64        auto leftBorderWidth = LayoutUnit { style.borderLeftWidth() };
     65        auto rightBorderWidth = LayoutUnit { style.borderRightWidth() };
     66        if (auto collapsedBorder = m_grid.collapsedBorder()) {
     67            auto cellPosition = cell.position();
     68            if (!cellPosition.column)
     69                leftBorderWidth = collapsedBorder->horizontal.left / 2;
     70            if (cellPosition.column == m_grid.columns().size() - 1)
     71                rightBorderWidth = collapsedBorder->horizontal.right / 2;
     72        }
     73        return leftBorderWidth + rightBorderWidth;
    6874    };
    6975
     
    8086    // FIXME Check for box-sizing: border-box;
    8187    auto intrinsicWidthConstraints = constrainByMinMaxWidth(cellBox, computedIntrinsicWidthConstraints());
    82     intrinsicWidthConstraints.expand(fixedMarginBorderAndPadding());
     88    // Expand with border
     89    intrinsicWidthConstraints.expand(computedHorizontalBorder());
     90    // padding
     91    intrinsicWidthConstraints.expand(fixedValue(style.paddingLeft()).valueOr(0) + fixedValue(style.paddingRight()).valueOr(0));
     92    // and margin
     93    intrinsicWidthConstraints.expand(fixedValue(style.marginStart()).valueOr(0) + fixedValue(style.marginEnd()).valueOr(0));
    8394    return intrinsicWidthConstraints;
    8495}
Note: See TracChangeset for help on using the changeset viewer.