Title: [232152] trunk/Source/WebCore
Revision
232152
Author
[email protected]
Date
2018-05-24 08:01:11 -0700 (Thu, 24 May 2018)

Log Message

[LFC] Implement FormattingContext::placeInFlowPositionedChildren
https://bugs.webkit.org/show_bug.cgi?id=185934

Reviewed by Antti Koivisto.

* layout/FormattingContext.cpp:
(WebCore::Layout::FormattingContext::computeInFlowPositionedPosition const):
(WebCore::Layout::FormattingContext::placeInFlowPositionedChildren const):
* layout/FormattingContext.h:
* layout/blockformatting/BlockFormattingContext.cpp:
(WebCore::Layout::BlockFormattingContext::layout const):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (232151 => 232152)


--- trunk/Source/WebCore/ChangeLog	2018-05-24 09:41:17 UTC (rev 232151)
+++ trunk/Source/WebCore/ChangeLog	2018-05-24 15:01:11 UTC (rev 232152)
@@ -1,3 +1,17 @@
+2018-05-24  Zalan Bujtas  <[email protected]>
+
+        [LFC] Implement FormattingContext::placeInFlowPositionedChildren
+        https://bugs.webkit.org/show_bug.cgi?id=185934
+
+        Reviewed by Antti Koivisto.
+
+        * layout/FormattingContext.cpp:
+        (WebCore::Layout::FormattingContext::computeInFlowPositionedPosition const):
+        (WebCore::Layout::FormattingContext::placeInFlowPositionedChildren const):
+        * layout/FormattingContext.h:
+        * layout/blockformatting/BlockFormattingContext.cpp:
+        (WebCore::Layout::BlockFormattingContext::layout const):
+
 2018-05-23  Joseph Pecoraro  <[email protected]>
 
         Use ASCIILiteral with applicationBundleIsEqualTo in RuntimeApplicationChecksCocoa

Modified: trunk/Source/WebCore/layout/FormattingContext.cpp (232151 => 232152)


--- trunk/Source/WebCore/layout/FormattingContext.cpp	2018-05-24 09:41:17 UTC (rev 232151)
+++ trunk/Source/WebCore/layout/FormattingContext.cpp	2018-05-24 15:01:11 UTC (rev 232152)
@@ -53,7 +53,7 @@
 {
 }
 
-void FormattingContext::computeInFlowPositionedPosition(const Box&, Display::Box&) const
+void FormattingContext::computeInFlowPositionedPosition(LayoutContext&, const Box&, Display::Box&) const
 {
 }
 
@@ -155,8 +155,17 @@
     return 0;
 }
 
-void FormattingContext::placeInFlowPositionedChildren(const Container&) const
+void FormattingContext::placeInFlowPositionedChildren(LayoutContext& layoutContext, const Container& container) const
 {
+    // If this container also establishes a formatting context, then positioning already has happend in that the formatting context.
+    if (container.establishesFormattingContext() && &container != &root())
+        return;
+
+    for (auto& layoutBox : childrenOfType<Box>(container)) {
+        if (!layoutBox.isInFlowPositioned())
+            continue;
+        computeInFlowPositionedPosition(layoutContext, layoutBox, *layoutContext.displayBoxForLayoutBox(layoutBox));
+    }
 }
 
 void FormattingContext::layoutOutOfFlowDescendants(LayoutContext& layoutContext) const

Modified: trunk/Source/WebCore/layout/FormattingContext.h (232151 => 232152)


--- trunk/Source/WebCore/layout/FormattingContext.h	2018-05-24 09:41:17 UTC (rev 232151)
+++ trunk/Source/WebCore/layout/FormattingContext.h	2018-05-24 15:01:11 UTC (rev 232152)
@@ -67,7 +67,7 @@
     const Box& root() const { return *m_root; }
 
     virtual void computeStaticPosition(LayoutContext&, const Box&, Display::Box&) const;
-    virtual void computeInFlowPositionedPosition(const Box&, Display::Box&) const;
+    virtual void computeInFlowPositionedPosition(LayoutContext&, const Box&, Display::Box&) const;
     virtual void computeOutOfFlowPosition(LayoutContext&, const Box&, Display::Box&) const;
 
     virtual void computeWidth(LayoutContext&, const Box&, Display::Box&) const;
@@ -86,7 +86,7 @@
     virtual LayoutUnit marginBottom(const Box&) const;
     virtual LayoutUnit marginRight(const Box&) const;
 
-    void placeInFlowPositionedChildren(const Container&) const;
+    void placeInFlowPositionedChildren(LayoutContext&, const Container&) const;
     void layoutOutOfFlowDescendants(LayoutContext&s) const;
 
 #ifndef NDEBUG

Modified: trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp (232151 => 232152)


--- trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp	2018-05-24 09:41:17 UTC (rev 232151)
+++ trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp	2018-05-24 15:01:11 UTC (rev 232152)
@@ -101,7 +101,7 @@
                 continue;
             auto& container = downcast<Container>(layoutBox);
             // Move in-flow positioned children to their final position.
-            placeInFlowPositionedChildren(container);
+            placeInFlowPositionedChildren(layoutContext, container);
             if (auto* nextSibling = container.nextInFlowOrFloatingSibling()) {
                 layoutQueue.append(std::make_unique<LayoutPair>(LayoutPair {*nextSibling, layoutContext.createDisplayBox(*nextSibling)}));
                 break;
@@ -109,7 +109,7 @@
         }
     }
     // Place the inflow positioned children.
-    placeInFlowPositionedChildren(formattingRoot);
+    placeInFlowPositionedChildren(layoutContext, formattingRoot);
     // And take care of out-of-flow boxes as the final step.
     layoutOutOfFlowDescendants(layoutContext);
 #ifndef NDEBUG
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to