Changeset 246479 in webkit
- Timestamp:
- Jun 16, 2019, 12:33:18 PM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
-
ChangeLog (modified) (1 diff)
-
layout/FormattingContext.cpp (modified) (4 diffs)
-
layout/floats/FloatingState.h (modified) (1 diff)
-
layout/layouttree/LayoutBox.cpp (modified) (1 diff)
-
layout/layouttree/LayoutBox.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r246478 r246479 1 2019-06-16 Zalan Bujtas <zalan@apple.com> 2 3 [LFC] Add Layout::Box::isContainingBlockDescendantOf 4 https://bugs.webkit.org/show_bug.cgi?id=198888 5 <rdar://problem/51776466> 6 7 Reviewed by Antti Koivisto. 8 9 Box::isDescendantOf indicates simple ancestor - descendant relationship, while 10 isContainingBlockDescendantOf checks the containing block chain. 11 12 * layout/FormattingContext.cpp: 13 (WebCore::Layout::mapHorizontalPositionToAncestor): 14 (WebCore::Layout::FormattingContext::mapBoxToAncestor): 15 (WebCore::Layout::FormattingContext::mapTopToAncestor): 16 (WebCore::Layout::FormattingContext::mapPointToAncestor): 17 * layout/floats/FloatingState.h: 18 (WebCore::Layout::FloatingState::FloatItem::isDescendantOfFormattingRoot const): 19 * layout/layouttree/LayoutBox.cpp: 20 (WebCore::Layout::Box::isDescendantOf const): 21 (WebCore::Layout::Box::isContainingBlockDescendantOf const): 22 * layout/layouttree/LayoutBox.h: 23 1 24 2019-06-16 Zalan Bujtas <zalan@apple.com> 2 25 -
trunk/Source/WebCore/layout/FormattingContext.cpp
r246468 r246479 171 171 if (&containingBlock == &ancestor) 172 172 return horizontalPosition; 173 ASSERT(containingBlock.is DescendantOf(ancestor));173 ASSERT(containingBlock.isContainingBlockDescendantOf(ancestor)); 174 174 for (auto* container = &containingBlock; container && container != &ancestor; container = container->containingBlock()) 175 175 horizontalPosition += layoutState.displayBoxForLayoutBox(*container).left(); … … 192 192 Display::Box FormattingContext::mapBoxToAncestor(const LayoutState& layoutState, const Box& layoutBox, const Container& ancestor) 193 193 { 194 ASSERT(layoutBox.isDescendantOf(ancestor)); 195 194 ASSERT(layoutBox.isContainingBlockDescendantOf(ancestor)); 196 195 auto& displayBox = layoutState.displayBoxForLayoutBox(layoutBox); 197 196 auto topLeft = displayBox.topLeft(); 198 199 auto* containingBlock = layoutBox.containingBlock(); 200 for (; containingBlock && containingBlock != &ancestor; containingBlock = containingBlock->containingBlock()) 197 for (auto* containingBlock = layoutBox.containingBlock(); containingBlock && containingBlock != &ancestor; containingBlock = containingBlock->containingBlock()) 201 198 topLeft.moveBy(layoutState.displayBoxForLayoutBox(*containingBlock).topLeft()); 202 203 if (!containingBlock) {204 ASSERT_NOT_REACHED();205 return Display::Box(displayBox);206 }207 199 208 200 auto mappedDisplayBox = Display::Box(displayBox); … … 213 205 LayoutUnit FormattingContext::mapTopToAncestor(const LayoutState& layoutState, const Box& layoutBox, const Container& ancestor) 214 206 { 215 ASSERT(layoutBox.is DescendantOf(ancestor));207 ASSERT(layoutBox.isContainingBlockDescendantOf(ancestor)); 216 208 auto top = layoutState.displayBoxForLayoutBox(layoutBox).top(); 217 auto* container = layoutBox.containingBlock(); 218 for (; container && container != &ancestor; container = container->containingBlock()) 209 for (auto* container = layoutBox.containingBlock(); container && container != &ancestor; container = container->containingBlock()) 219 210 top += layoutState.displayBoxForLayoutBox(*container).top(); 220 211 return top; … … 223 214 Point FormattingContext::mapPointToAncestor(const LayoutState& layoutState, Point position, const Container& containingBlock, const Container& ancestor) 224 215 { 216 if (&containingBlock == &ancestor) 217 return position; 218 ASSERT(containingBlock.isContainingBlockDescendantOf(ancestor)); 225 219 auto mappedPosition = position; 226 auto* container = &containingBlock; 227 for (; container && container != &ancestor; container = container->containingBlock()) 220 for (auto* container = &containingBlock; container && container != &ancestor; container = container->containingBlock()) 228 221 mappedPosition.moveBy(layoutState.displayBoxForLayoutBox(*container).topLeft()); 229 230 if (!container) {231 ASSERT_NOT_REACHED();232 return position;233 }234 235 222 return mappedPosition; 236 223 } -
trunk/Source/WebCore/layout/floats/FloatingState.h
r245776 r246479 122 122 if (!is<Container>(formattingContextRoot)) 123 123 return false; 124 return m_layoutBox->is DescendantOf(downcast<Container>(formattingContextRoot));124 return m_layoutBox->isContainingBlockDescendantOf(downcast<Container>(formattingContextRoot)); 125 125 } 126 126 -
trunk/Source/WebCore/layout/layouttree/LayoutBox.cpp
r246468 r246479 198 198 } 199 199 200 bool Box::isDescendantOf(const Container& container) const 200 bool Box::isDescendantOf(const Container& ancestorCandidate) const 201 { 202 for (auto* ancestor = parent(); ancestor; ancestor = ancestor->parent()) { 203 if (ancestor == &ancestorCandidate) 204 return true; 205 } 206 return false; 207 } 208 209 bool Box::isContainingBlockDescendantOf(const Container& ancestorCandidate) const 201 210 { 202 211 for (auto* ancestor = containingBlock(); ancestor; ancestor = ancestor->containingBlock()) { 203 if (ancestor == & container)212 if (ancestor == &ancestorCandidate) 204 213 return true; 205 214 } -
trunk/Source/WebCore/layout/layouttree/LayoutBox.h
r246468 r246479 102 102 103 103 bool isDescendantOf(const Container&) const; 104 bool isContainingBlockDescendantOf(const Container&) const; 104 105 105 106 bool isAnonymous() const { return !m_elementAttributes; }
Note:
See TracChangeset
for help on using the changeset viewer.