WebKit Bugzilla
Attachment 362510 Details for
Bug 194855
: [LFC][Floats] Make FloatAvoider::resetPosition implicit
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-194855-20190220101655.patch (text/plain), 6.75 KB, created by
zalan
on 2019-02-20 10:17:03 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
zalan
Created:
2019-02-20 10:17:03 PST
Size:
6.75 KB
patch
obsolete
>Subversion Revision: 241775 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index ea2c31f24c0fc0c030837a00019c98468be011bb..6bf16d638f258fb706ad35ed63c2b697ffd47185 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,25 @@ >+2019-02-20 Zalan Bujtas <zalan@apple.com> >+ >+ [LFC][Floats] Make FloatAvoider::resetPosition implicit >+ https://bugs.webkit.org/show_bug.cgi?id=194855 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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-19 Zalan Bujtas <zalan@apple.com> > > Fix post-commit feedback. >diff --git a/Source/WebCore/layout/floats/FloatAvoider.cpp b/Source/WebCore/layout/floats/FloatAvoider.cpp >index db181cd4a57b7470a546b63f924008ba6b9298ee..151d88e267b6b05060db64335329cd0a10381a07 100644 >--- a/Source/WebCore/layout/floats/FloatAvoider.cpp >+++ b/Source/WebCore/layout/floats/FloatAvoider.cpp >@@ -43,9 +43,9 @@ FloatAvoider::FloatAvoider(const Box& layoutBox, const FloatingState& floatingSt > , 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 @@ PositionInContextRoot FloatAvoider::verticalPositionCandidate(PositionInContextR > return verticalConstraint; > } > >-void FloatAvoider::resetPosition() >-{ >- m_absoluteDisplayBox.setTopLeft({ initialHorizontalPosition(), initialVerticalPosition() }); >-} >- > PositionInContextRoot FloatAvoider::initialHorizontalPosition() const > { > // Align the box with the containing block's content box. >diff --git a/Source/WebCore/layout/floats/FloatAvoider.h b/Source/WebCore/layout/floats/FloatAvoider.h >index 67c942960211b88dd5a97d38eeee17ce66ee8275..2c323dd80f666f873d56e3f45caa31da89b0f4ed 100644 >--- a/Source/WebCore/layout/floats/FloatAvoider.h >+++ b/Source/WebCore/layout/floats/FloatAvoider.h >@@ -58,12 +58,9 @@ public: > > 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,13 +78,13 @@ protected: > 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; > const FloatingState& m_floatingState; > Display::Box m_absoluteDisplayBox; > Display::Box m_containingBlockAbsoluteDisplayBox; >- PositionInContextRoot m_initialVerticalPosition; > }; > > } >diff --git a/Source/WebCore/layout/floats/FloatBox.cpp b/Source/WebCore/layout/floats/FloatBox.cpp >index b557bb096c7f7deab0346c89c7817678d817ac2b..beb757e32714cb4e9e7fc5280c67ef9409eb5acd 100644 >--- a/Source/WebCore/layout/floats/FloatBox.cpp >+++ b/Source/WebCore/layout/floats/FloatBox.cpp >@@ -38,6 +38,7 @@ WTF_MAKE_ISO_ALLOCATED_IMPL(FloatBox); > 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 @@ PositionInContextRoot FloatBox::initialVerticalPosition() const > { > // 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(); >diff --git a/Source/WebCore/layout/floats/FloatBox.h b/Source/WebCore/layout/floats/FloatBox.h >index 819b14ca8cfee8016b067738c471632acc9d5516..2edcae88d72c3fc118d448a189ece001f3ee0062 100644 >--- a/Source/WebCore/layout/floats/FloatBox.h >+++ b/Source/WebCore/layout/floats/FloatBox.h >@@ -51,7 +51,7 @@ private: > PositionInContextRoot horizontalPositionCandidate(HorizontalConstraints) final; > PositionInContextRoot verticalPositionCandidate(PositionInContextRoot) final; > >- PositionInContextRoot initialVerticalPosition() const final; >+ PositionInContextRoot initialVerticalPosition() const; > }; > > } >diff --git a/Source/WebCore/layout/floats/FloatingContext.cpp b/Source/WebCore/layout/floats/FloatingContext.cpp >index a123b2d623348cafa5a053884dcfffd362290d0e..98ce2e8ea053034be4b07373a6823c345464c159 100644 >--- a/Source/WebCore/layout/floats/FloatingContext.cpp >+++ b/Source/WebCore/layout/floats/FloatingContext.cpp >@@ -261,9 +261,6 @@ FloatingContext::ClearancePosition FloatingContext::verticalPositionWithClearanc > > 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) {
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 194855
: 362510