Title: [241249] trunk/Source/WebCore
Revision
241249
Author
[email protected]
Date
2019-02-10 08:53:41 -0800 (Sun, 10 Feb 2019)

Log Message

[LFC][IFC] Add intrinsic width support for replaced boxes
https://bugs.webkit.org/show_bug.cgi?id=194478

Reviewed by Antti Koivisto.

* layout/inlineformatting/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::layout const):
(WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const):
(WebCore::Layout::InlineFormattingContext::computeMargin const):
(WebCore::Layout::InlineFormattingContext::computeBorderAndPadding const):
(WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
(WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox const):
(WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPadding const): Deleted.
* layout/inlineformatting/InlineFormattingContext.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (241248 => 241249)


--- trunk/Source/WebCore/ChangeLog	2019-02-10 14:38:26 UTC (rev 241248)
+++ trunk/Source/WebCore/ChangeLog	2019-02-10 16:53:41 UTC (rev 241249)
@@ -1,3 +1,20 @@
+2019-02-10  Zalan Bujtas  <[email protected]>
+
+        [LFC][IFC] Add intrinsic width support for replaced boxes
+        https://bugs.webkit.org/show_bug.cgi?id=194478
+
+        Reviewed by Antti Koivisto.
+
+        * layout/inlineformatting/InlineFormattingContext.cpp:
+        (WebCore::Layout::InlineFormattingContext::layout const):
+        (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const):
+        (WebCore::Layout::InlineFormattingContext::computeMargin const):
+        (WebCore::Layout::InlineFormattingContext::computeBorderAndPadding const):
+        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
+        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox const):
+        (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPadding const): Deleted.
+        * layout/inlineformatting/InlineFormattingContext.h:
+
 2019-02-10  Alicia Boya GarcĂ­a  <[email protected]>
 
         [MSE][GStreamer] Add missing return type to lambda

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp (241248 => 241249)


--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp	2019-02-10 14:38:26 UTC (rev 241248)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp	2019-02-10 16:53:41 UTC (rev 241249)
@@ -77,9 +77,11 @@
     while (layoutBox) {
         if (layoutBox->establishesFormattingContext())
             layoutFormattingContextRoot(*layoutBox, usedValues);
-        else if (is<Container>(*layoutBox))
-            computeMarginBorderAndPadding(downcast<InlineContainer>(*layoutBox), usedValues);
-        else if (layoutBox->isReplaced())
+        else if (is<Container>(*layoutBox)) {
+            auto& inlineContainer = downcast<InlineContainer>(*layoutBox);
+            computeMargin(inlineContainer, usedValues);
+            computeBorderAndPadding(inlineContainer, usedValues);
+        } else if (layoutBox->isReplaced())
             computeWidthAndHeightForReplacedInlineBox(*layoutBox, usedValues);
         layoutBox = nextInPreOrder(*layoutBox, root);
     }
@@ -101,10 +103,17 @@
     auto usedValues = UsedHorizontalValues { { }, { }, { } };
     auto* layoutBox = root.firstInFlowOrFloatingChild();
     while (layoutBox) {
-        if (layoutBox->establishesFormattingContext() || layoutBox->isReplaced())
+        if (layoutBox->establishesFormattingContext())
             ASSERT_NOT_IMPLEMENTED_YET();
-        else if (is<Container>(*layoutBox))
-            computeMarginBorderAndPadding(downcast<InlineContainer>(*layoutBox), usedValues);
+        else if (layoutBox->isReplaced() || is<Container>(*layoutBox)) {
+            computeBorderAndPadding(*layoutBox, usedValues);
+            if (layoutBox->isReplaced())
+                computeWidthAndMargin(*layoutBox, usedValues);
+            else {
+                // Simple inline container with no intrinsic width <span>.
+                computeMargin(downcast<InlineContainer>(*layoutBox), usedValues);
+            }
+        }
         layoutBox = nextInPreOrder(*layoutBox, root);
     }
 
@@ -130,20 +139,12 @@
     return instrinsicWidthConstraints;
 }
 
-void InlineFormattingContext::computeBorderAndPadding(const Box& layoutBox, UsedHorizontalValues usedValues) const
+void InlineFormattingContext::computeMargin(const InlineContainer& inlineContainer, UsedHorizontalValues usedValues) const
 {
-    auto& displayBox = layoutState().displayBoxForLayoutBox(layoutBox);
-    displayBox.setBorder(Geometry::computedBorder(layoutBox));
-    displayBox.setPadding(Geometry::computedPadding(layoutBox, usedValues));
-}
-
-void InlineFormattingContext::computeMarginBorderAndPadding(const InlineContainer& inlineContainer, UsedHorizontalValues usedValues) const
-{
     // Non-replaced, non-formatting root containers (<span></span>) don't have width property -> non width computation. 
     ASSERT(!inlineContainer.replaced());
     ASSERT(!inlineContainer.establishesFormattingContext());
 
-    computeBorderAndPadding(inlineContainer, usedValues);
     auto& displayBox = layoutState().displayBoxForLayoutBox(inlineContainer);
     auto computedHorizontalMargin = Geometry::computedHorizontalMargin(inlineContainer, usedValues);
     displayBox.setHorizontalComputedMargin(computedHorizontalMargin);
@@ -150,6 +151,13 @@
     displayBox.setHorizontalMargin({ computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) });
 }
 
+void InlineFormattingContext::computeBorderAndPadding(const Box& layoutBox, UsedHorizontalValues usedValues) const
+{
+    auto& displayBox = layoutState().displayBoxForLayoutBox(layoutBox);
+    displayBox.setBorder(Geometry::computedBorder(layoutBox));
+    displayBox.setPadding(Geometry::computedPadding(layoutBox, usedValues));
+}
+
 void InlineFormattingContext::computeWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedValues) const
 {
     auto& layoutState = this->layoutState();
@@ -191,6 +199,7 @@
 void InlineFormattingContext::layoutFormattingContextRoot(const Box& root, UsedHorizontalValues usedValues) const
 {
     ASSERT(root.isFloatingPositioned() || root.isInlineBlockBox());
+    ASSERT(usedValues.containingBlockWidth);
 
     computeBorderAndPadding(root, usedValues);
     computeWidthAndMargin(root, usedValues);
@@ -208,6 +217,7 @@
     ASSERT(!layoutBox.isContainer());
     ASSERT(!layoutBox.establishesFormattingContext());
     ASSERT(layoutBox.replaced());
+    ASSERT(usedValues.containingBlockWidth);
 
     computeBorderAndPadding(layoutBox, usedValues);
     computeWidthAndMargin(layoutBox, usedValues);

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h (241248 => 241249)


--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h	2019-02-10 14:38:26 UTC (rev 241248)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h	2019-02-10 16:53:41 UTC (rev 241249)
@@ -87,8 +87,8 @@
 
     void layoutFormattingContextRoot(const Box&, UsedHorizontalValues) const;
     void computeWidthAndHeightForReplacedInlineBox(const Box&, UsedHorizontalValues) const;
+    void computeMargin(const InlineContainer&, UsedHorizontalValues) const;
     void computeBorderAndPadding(const Box&, UsedHorizontalValues) const;
-    void computeMarginBorderAndPadding(const InlineContainer&, UsedHorizontalValues) const;
     void computeHeightAndMargin(const Box&) const;
     void computeWidthAndMargin(const Box&, UsedHorizontalValues) const;
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to