Title: [261980] trunk
- Revision
- 261980
- Author
- [email protected]
- Date
- 2020-05-20 18:58:33 -0700 (Wed, 20 May 2020)
Log 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.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (261979 => 261980)
--- trunk/LayoutTests/ChangeLog 2020-05-21 01:44:12 UTC (rev 261979)
+++ trunk/LayoutTests/ChangeLog 2020-05-21 01:58:33 UTC (rev 261980)
@@ -1,5 +1,15 @@
2020-05-20 Zalan Bujtas <[email protected]>
+ [LFC][TFC] Preferred width computation should take border collapsing into account
+ https://bugs.webkit.org/show_bug.cgi?id=212141
+
+ Reviewed by Antti Koivisto.
+
+ * fast/layoutformattingcontext/table-simple-border-collapse2-expected.html: Added.
+ * fast/layoutformattingcontext/table-simple-border-collapse2.html: Added.
+
+2020-05-20 Zalan Bujtas <[email protected]>
+
Repaint issues when the login field collapses on music.apple.com
https://bugs.webkit.org/show_bug.cgi?id=212101
<rdar://problem/62874369>
Added: trunk/LayoutTests/fast/layoutformattingcontext/table-simple-border-collapse2-expected.html (0 => 261980)
--- trunk/LayoutTests/fast/layoutformattingcontext/table-simple-border-collapse2-expected.html (rev 0)
+++ trunk/LayoutTests/fast/layoutformattingcontext/table-simple-border-collapse2-expected.html 2020-05-21 01:58:33 UTC (rev 261980)
@@ -0,0 +1,9 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:LayoutFormattingContextEnabled=true internal:LayoutFormattingContextIntegrationEnabled=false ] -->
+<style>
+div {
+ height: 10px;
+ width: 10px;
+ border: 20px solid green;
+}
+</style>
+<div></div>
Added: trunk/LayoutTests/fast/layoutformattingcontext/table-simple-border-collapse2.html (0 => 261980)
--- trunk/LayoutTests/fast/layoutformattingcontext/table-simple-border-collapse2.html (rev 0)
+++ trunk/LayoutTests/fast/layoutformattingcontext/table-simple-border-collapse2.html 2020-05-21 01:58:33 UTC (rev 261980)
@@ -0,0 +1,15 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:LayoutFormattingContextEnabled=true internal:LayoutFormattingContextIntegrationEnabled=false ] -->
+<style>
+table {
+ border-collapse: collapse;
+ border: 20px solid green;
+}
+
+td {
+ width: 10px;
+ height: 10px;
+ border: 1px solid green;
+ padding: 0px;
+}
+</style>
+<table><tr><td></td></tr></tbody></table>
Modified: trunk/Source/WebCore/ChangeLog (261979 => 261980)
--- trunk/Source/WebCore/ChangeLog 2020-05-21 01:44:12 UTC (rev 261979)
+++ trunk/Source/WebCore/ChangeLog 2020-05-21 01:58:33 UTC (rev 261980)
@@ -1,5 +1,21 @@
2020-05-20 Zalan Bujtas <[email protected]>
+ [LFC][TFC] Preferred width computation should take border collapsing into account
+ https://bugs.webkit.org/show_bug.cgi?id=212141
+
+ Reviewed by Antti Koivisto.
+
+ 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):
+
+2020-05-20 Zalan Bujtas <[email protected]>
+
Repaint issues when the login field collapses on music.apple.com
https://bugs.webkit.org/show_bug.cgi?id=212101
<rdar://problem/62874369>
Modified: trunk/Source/WebCore/layout/tableformatting/TableFormattingContext.cpp (261979 => 261980)
--- trunk/Source/WebCore/layout/tableformatting/TableFormattingContext.cpp 2020-05-21 01:44:12 UTC (rev 261979)
+++ trunk/Source/WebCore/layout/tableformatting/TableFormattingContext.cpp 2020-05-21 01:58:33 UTC (rev 261980)
@@ -321,7 +321,7 @@
auto intrinsicWidth = formattingState.intrinsicWidthConstraintsForBox(cellBox);
if (!intrinsicWidth) {
- intrinsicWidth = geometry().intrinsicWidthConstraintsForCell(cellBox);
+ intrinsicWidth = geometry().intrinsicWidthConstraintsForCell(*cell);
formattingState.setIntrinsicWidthConstraintsForBox(cellBox, *intrinsicWidth);
}
// Spanner cells put their intrinsic widths on the initial slots.
Modified: trunk/Source/WebCore/layout/tableformatting/TableFormattingContext.h (261979 => 261980)
--- trunk/Source/WebCore/layout/tableformatting/TableFormattingContext.h 2020-05-21 01:44:12 UTC (rev 261979)
+++ trunk/Source/WebCore/layout/tableformatting/TableFormattingContext.h 2020-05-21 01:58:33 UTC (rev 261980)
@@ -67,16 +67,17 @@
public:
LayoutUnit cellHeigh(const ContainerBox&) const;
Optional<LayoutUnit> computedColumnWidth(const ContainerBox& columnBox) const;
- FormattingContext::IntrinsicWidthConstraints intrinsicWidthConstraintsForCell(const ContainerBox& cellBox);
+ FormattingContext::IntrinsicWidthConstraints intrinsicWidthConstraintsForCell(const TableGrid::Cell&);
InlineLayoutUnit usedBaselineForCell(const ContainerBox& cellBox);
private:
friend class TableFormattingContext;
- Geometry(const TableFormattingContext&);
+ Geometry(const TableFormattingContext&, const TableGrid&);
const TableFormattingContext& formattingContext() const { return downcast<TableFormattingContext>(FormattingContext::Geometry::formattingContext()); }
+ const TableGrid& m_grid;
};
- TableFormattingContext::Geometry geometry() const { return Geometry(*this); }
+ TableFormattingContext::Geometry geometry() const { return Geometry(*this, formattingState().tableGrid()); }
TableFormattingContext::TableLayout tableLayout() const { return TableLayout(*this, formattingState().tableGrid()); }
IntrinsicWidthConstraints computedIntrinsicWidthConstraints() override;
@@ -92,8 +93,9 @@
TableFormattingState& formattingState() { return downcast<TableFormattingState>(FormattingContext::formattingState()); }
};
-inline TableFormattingContext::Geometry::Geometry(const TableFormattingContext& tableFormattingContext)
+inline TableFormattingContext::Geometry::Geometry(const TableFormattingContext& tableFormattingContext, const TableGrid& grid)
: FormattingContext::Geometry(tableFormattingContext)
+ , m_grid(grid)
{
}
Modified: trunk/Source/WebCore/layout/tableformatting/TableFormattingContextGeometry.cpp (261979 => 261980)
--- trunk/Source/WebCore/layout/tableformatting/TableFormattingContextGeometry.cpp 2020-05-21 01:44:12 UTC (rev 261979)
+++ trunk/Source/WebCore/layout/tableformatting/TableFormattingContextGeometry.cpp 2020-05-21 01:58:33 UTC (rev 261980)
@@ -55,16 +55,22 @@
return columnBox.columnWidth();
}
-FormattingContext::IntrinsicWidthConstraints TableFormattingContext::Geometry::intrinsicWidthConstraintsForCell(const ContainerBox& cellBox)
+FormattingContext::IntrinsicWidthConstraints TableFormattingContext::Geometry::intrinsicWidthConstraintsForCell(const TableGrid::Cell& cell)
{
- auto fixedMarginBorderAndPadding = [&] {
- auto& style = cellBox.style();
- return fixedValue(style.marginStart()).valueOr(0)
- + LayoutUnit { style.borderLeftWidth() }
- + fixedValue(style.paddingLeft()).valueOr(0)
- + fixedValue(style.paddingRight()).valueOr(0)
- + LayoutUnit { style.borderRightWidth() }
- + fixedValue(style.marginEnd()).valueOr(0);
+ auto& cellBox = cell.box();
+ auto& style = cellBox.style();
+
+ auto computedHorizontalBorder = [&] {
+ auto leftBorderWidth = LayoutUnit { style.borderLeftWidth() };
+ auto rightBorderWidth = LayoutUnit { style.borderRightWidth() };
+ if (auto collapsedBorder = m_grid.collapsedBorder()) {
+ auto cellPosition = cell.position();
+ if (!cellPosition.column)
+ leftBorderWidth = collapsedBorder->horizontal.left / 2;
+ if (cellPosition.column == m_grid.columns().size() - 1)
+ rightBorderWidth = collapsedBorder->horizontal.right / 2;
+ }
+ return leftBorderWidth + rightBorderWidth;
};
auto computedIntrinsicWidthConstraints = [&] {
@@ -79,7 +85,12 @@
};
// FIXME Check for box-sizing: border-box;
auto intrinsicWidthConstraints = constrainByMinMaxWidth(cellBox, computedIntrinsicWidthConstraints());
- intrinsicWidthConstraints.expand(fixedMarginBorderAndPadding());
+ // Expand with border
+ intrinsicWidthConstraints.expand(computedHorizontalBorder());
+ // padding
+ intrinsicWidthConstraints.expand(fixedValue(style.paddingLeft()).valueOr(0) + fixedValue(style.paddingRight()).valueOr(0));
+ // and margin
+ intrinsicWidthConstraints.expand(fixedValue(style.marginStart()).valueOr(0) + fixedValue(style.marginEnd()).valueOr(0));
return intrinsicWidthConstraints;
}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes