Title: [250240] trunk/Source/WebCore
Revision
250240
Author
za...@apple.com
Date
2019-09-23 10:21:22 -0700 (Mon, 23 Sep 2019)

Log Message

[LFC][IFC] Merge inline box compute functions
https://bugs.webkit.org/show_bug.cgi?id=202092
<rdar://problem/55607748>

Reviewed by Antti Koivisto.

Make InlineFormattingContext::layoutInFlowContent() logic simpler.

* layout/inlineformatting/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
(WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot):
(WebCore::Layout::InlineFormattingContext::computeHorizontalAndVerticalGeometry):
(WebCore::Layout::InlineFormattingContext::initializeMarginBorderAndPaddingForGenericInlineBox): Deleted.
(WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPaddingForInlineContainer): Deleted.
* layout/inlineformatting/InlineFormattingContext.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (250239 => 250240)


--- trunk/Source/WebCore/ChangeLog	2019-09-23 17:04:54 UTC (rev 250239)
+++ trunk/Source/WebCore/ChangeLog	2019-09-23 17:21:22 UTC (rev 250240)
@@ -1,3 +1,21 @@
+2019-09-23  Zalan Bujtas  <za...@apple.com>
+
+        [LFC][IFC] Merge inline box compute functions
+        https://bugs.webkit.org/show_bug.cgi?id=202092
+        <rdar://problem/55607748>
+
+        Reviewed by Antti Koivisto.
+
+        Make InlineFormattingContext::layoutInFlowContent() logic simpler.
+
+        * layout/inlineformatting/InlineFormattingContext.cpp:
+        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
+        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot):
+        (WebCore::Layout::InlineFormattingContext::computeHorizontalAndVerticalGeometry):
+        (WebCore::Layout::InlineFormattingContext::initializeMarginBorderAndPaddingForGenericInlineBox): Deleted.
+        (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPaddingForInlineContainer): Deleted.
+        * layout/inlineformatting/InlineFormattingContext.h:
+
 2019-09-23  David Kilzer  <ddkil...@apple.com>
 
         REGRESSION (r249855): Remove debug logging from WebCore::RenderImage::paintIntoRect()

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp (250239 => 250240)


--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp	2019-09-23 17:04:54 UTC (rev 250239)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp	2019-09-23 17:21:22 UTC (rev 250240)
@@ -78,14 +78,8 @@
     while (layoutBox) {
         if (layoutBox->establishesFormattingContext())
             layoutFormattingContextRoot(*layoutBox, usedHorizontalValues, usedVerticalValues);
-        else if (is<Container>(*layoutBox))
-            computeMarginBorderAndPaddingForInlineContainer(downcast<Container>(*layoutBox), usedHorizontalValues);
-        else if (layoutBox->isReplaced())
-            computeWidthAndHeightForReplacedInlineBox(*layoutBox, usedHorizontalValues, usedVerticalValues);
-        else {
-            ASSERT(layoutBox->isInlineLevelBox());
-            initializeMarginBorderAndPaddingForGenericInlineBox(*layoutBox);
-        }
+        else
+            computeHorizontalAndVerticalGeometry(*layoutBox, usedHorizontalValues, usedVerticalValues);
         layoutBox = nextInPreOrder(*layoutBox, root());
     }
 
@@ -98,6 +92,54 @@
     LOG_WITH_STREAM(FormattingContextLayout, stream << "[End] -> inline formatting context -> formatting root(" << &root() << ")");
 }
 
+void InlineFormattingContext::layoutFormattingContextRoot(const Box& formattingContextRoot, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues)
+{
+    ASSERT(formattingContextRoot.isFloatingPositioned() || formattingContextRoot.isInlineBlockBox());
+
+    computeBorderAndPadding(formattingContextRoot, usedHorizontalValues);
+    computeWidthAndMargin(formattingContextRoot, usedHorizontalValues);
+    // Swich over to the new formatting context (the one that the root creates).
+    if (is<Container>(formattingContextRoot)) {
+        auto& rootContainer = downcast<Container>(formattingContextRoot);
+        auto formattingContext = LayoutContext::createFormattingContext(rootContainer, layoutState());
+        formattingContext->layoutInFlowContent();
+        // Come back and finalize the root's height and margin.
+        computeHeightAndMargin(rootContainer, usedHorizontalValues, usedVerticalValues);
+        // Now that we computed the root's height, we can go back and layout the out-of-flow content.
+        formattingContext->layoutOutOfFlowContent();
+    } else
+        computeHeightAndMargin(formattingContextRoot, usedHorizontalValues, usedVerticalValues);
+}
+
+void InlineFormattingContext::computeHorizontalAndVerticalGeometry(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues)
+{
+    if (is<Container>(layoutBox)) {
+        // Inline containers (<span>) can't get sized/positioned yet. At this point we can only compute their margins, borders and paddings.
+        computeHorizontalMargin(layoutBox, usedHorizontalValues);
+        computeBorderAndPadding(layoutBox, usedHorizontalValues);
+        // Inline containers have 0 computed vertical margins.
+        formattingState().displayBox(layoutBox).setVerticalMargin({ { }, { } });
+        return;
+    }
+
+    if (layoutBox.isReplaced()) {
+        // Replaced elements (img, video) can be sized but not yet positioned.
+        computeBorderAndPadding(layoutBox, usedHorizontalValues);
+        computeWidthAndMargin(layoutBox, usedHorizontalValues);
+        computeHeightAndMargin(layoutBox, usedHorizontalValues, usedVerticalValues);
+        return;
+    }
+
+    // These are actual text boxes. No margins, borders or paddings.
+    ASSERT(layoutBox.isAnonymous() || layoutBox.isLineBreakBox());
+    auto& displayBox = formattingState().displayBox(layoutBox);
+
+    displayBox.setVerticalMargin({ { }, { } });
+    displayBox.setHorizontalMargin({ });
+    displayBox.setBorder({ { }, { } });
+    displayBox.setPadding({ });
+}
+
 FormattingContext::IntrinsicWidthConstraints InlineFormattingContext::computedIntrinsicWidthConstraints()
 {
     auto& layoutState = this->layoutState();
@@ -149,25 +191,6 @@
     return constraints;
 }
 
-void InlineFormattingContext::initializeMarginBorderAndPaddingForGenericInlineBox(const Box& layoutBox)
-{
-    ASSERT(layoutBox.isAnonymous() || layoutBox.isLineBreakBox());
-    auto& displayBox = formattingState().displayBox(layoutBox);
-
-    displayBox.setVerticalMargin({ { }, { } });
-    displayBox.setHorizontalMargin({ });
-    displayBox.setBorder({ { }, { } });
-    displayBox.setPadding({ });
-}
-
-void InlineFormattingContext::computeMarginBorderAndPaddingForInlineContainer(const Container& container, UsedHorizontalValues usedHorizontalValues)
-{
-    computeHorizontalMargin(container, usedHorizontalValues);
-    computeBorderAndPadding(container, usedHorizontalValues);
-    // Inline containers (<span>) have 0 vertical margins.
-    formattingState().displayBox(container).setVerticalMargin({ { }, { } });
-}
-
 void InlineFormattingContext::computeIntrinsicWidthForFormattingRoot(const Box& formattingRoot, UsedHorizontalValues usedHorizontalValues)
 {
     ASSERT(formattingRoot.establishesFormattingContext());
@@ -228,27 +251,6 @@
     displayBox.setVerticalMargin({ heightAndMargin.nonCollapsedMargin, { } });
 }
 
-void InlineFormattingContext::layoutFormattingContextRoot(const Box& root, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues)
-{
-    ASSERT(root.isFloatingPositioned() || root.isInlineBlockBox());
-
-    computeBorderAndPadding(root, usedHorizontalValues);
-    computeWidthAndMargin(root, usedHorizontalValues);
-    // This is similar to static positioning in block formatting context. We just need to initialize the top left position.
-    formattingState().displayBox(root).setTopLeft({ 0, 0 });
-    // Swich over to the new formatting context (the one that the root creates).
-    if (is<Container>(root)) {
-        auto& rootContainer = downcast<Container>(root);
-        auto formattingContext = LayoutContext::createFormattingContext(rootContainer, layoutState());
-        formattingContext->layoutInFlowContent();
-        // Come back and finalize the root's height and margin.
-        computeHeightAndMargin(rootContainer, usedHorizontalValues, usedVerticalValues);
-        // Now that we computed the root's height, we can go back and layout the out-of-flow content.
-        formattingContext->layoutOutOfFlowContent();
-    } else
-        computeHeightAndMargin(root, usedHorizontalValues, usedVerticalValues);
-}
-
 void InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues)
 {
     ASSERT(!layoutBox.isContainer());

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h (250239 => 250240)


--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h	2019-09-23 17:04:54 UTC (rev 250239)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h	2019-09-23 17:21:22 UTC (rev 250240)
@@ -102,10 +102,11 @@
     InlineFormattingContext::Geometry geometry() const { return Geometry(*this); }
 
     void layoutFormattingContextRoot(const Box&, UsedHorizontalValues, UsedVerticalValues);
-    void computeMarginBorderAndPaddingForInlineContainer(const Container&, UsedHorizontalValues);
-    void initializeMarginBorderAndPaddingForGenericInlineBox(const Box&);
+    void computeHorizontalAndVerticalGeometry(const Box&, UsedHorizontalValues, UsedVerticalValues);
+
     void computeIntrinsicWidthForFormattingRoot(const Box&, UsedHorizontalValues);
     void computeWidthAndHeightForReplacedInlineBox(const Box&, UsedHorizontalValues, UsedVerticalValues);
+
     void computeHorizontalMargin(const Box&, UsedHorizontalValues);
     void computeHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues);
     void computeWidthAndMargin(const Box&, UsedHorizontalValues);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to