Title: [237454] trunk/Source/WebCore
Revision
237454
Author
[email protected]
Date
2018-10-26 07:36:30 -0700 (Fri, 26 Oct 2018)

Log Message

[LFC][IFC] Compute float box size and position
https://bugs.webkit.org/show_bug.cgi?id=190938

Reviewed by Antti Koivisto.

* layout/inlineformatting/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::computeWidthAndHeight const):
(WebCore::Layout::InlineFormattingContext::computeFloatPosition const):
* layout/inlineformatting/InlineFormattingContext.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (237453 => 237454)


--- trunk/Source/WebCore/ChangeLog	2018-10-26 14:34:54 UTC (rev 237453)
+++ trunk/Source/WebCore/ChangeLog	2018-10-26 14:36:30 UTC (rev 237454)
@@ -1,5 +1,17 @@
 2018-10-26  Zalan Bujtas  <[email protected]>
 
+        [LFC][IFC] Compute float box size and position
+        https://bugs.webkit.org/show_bug.cgi?id=190938
+
+        Reviewed by Antti Koivisto.
+
+        * layout/inlineformatting/InlineFormattingContext.cpp:
+        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeight const):
+        (WebCore::Layout::InlineFormattingContext::computeFloatPosition const):
+        * layout/inlineformatting/InlineFormattingContext.h:
+
+2018-10-26  Zalan Bujtas  <[email protected]>
+
         [LFC][IFC] Add line logical top and bottom
         https://bugs.webkit.org/show_bug.cgi?id=190934
 

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp (237453 => 237454)


--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp	2018-10-26 14:34:54 UTC (rev 237453)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp	2018-10-26 14:36:30 UTC (rev 237454)
@@ -159,7 +159,7 @@
     line.close(Line::LastLine::Yes);
 }
 
-void InlineFormattingContext::computeWidthAndHeight(const LayoutContext& layoutContext, const Box& layoutBox) const
+void InlineFormattingContext::computeWidthAndHeight(LayoutContext& layoutContext, const Box& layoutBox) const
 {
     if (is<InlineBox>(layoutBox) && downcast<InlineBox>(layoutBox).hasTextContent()) {
         // Text content width is computed during text run generation. -It does not make any sense to measure unprocessed text here, since it will likely be
@@ -167,37 +167,47 @@
         return;
     }
 
-    if (layoutBox.isFloatingPositioned()) {
-        ASSERT_NOT_IMPLEMENTED_YET();
-        return;
-    }
-
     if (layoutBox.isInlineBlockBox()) {
         ASSERT_NOT_IMPLEMENTED_YET();
         return;
     }
 
-    if (layoutBox.replaced()) {
-        computeBorderAndPadding(layoutContext, layoutBox);
+    computeBorderAndPadding(layoutContext, layoutBox);
 
-        auto& displayBox = layoutContext.displayBoxForLayoutBox(layoutBox);
+    WidthAndMargin widthAndMargin;
+    HeightAndMargin heightAndMargin;
 
-        auto widthAndMargin = Geometry::inlineReplacedWidthAndMargin(layoutContext, layoutBox);
-        displayBox.setContentBoxWidth(widthAndMargin.width);
-        displayBox.setHorizontalMargin(widthAndMargin.margin);
-        displayBox.setHorizontalNonComputedMargin(widthAndMargin.nonComputedMargin);
+    if (layoutBox.isFloatingPositioned()) {
+        widthAndMargin = Geometry::floatingWidthAndMargin(layoutContext, *this, layoutBox);
+        heightAndMargin = Geometry::floatingHeightAndMargin(layoutContext, layoutBox);
+    } else if (layoutBox.replaced()) {
+        widthAndMargin = Geometry::inlineReplacedWidthAndMargin(layoutContext, layoutBox);
+        heightAndMargin = Geometry::inlineReplacedHeightAndMargin(layoutContext, layoutBox);
+    } else
+        ASSERT_NOT_REACHED();
 
-        auto heightAndMargin = Geometry::inlineReplacedHeightAndMargin(layoutContext, layoutBox);
-        displayBox.setContentBoxHeight(heightAndMargin.height);
-        displayBox.setVerticalNonCollapsedMargin(heightAndMargin.margin);
-        displayBox.setVerticalMargin(heightAndMargin.collapsedMargin.value_or(heightAndMargin.margin));
-        return;
-    }
+    auto& displayBox = layoutContext.displayBoxForLayoutBox(layoutBox);
+    displayBox.setContentBoxWidth(widthAndMargin.width);
+    displayBox.setHorizontalMargin(widthAndMargin.margin);
+    displayBox.setHorizontalNonComputedMargin(widthAndMargin.nonComputedMargin);
 
-    ASSERT_NOT_REACHED();
+    displayBox.setContentBoxHeight(heightAndMargin.height);
+    displayBox.setVerticalNonCollapsedMargin(heightAndMargin.margin);
+    displayBox.setVerticalMargin(heightAndMargin.collapsedMargin.value_or(heightAndMargin.margin));
     return;
 }
 
+void InlineFormattingContext::computeFloatPosition(const LayoutContext& layoutContext, const FloatingContext& floatingContext, Line& line, const Box& floatBox) const
+{
+    ASSERT(layoutContext.hasDisplayBox(floatBox));
+    auto& displayBox = layoutContext.displayBoxForLayoutBox(floatBox);
+
+    // Set static position first.
+    displayBox.setTopLeft({ line.contentLogicalRight(), line.logicalTop() });
+    // Float it.
+    displayBox.setTopLeft(floatingContext.positionForFloat(floatBox));
+}
+
 void InlineFormattingContext::computeStaticPosition(const LayoutContext&, const Box&) const
 {
 }

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h (237453 => 237454)


--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h	2018-10-26 14:34:54 UTC (rev 237453)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h	2018-10-26 14:36:30 UTC (rev 237454)
@@ -92,7 +92,8 @@
     void layoutInlineContent(const LayoutContext&, InlineFormattingState&, const InlineRunProvider&) const;
     void initializeNewLine(const LayoutContext&, Line&) const;
 
-    void computeWidthAndHeight(const LayoutContext&, const Box&) const;
+    void computeWidthAndHeight(LayoutContext&, const Box&) const;
+    void computeFloatPosition(const LayoutContext&, const FloatingContext&, Line&, const Box&) const;
     void computeStaticPosition(const LayoutContext&, const Box&) const override;
     void computeInFlowPositionedPosition(const LayoutContext&, const Box&) const override;
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to