Title: [258138] trunk
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&);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to