Title: [241822] trunk/Source/WebCore
Revision
241822
Author
za...@apple.com
Date
2019-02-20 11:15:32 -0800 (Wed, 20 Feb 2019)

Log Message

[LFC][Floats] Make FloatAvoider::resetPosition implicit
https://bugs.webkit.org/show_bug.cgi?id=194855

Reviewed by Antti Koivisto.

Let's compute the initial top/left position during c'tor time.
This is in preparation for fixing formatting root box placement in a float context.

* layout/floats/FloatAvoider.cpp:
(WebCore::Layout::FloatAvoider::resetPosition): Deleted.
* layout/floats/FloatAvoider.h:
(WebCore::Layout::FloatAvoider::displayBox):
(WebCore::Layout::FloatAvoider::initialVerticalPosition const): Deleted.
* layout/floats/FloatBox.cpp:
(WebCore::Layout::FloatBox::FloatBox):
(WebCore::Layout::FloatBox::initialVerticalPosition const):
* layout/floats/FloatBox.h:
* layout/floats/FloatingContext.cpp:
(WebCore::Layout::FloatingContext::floatingPosition const):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (241821 => 241822)


--- trunk/Source/WebCore/ChangeLog	2019-02-20 18:34:44 UTC (rev 241821)
+++ trunk/Source/WebCore/ChangeLog	2019-02-20 19:15:32 UTC (rev 241822)
@@ -1,3 +1,25 @@
+2019-02-20  Zalan Bujtas  <za...@apple.com>
+
+        [LFC][Floats] Make FloatAvoider::resetPosition implicit
+        https://bugs.webkit.org/show_bug.cgi?id=194855
+
+        Reviewed by Antti Koivisto.
+
+        Let's compute the initial top/left position during c'tor time.
+        This is in preparation for fixing formatting root box placement in a float context.
+
+        * layout/floats/FloatAvoider.cpp:
+        (WebCore::Layout::FloatAvoider::resetPosition): Deleted.
+        * layout/floats/FloatAvoider.h:
+        (WebCore::Layout::FloatAvoider::displayBox):
+        (WebCore::Layout::FloatAvoider::initialVerticalPosition const): Deleted.
+        * layout/floats/FloatBox.cpp:
+        (WebCore::Layout::FloatBox::FloatBox):
+        (WebCore::Layout::FloatBox::initialVerticalPosition const):
+        * layout/floats/FloatBox.h:
+        * layout/floats/FloatingContext.cpp:
+        (WebCore::Layout::FloatingContext::floatingPosition const):
+
 2019-02-20  Don Olmstead  <don.olmst...@sony.com>
 
         [MSVC] Fix compilation errors with lambdas in Service Workers

Modified: trunk/Source/WebCore/layout/floats/FloatAvoider.cpp (241821 => 241822)


--- trunk/Source/WebCore/layout/floats/FloatAvoider.cpp	2019-02-20 18:34:44 UTC (rev 241821)
+++ trunk/Source/WebCore/layout/floats/FloatAvoider.cpp	2019-02-20 19:15:32 UTC (rev 241822)
@@ -43,9 +43,9 @@
     , m_floatingState(floatingState)
     , m_absoluteDisplayBox(FormattingContext::mapBoxToAncestor(layoutState, layoutBox, downcast<Container>(floatingState.root())))
     , m_containingBlockAbsoluteDisplayBox(layoutBox.containingBlock() == &floatingState.root() ? Display::Box(layoutState.displayBoxForLayoutBox(*layoutBox.containingBlock())) : FormattingContext::mapBoxToAncestor(layoutState, *layoutBox.containingBlock(), downcast<Container>(floatingState.root())))
-    , m_initialVerticalPosition({ m_absoluteDisplayBox.top() })
 {
     ASSERT(m_layoutBox->establishesBlockFormattingContext());
+    m_absoluteDisplayBox.setLeft({ initialHorizontalPosition() });
 }
 
 void FloatAvoider::setHorizontalConstraints(HorizontalConstraints horizontalConstraints)
@@ -87,11 +87,6 @@
     return verticalConstraint;
 }
 
-void FloatAvoider::resetPosition()
-{
-    m_absoluteDisplayBox.setTopLeft({ initialHorizontalPosition(), initialVerticalPosition() });
-}
-
 PositionInContextRoot FloatAvoider::initialHorizontalPosition() const
 {
     // Align the box with the containing block's content box.

Modified: trunk/Source/WebCore/layout/floats/FloatAvoider.h (241821 => 241822)


--- trunk/Source/WebCore/layout/floats/FloatAvoider.h	2019-02-20 18:34:44 UTC (rev 241821)
+++ trunk/Source/WebCore/layout/floats/FloatAvoider.h	2019-02-20 19:15:32 UTC (rev 241822)
@@ -58,12 +58,9 @@
 
     bool overflowsContainingBlock() const;
 
-    void resetPosition();
-
 protected:
     virtual bool isLeftAligned() const { return layoutBox().style().isLeftToRightDirection(); }
-    virtual PositionInContextRoot initialHorizontalPosition() const;
-    virtual PositionInContextRoot initialVerticalPosition() const { return m_initialVerticalPosition; }
+    PositionInContextRoot initialHorizontalPosition() const;
 
     void resetHorizontalConstraints();
 
@@ -81,6 +78,7 @@
     const FloatingState& floatingState() const { return m_floatingState; }
     const Box& layoutBox() const { return *m_layoutBox; }
     const Display::Box& displayBox() const { return m_absoluteDisplayBox; }
+    Display::Box& displayBox() { return m_absoluteDisplayBox; }
 
 private:
     WeakPtr<const Box> m_layoutBox;
@@ -87,7 +85,6 @@
     const FloatingState& m_floatingState;
     Display::Box m_absoluteDisplayBox;
     Display::Box m_containingBlockAbsoluteDisplayBox;
-    PositionInContextRoot m_initialVerticalPosition;
 };
 
 }

Modified: trunk/Source/WebCore/layout/floats/FloatBox.cpp (241821 => 241822)


--- trunk/Source/WebCore/layout/floats/FloatBox.cpp	2019-02-20 18:34:44 UTC (rev 241821)
+++ trunk/Source/WebCore/layout/floats/FloatBox.cpp	2019-02-20 19:15:32 UTC (rev 241822)
@@ -38,6 +38,7 @@
 FloatBox::FloatBox(const Box& layoutBox, const FloatingState& floatingState, const LayoutState& layoutState)
     : FloatAvoider(layoutBox, floatingState, layoutState)
 {
+    displayBox().setTopLeft({ initialHorizontalPosition(), initialVerticalPosition() });
 }
 
 Display::Box::Rect FloatBox::rect() const
@@ -63,7 +64,7 @@
 {
     // Incoming float cannot be placed higher than existing floats (margin box of the last float).
     // Take the static position (where the box would go if it wasn't floating) and adjust it with the last float.
-    auto top = FloatAvoider::initialVerticalPosition() - marginBefore();
+    auto top = displayBox().top() - marginBefore();
     if (auto lastFloat = floatingState().last())
         top = std::max(top, lastFloat->rectWithMargin().top());
     top += marginBefore();

Modified: trunk/Source/WebCore/layout/floats/FloatBox.h (241821 => 241822)


--- trunk/Source/WebCore/layout/floats/FloatBox.h	2019-02-20 18:34:44 UTC (rev 241821)
+++ trunk/Source/WebCore/layout/floats/FloatBox.h	2019-02-20 19:15:32 UTC (rev 241822)
@@ -51,7 +51,7 @@
     PositionInContextRoot horizontalPositionCandidate(HorizontalConstraints) final;
     PositionInContextRoot verticalPositionCandidate(PositionInContextRoot) final;
 
-    PositionInContextRoot initialVerticalPosition() const final;
+    PositionInContextRoot initialVerticalPosition() const;
 };
 
 }

Modified: trunk/Source/WebCore/layout/floats/FloatingContext.cpp (241821 => 241822)


--- trunk/Source/WebCore/layout/floats/FloatingContext.cpp	2019-02-20 18:34:44 UTC (rev 241821)
+++ trunk/Source/WebCore/layout/floats/FloatingContext.cpp	2019-02-20 19:15:32 UTC (rev 241822)
@@ -261,9 +261,6 @@
 
 void FloatingContext::floatingPosition(FloatAvoider& floatAvoider) const
 {
-    // Ensure the float avoider starts with no constraints.
-    floatAvoider.resetPosition();
-
     Optional<PositionInContextRoot> bottomMost;
     auto end = Layout::end(m_floatingState);
     for (auto iterator = begin(m_floatingState, { floatAvoider.rect().top() }); iterator != end; ++iterator) {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to