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) {