Title: [246479] trunk/Source/WebCore
- Revision
- 246479
- Author
- [email protected]
- Date
- 2019-06-16 12:33:18 -0700 (Sun, 16 Jun 2019)
Log Message
[LFC] Add Layout::Box::isContainingBlockDescendantOf
https://bugs.webkit.org/show_bug.cgi?id=198888
<rdar://problem/51776466>
Reviewed by Antti Koivisto.
Box::isDescendantOf indicates simple ancestor - descendant relationship, while
isContainingBlockDescendantOf checks the containing block chain.
* layout/FormattingContext.cpp:
(WebCore::Layout::mapHorizontalPositionToAncestor):
(WebCore::Layout::FormattingContext::mapBoxToAncestor):
(WebCore::Layout::FormattingContext::mapTopToAncestor):
(WebCore::Layout::FormattingContext::mapPointToAncestor):
* layout/floats/FloatingState.h:
(WebCore::Layout::FloatingState::FloatItem::isDescendantOfFormattingRoot const):
* layout/layouttree/LayoutBox.cpp:
(WebCore::Layout::Box::isDescendantOf const):
(WebCore::Layout::Box::isContainingBlockDescendantOf const):
* layout/layouttree/LayoutBox.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (246478 => 246479)
--- trunk/Source/WebCore/ChangeLog 2019-06-16 19:32:52 UTC (rev 246478)
+++ trunk/Source/WebCore/ChangeLog 2019-06-16 19:33:18 UTC (rev 246479)
@@ -1,5 +1,28 @@
2019-06-16 Zalan Bujtas <[email protected]>
+ [LFC] Add Layout::Box::isContainingBlockDescendantOf
+ https://bugs.webkit.org/show_bug.cgi?id=198888
+ <rdar://problem/51776466>
+
+ Reviewed by Antti Koivisto.
+
+ Box::isDescendantOf indicates simple ancestor - descendant relationship, while
+ isContainingBlockDescendantOf checks the containing block chain.
+
+ * layout/FormattingContext.cpp:
+ (WebCore::Layout::mapHorizontalPositionToAncestor):
+ (WebCore::Layout::FormattingContext::mapBoxToAncestor):
+ (WebCore::Layout::FormattingContext::mapTopToAncestor):
+ (WebCore::Layout::FormattingContext::mapPointToAncestor):
+ * layout/floats/FloatingState.h:
+ (WebCore::Layout::FloatingState::FloatItem::isDescendantOfFormattingRoot const):
+ * layout/layouttree/LayoutBox.cpp:
+ (WebCore::Layout::Box::isDescendantOf const):
+ (WebCore::Layout::Box::isContainingBlockDescendantOf const):
+ * layout/layouttree/LayoutBox.h:
+
+2019-06-16 Zalan Bujtas <[email protected]>
+
[LFC][IFC] Remove Line::Content::isVisuallyEmpty
https://bugs.webkit.org/show_bug.cgi?id=198892
<rdar://problem/51780345>
Modified: trunk/Source/WebCore/layout/FormattingContext.cpp (246478 => 246479)
--- trunk/Source/WebCore/layout/FormattingContext.cpp 2019-06-16 19:32:52 UTC (rev 246478)
+++ trunk/Source/WebCore/layout/FormattingContext.cpp 2019-06-16 19:33:18 UTC (rev 246479)
@@ -170,7 +170,7 @@
// "horizontalPosition" is in the coordinate system of the "containingBlock". -> map from containingBlock to ancestor.
if (&containingBlock == &ancestor)
return horizontalPosition;
- ASSERT(containingBlock.isDescendantOf(ancestor));
+ ASSERT(containingBlock.isContainingBlockDescendantOf(ancestor));
for (auto* container = &containingBlock; container && container != &ancestor; container = container->containingBlock())
horizontalPosition += layoutState.displayBoxForLayoutBox(*container).left();
return horizontalPosition;
@@ -191,20 +191,12 @@
Display::Box FormattingContext::mapBoxToAncestor(const LayoutState& layoutState, const Box& layoutBox, const Container& ancestor)
{
- ASSERT(layoutBox.isDescendantOf(ancestor));
-
+ ASSERT(layoutBox.isContainingBlockDescendantOf(ancestor));
auto& displayBox = layoutState.displayBoxForLayoutBox(layoutBox);
auto topLeft = displayBox.topLeft();
-
- auto* containingBlock = layoutBox.containingBlock();
- for (; containingBlock && containingBlock != &ancestor; containingBlock = containingBlock->containingBlock())
+ for (auto* containingBlock = layoutBox.containingBlock(); containingBlock && containingBlock != &ancestor; containingBlock = containingBlock->containingBlock())
topLeft.moveBy(layoutState.displayBoxForLayoutBox(*containingBlock).topLeft());
- if (!containingBlock) {
- ASSERT_NOT_REACHED();
- return Display::Box(displayBox);
- }
-
auto mappedDisplayBox = Display::Box(displayBox);
mappedDisplayBox.setTopLeft(topLeft);
return mappedDisplayBox;
@@ -212,10 +204,9 @@
LayoutUnit FormattingContext::mapTopToAncestor(const LayoutState& layoutState, const Box& layoutBox, const Container& ancestor)
{
- ASSERT(layoutBox.isDescendantOf(ancestor));
+ ASSERT(layoutBox.isContainingBlockDescendantOf(ancestor));
auto top = layoutState.displayBoxForLayoutBox(layoutBox).top();
- auto* container = layoutBox.containingBlock();
- for (; container && container != &ancestor; container = container->containingBlock())
+ for (auto* container = layoutBox.containingBlock(); container && container != &ancestor; container = container->containingBlock())
top += layoutState.displayBoxForLayoutBox(*container).top();
return top;
}
@@ -222,16 +213,12 @@
Point FormattingContext::mapPointToAncestor(const LayoutState& layoutState, Point position, const Container& containingBlock, const Container& ancestor)
{
+ if (&containingBlock == &ancestor)
+ return position;
+ ASSERT(containingBlock.isContainingBlockDescendantOf(ancestor));
auto mappedPosition = position;
- auto* container = &containingBlock;
- for (; container && container != &ancestor; container = container->containingBlock())
+ for (auto* container = &containingBlock; container && container != &ancestor; container = container->containingBlock())
mappedPosition.moveBy(layoutState.displayBoxForLayoutBox(*container).topLeft());
-
- if (!container) {
- ASSERT_NOT_REACHED();
- return position;
- }
-
return mappedPosition;
}
Modified: trunk/Source/WebCore/layout/floats/FloatingState.h (246478 => 246479)
--- trunk/Source/WebCore/layout/floats/FloatingState.h 2019-06-16 19:32:52 UTC (rev 246478)
+++ trunk/Source/WebCore/layout/floats/FloatingState.h 2019-06-16 19:33:18 UTC (rev 246479)
@@ -121,7 +121,7 @@
ASSERT(formattingContextRoot.establishesFormattingContext());
if (!is<Container>(formattingContextRoot))
return false;
- return m_layoutBox->isDescendantOf(downcast<Container>(formattingContextRoot));
+ return m_layoutBox->isContainingBlockDescendantOf(downcast<Container>(formattingContextRoot));
}
}
Modified: trunk/Source/WebCore/layout/layouttree/LayoutBox.cpp (246478 => 246479)
--- trunk/Source/WebCore/layout/layouttree/LayoutBox.cpp 2019-06-16 19:32:52 UTC (rev 246478)
+++ trunk/Source/WebCore/layout/layouttree/LayoutBox.cpp 2019-06-16 19:33:18 UTC (rev 246479)
@@ -197,10 +197,19 @@
return *parent;
}
-bool Box::isDescendantOf(const Container& container) const
+bool Box::isDescendantOf(const Container& ancestorCandidate) const
+{
+ for (auto* ancestor = parent(); ancestor; ancestor = ancestor->parent()) {
+ if (ancestor == &ancestorCandidate)
+ return true;
+ }
+ return false;
+}
+
+bool Box::isContainingBlockDescendantOf(const Container& ancestorCandidate) const
{
for (auto* ancestor = containingBlock(); ancestor; ancestor = ancestor->containingBlock()) {
- if (ancestor == &container)
+ if (ancestor == &ancestorCandidate)
return true;
}
return false;
Modified: trunk/Source/WebCore/layout/layouttree/LayoutBox.h (246478 => 246479)
--- trunk/Source/WebCore/layout/layouttree/LayoutBox.h 2019-06-16 19:32:52 UTC (rev 246478)
+++ trunk/Source/WebCore/layout/layouttree/LayoutBox.h 2019-06-16 19:33:18 UTC (rev 246479)
@@ -101,6 +101,7 @@
const Container& initialContainingBlock() const;
bool isDescendantOf(const Container&) const;
+ bool isContainingBlockDescendantOf(const Container&) const;
bool isAnonymous() const { return !m_elementAttributes; }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes