- Revision
- 258138
- Author
- za...@apple.com
- Date
- 2020-03-09 07:51:29 -0700 (Mon, 09 Mar 2020)
Log Message
[LFC][IFC] Do not floor the computed intrinsic width values
https://bugs.webkit.org/show_bug.cgi?id=208796
<rdar://problem/60209522>
Reviewed by Antti Koivisto.
Source/WebCore:
Floored intrinsic values could lead to unexpected line breaks.
(This happens because IFC uses float currently, while other layout systems use LayoutUnit.)
Test: fast/layoutformattingcontext/absolute-positioned-simple-table3.html
* layout/LayoutUnits.h:
(WebCore::Layout::ceiledLayoutUnit):
* layout/inlineformatting/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
(WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthForConstraint const):
* layout/inlineformatting/InlineFormattingContext.h:
LayoutTests:
* fast/layoutformattingcontext/absolute-positioned-simple-table3-expected.html: Added.
* fast/layoutformattingcontext/absolute-positioned-simple-table3.html: Added.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (258137 => 258138)
--- trunk/LayoutTests/ChangeLog 2020-03-09 14:36:28 UTC (rev 258137)
+++ trunk/LayoutTests/ChangeLog 2020-03-09 14:51:29 UTC (rev 258138)
@@ -1,3 +1,14 @@
+2020-03-09 Zalan Bujtas <za...@apple.com>
+
+ [LFC][IFC] Do not floor the computed intrinsic width values
+ https://bugs.webkit.org/show_bug.cgi?id=208796
+ <rdar://problem/60209522>
+
+ Reviewed by Antti Koivisto.
+
+ * fast/layoutformattingcontext/absolute-positioned-simple-table3-expected.html: Added.
+ * fast/layoutformattingcontext/absolute-positioned-simple-table3.html: Added.
+
2020-03-08 Lauro Moura <lmo...@igalia.com>
[WPE] Mark some tests as crashing
Added: trunk/LayoutTests/fast/layoutformattingcontext/absolute-positioned-simple-table3-expected.html (0 => 258138)
--- trunk/LayoutTests/fast/layoutformattingcontext/absolute-positioned-simple-table3-expected.html (rev 0)
+++ trunk/LayoutTests/fast/layoutformattingcontext/absolute-positioned-simple-table3-expected.html 2020-03-09 14:51:29 UTC (rev 258138)
@@ -0,0 +1,7 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:LayoutFormattingContextEnabled=true internal:LayoutFormattingContextIntegrationEnabled=false ] -->
+<style>
+div {
+ padding: 45px;
+}
+</style>
+<div>text content text content</div>
Added: trunk/LayoutTests/fast/layoutformattingcontext/absolute-positioned-simple-table3.html (0 => 258138)
--- trunk/LayoutTests/fast/layoutformattingcontext/absolute-positioned-simple-table3.html (rev 0)
+++ trunk/LayoutTests/fast/layoutformattingcontext/absolute-positioned-simple-table3.html 2020-03-09 14:51:29 UTC (rev 258138)
@@ -0,0 +1,9 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:LayoutFormattingContextEnabled=true internal:LayoutFormattingContextIntegrationEnabled=false ] -->
+<style>
+table {
+ position: absolute;
+ top: 50px;
+ left: 50px;
+}
+</style>
+<table><tr><td>text content</td><td>text content</td></tr></table>
Modified: trunk/Source/WebCore/ChangeLog (258137 => 258138)
--- trunk/Source/WebCore/ChangeLog 2020-03-09 14:36:28 UTC (rev 258137)
+++ trunk/Source/WebCore/ChangeLog 2020-03-09 14:51:29 UTC (rev 258138)
@@ -1,5 +1,25 @@
2020-03-09 Zalan Bujtas <za...@apple.com>
+ [LFC][IFC] Do not floor the computed intrinsic width values
+ https://bugs.webkit.org/show_bug.cgi?id=208796
+ <rdar://problem/60209522>
+
+ Reviewed by Antti Koivisto.
+
+ Floored intrinsic values could lead to unexpected line breaks.
+ (This happens because IFC uses float currently, while other layout systems use LayoutUnit.)
+
+ Test: fast/layoutformattingcontext/absolute-positioned-simple-table3.html
+
+ * layout/LayoutUnits.h:
+ (WebCore::Layout::ceiledLayoutUnit):
+ * layout/inlineformatting/InlineFormattingContext.cpp:
+ (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
+ (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthForConstraint const):
+ * layout/inlineformatting/InlineFormattingContext.h:
+
+2020-03-09 Zalan Bujtas <za...@apple.com>
+
[LFC][TFC] Do no try to distribute extra space in case of shrink to fit (max preferred width).
https://bugs.webkit.org/show_bug.cgi?id=208795
<rdar://problem/60208329>
Modified: trunk/Source/WebCore/layout/LayoutUnits.h (258137 => 258138)
--- trunk/Source/WebCore/layout/LayoutUnits.h 2020-03-09 14:36:28 UTC (rev 258137)
+++ trunk/Source/WebCore/layout/LayoutUnits.h 2020-03-09 14:51:29 UTC (rev 258138)
@@ -185,6 +185,11 @@
return LayoutUnit { value };
}
+inline LayoutUnit ceiledLayoutUnit(InlineLayoutUnit value)
+{
+ return LayoutUnit::fromFloatCeil(value);
+}
+
inline LayoutPoint toLayoutPoint(const InlineLayoutPoint& point)
{
return LayoutPoint { point };
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp (258137 => 258138)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp 2020-03-09 14:36:28 UTC (rev 258137)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp 2020-03-09 14:51:29 UTC (rev 258138)
@@ -222,15 +222,17 @@
auto contentWidth = (availableWidth ? intrinsicWidths->maximum : intrinsicWidths->minimum) - displayBox.horizontalMarginBorderAndPadding();
displayBox.setContentBoxWidth(contentWidth);
}
- return computedIntrinsicWidthForConstraint({ 0_lu, toLayoutUnit(availableWidth) });
+ return computedIntrinsicWidthForConstraint(availableWidth);
};
- auto constraints = geometry().constrainByMinMaxWidth(root(), { toLayoutUnit(maximumLineWidth(0)), toLayoutUnit(maximumLineWidth(maxInlineLayoutUnit())) });
+ auto minimumContentWidth = ceiledLayoutUnit(maximumLineWidth(0));
+ auto maximumContentWidth = ceiledLayoutUnit(maximumLineWidth(maxInlineLayoutUnit()));
+ auto constraints = geometry().constrainByMinMaxWidth(root(), { minimumContentWidth, maximumContentWidth });
formattingState().setIntrinsicWidthConstraints(constraints);
return constraints;
}
-InlineLayoutUnit InlineFormattingContext::computedIntrinsicWidthForConstraint(const HorizontalConstraints& horizontalConstraints) const
+InlineLayoutUnit InlineFormattingContext::computedIntrinsicWidthForConstraint(InlineLayoutUnit availableWidth) const
{
auto& inlineItems = formattingState().inlineItems();
auto maximumLineWidth = InlineLayoutUnit { };
@@ -239,7 +241,7 @@
auto layoutRange = LineLayoutContext::InlineItemRange { 0 , inlineItems.size() };
while (!layoutRange.isEmpty()) {
// Only the horiztonal available width is constrained when computing intrinsic width.
- lineBuilder.initialize(LineBuilder::Constraints { { }, horizontalConstraints.logicalWidth, false, { } });
+ lineBuilder.initialize(LineBuilder::Constraints { { }, availableWidth, false, { } });
auto lineContent = lineLayoutContext.layoutLine(lineBuilder, layoutRange, { });
layoutRange.start = *lineContent.trailingInlineItemIndex + 1;
// FIXME: Use line logical left and right to take floats into account.
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h (258137 => 258138)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h 2020-03-09 14:36:28 UTC (rev 258137)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h 2020-03-09 14:51:29 UTC (rev 258138)
@@ -80,7 +80,7 @@
void lineLayout(InlineItems&, LineLayoutContext::InlineItemRange, const HorizontalConstraints&, const VerticalConstraints&);
void computeIntrinsicWidthForFormattingRoot(const Box&);
- InlineLayoutUnit computedIntrinsicWidthForConstraint(const HorizontalConstraints&) const;
+ InlineLayoutUnit computedIntrinsicWidthForConstraint(InlineLayoutUnit availableWidth) const;
void computeHorizontalMargin(const Box&, const HorizontalConstraints&);
void computeHeightAndMargin(const Box&, const HorizontalConstraints&);