Changeset 238482 in webkit
- Timestamp:
- Nov 25, 2018, 1:35:18 PM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 10 edited
-
ChangeLog (modified) (1 diff)
-
layout/FormattingContextGeometry.cpp (modified) (1 diff)
-
layout/LayoutUnits.h (modified) (2 diffs)
-
layout/floats/FloatAvoider.cpp (modified) (4 diffs)
-
layout/floats/FloatBox.cpp (modified) (2 diffs)
-
layout/floats/FloatingContext.cpp (modified) (9 diffs)
-
layout/floats/FloatingContext.h (modified) (1 diff)
-
layout/floats/FloatingState.cpp (modified) (3 diffs)
-
layout/floats/FloatingState.h (modified) (1 diff)
-
layout/inlineformatting/InlineFormattingContext.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r238481 r238482 1 2018-11-25 Zalan Bujtas <zalan@apple.com> 2 3 [LFC] Remove PointInContainingBlock and PositionInContainingBlock 4 https://bugs.webkit.org/show_bug.cgi?id=191954 5 6 Reviewed by Antti Koivisto. 7 8 Use Point and Position instead. Points and positions are by default in the containing block's coordinate system. 9 10 * layout/FormattingContextGeometry.cpp: 11 (WebCore::Layout::contentHeightForFormattingContextRoot): 12 * layout/LayoutUnits.h: 13 (WebCore::Layout::Position::operator LayoutUnit const): 14 (WebCore::Layout::operator<): 15 (WebCore::Layout::operator==): 16 * layout/floats/FloatAvoider.cpp: 17 (WebCore::Layout::FloatAvoider::FloatAvoider): 18 (WebCore::Layout::FloatAvoider::setHorizontalConstraints): 19 (WebCore::Layout::FloatAvoider::horizontalPositionCandidate): 20 (WebCore::Layout::FloatAvoider::initialHorizontalPosition const): 21 * layout/floats/FloatBox.cpp: 22 (WebCore::Layout::FloatBox::horizontalPositionCandidate): 23 (WebCore::Layout::FloatBox::verticalPositionCandidate): 24 (WebCore::Layout::FloatBox::initialVerticalPosition const): 25 * layout/floats/FloatingContext.cpp: 26 (WebCore::Layout::FloatingContext::positionForFloat const): 27 (WebCore::Layout::FloatingContext::positionForFloatAvoiding const): 28 (WebCore::Layout::FloatingContext::verticalPositionWithClearance const): 29 (WebCore::Layout::FloatingContext::floatingPosition const): 30 (WebCore::Layout::FloatingPair::horizontalConstraints const): 31 (WebCore::Layout::FloatingPair::bottom const): 32 * layout/floats/FloatingContext.h: 33 * layout/floats/FloatingState.cpp: 34 (WebCore::Layout::FloatingState::constraints const): 35 (WebCore::Layout::FloatingState::bottom const): 36 * layout/floats/FloatingState.h: 37 (WebCore::Layout::FloatingState::FloatItem::bottom const): 38 * layout/inlineformatting/InlineFormattingContext.cpp: 39 (WebCore::Layout::InlineFormattingContext::initializeNewLine const): 40 1 41 2018-11-25 Zalan Bujtas <zalan@apple.com> 2 42 -
trunk/Source/WebCore/layout/FormattingContextGeometry.cpp
r238463 r238482 157 157 auto floatsBottom = layoutState.establishedFormattingState(*formattingContextRoot).floatingState().bottom(*formattingContextRoot); 158 158 if (floatsBottom) 159 bottom = std::max (*floatsBottom, bottom);159 bottom = std::max<LayoutUnit>(*floatsBottom, bottom); 160 160 161 161 auto computedHeight = bottom - top; -
trunk/Source/WebCore/layout/LayoutUnits.h
r238481 r238482 35 35 namespace Layout { 36 36 37 struct Position { 38 operator LayoutUnit() const { return value; } 39 LayoutUnit value; 40 }; 41 42 inline bool operator<(const Position& a, const Position& b) 43 { 44 return a.value < b.value; 45 } 46 47 inline bool operator==(const Position& a, const Position& b) 48 { 49 return a.value == b.value; 50 } 51 37 52 struct Point { 38 // FIXME: Use LayoutUnit<Horizontal> to avoid top/left vs. x/y confusion.53 // FIXME: Use Position<Horizontal>, Position<Vertical> to avoid top/left vs. x/y confusion. 39 54 LayoutUnit x; // left 40 55 LayoutUnit y; // top … … 49 64 // FIXME: Wrap these into structs. 50 65 using PointInContextRoot = Point; 51 using PointInContainingBlock = Point; 52 using PositionInContextRoot = LayoutUnit; 53 using PositionInContainingBlock = LayoutUnit; 66 using PositionInContextRoot = Position; 54 67 55 68 inline Point::Point(LayoutPoint point) -
trunk/Source/WebCore/layout/floats/FloatAvoider.cpp
r237631 r238482 44 44 , m_absoluteDisplayBox(FormattingContext::mapBoxToAncestor(layoutState, layoutBox, downcast<Container>(floatingState.root()))) 45 45 , m_containingBlockAbsoluteDisplayBox(layoutBox.containingBlock() == &floatingState.root() ? Display::Box(layoutState.displayBoxForLayoutBox(*layoutBox.containingBlock())) : FormattingContext::mapBoxToAncestor(layoutState, *layoutBox.containingBlock(), downcast<Container>(floatingState.root()))) 46 , m_initialVerticalPosition( m_absoluteDisplayBox.top())46 , m_initialVerticalPosition({ m_absoluteDisplayBox.top() }) 47 47 { 48 48 ASSERT(m_layoutBox->establishesBlockFormattingContext()); … … 62 62 auto containingBlockContentBoxLeft = m_containingBlockAbsoluteDisplayBox.left() + m_containingBlockAbsoluteDisplayBox.contentBoxLeft(); 63 63 if (isLeftAligned()) 64 return std::max (containingBlockContentBoxLeft + marginLeft(), left);64 return std::max<PositionInContextRoot>({ containingBlockContentBoxLeft + marginLeft() }, left); 65 65 66 66 // Make sure it does not overflow the containing block on the right. 67 67 auto containingBlockContentBoxRight = containingBlockContentBoxLeft + m_containingBlockAbsoluteDisplayBox.contentBoxWidth(); 68 return std::min (left, containingBlockContentBoxRight - marginBoxWidth() + marginLeft());68 return std::min<PositionInContextRoot>(left, { containingBlockContentBoxRight - marginBoxWidth() + marginLeft() }); 69 69 }; 70 70 … … 80 80 PositionInContextRoot FloatAvoider::horizontalPositionCandidate(HorizontalConstraints horizontalConstraints) 81 81 { 82 return isLeftAligned() ? *horizontalConstraints.left : *horizontalConstraints.right - rect().width();82 return { isLeftAligned() ? *horizontalConstraints.left : *horizontalConstraints.right - rect().width() }; 83 83 } 84 84 … … 102 102 left += marginLeft(); 103 103 104 return left;104 return { left }; 105 105 } 106 106 -
trunk/Source/WebCore/layout/floats/FloatBox.cpp
r237631 r238482 52 52 positionCandidate += marginLeft(); 53 53 54 return positionCandidate;54 return { positionCandidate }; 55 55 } 56 56 57 57 PositionInContextRoot FloatBox::verticalPositionCandidate(PositionInContextRoot verticalConstraint) 58 58 { 59 return verticalConstraint + marginTop();59 return { verticalConstraint + marginTop() }; 60 60 } 61 61 … … 69 69 top += marginTop(); 70 70 71 return top;71 return { top }; 72 72 } 73 73 -
trunk/Source/WebCore/layout/floats/FloatingContext.cpp
r237631 r238482 117 117 } 118 118 119 Point InContainingBlockFloatingContext::positionForFloat(const Box& layoutBox) const119 Point FloatingContext::positionForFloat(const Box& layoutBox) const 120 120 { 121 121 ASSERT(layoutBox.isFloatingPositioned()); … … 124 124 auto& displayBox = layoutState().displayBoxForLayoutBox(layoutBox); 125 125 126 auto alignWithContainingBlock = [&]() -> Position InContainingBlock{126 auto alignWithContainingBlock = [&]() -> Position { 127 127 // If there is no floating to align with, push the box to the left/right edge of its containing block's content box. 128 128 auto& containingBlockDisplayBox = layoutState().displayBoxForLayoutBox(*layoutBox.containingBlock()); 129 129 130 130 if (layoutBox.isLeftFloatingPositioned()) 131 return containingBlockDisplayBox.contentBoxLeft() + displayBox.marginLeft();132 133 return containingBlockDisplayBox.contentBoxRight() - displayBox.marginRight() - displayBox.width();131 return Position { containingBlockDisplayBox.contentBoxLeft() + displayBox.marginLeft() }; 132 133 return Position { containingBlockDisplayBox.contentBoxRight() - displayBox.marginRight() - displayBox.width() }; 134 134 }; 135 135 … … 144 144 } 145 145 146 std::optional<Point InContainingBlock> FloatingContext::positionForFloatAvoiding(const Box& layoutBox) const146 std::optional<Point> FloatingContext::positionForFloatAvoiding(const Box& layoutBox) const 147 147 { 148 148 ASSERT(layoutBox.establishesBlockFormattingContext()); … … 158 158 } 159 159 160 std::optional<Position InContainingBlock> FloatingContext::verticalPositionWithClearance(const Box& layoutBox) const160 std::optional<Position> FloatingContext::verticalPositionWithClearance(const Box& layoutBox) const 161 161 { 162 162 ASSERT(layoutBox.hasFloatClear()); … … 166 166 return { }; 167 167 168 auto bottom = [&](std::optional<PositionInContextRoot> floatBottom) -> std::optional<Position InContainingBlock> {168 auto bottom = [&](std::optional<PositionInContextRoot> floatBottom) -> std::optional<Position> { 169 169 // 'bottom' is in the formatting root's coordinate system. 170 170 if (!floatBottom) … … 210 210 // The return vertical position is in the containing block's coordinate system. 211 211 auto containingBlockRootRelativeTop = FormattingContext::mapTopLeftToAncestor(layoutState, *layoutBox.containingBlock(), downcast<Container>(m_floatingState.root())).y; 212 return rootRelativeTop - containingBlockRootRelativeTop;212 return Position { rootRelativeTop - containingBlockRootRelativeTop }; 213 213 }; 214 214 … … 236 236 std::optional<PositionInContextRoot> bottomMost; 237 237 auto end = Layout::end(m_floatingState); 238 for (auto iterator = begin(m_floatingState, floatAvoider.rect().top()); iterator != end; ++iterator) {238 for (auto iterator = begin(m_floatingState, { floatAvoider.rect().top() }); iterator != end; ++iterator) { 239 239 ASSERT(!(*iterator).isEmpty()); 240 240 auto floats = *iterator; … … 328 328 329 329 if (left()) 330 leftEdge = left()->rectWithMargin().right();330 leftEdge = PositionInContextRoot { left()->rectWithMargin().right() }; 331 331 332 332 if (right()) 333 rightEdge = right()->rectWithMargin().left();333 rightEdge = PositionInContextRoot { right()->rectWithMargin().left() }; 334 334 335 335 return { leftEdge, rightEdge }; … … 342 342 ASSERT(left || right); 343 343 344 auto leftBottom = left ? std::optional<PositionInContextRoot>( left->rectWithMargin().bottom()) : std::nullopt;345 auto rightBottom = right ? std::optional<PositionInContextRoot>( right->rectWithMargin().bottom()) : std::nullopt;344 auto leftBottom = left ? std::optional<PositionInContextRoot>(PositionInContextRoot { left->rectWithMargin().bottom() }) : std::nullopt; 345 auto rightBottom = right ? std::optional<PositionInContextRoot>(PositionInContextRoot { right->rectWithMargin().bottom() }) : std::nullopt; 346 346 347 347 if (leftBottom && rightBottom) -
trunk/Source/WebCore/layout/floats/FloatingContext.h
r237631 r238482 51 51 FloatingState& floatingState() const { return m_floatingState; } 52 52 53 Point InContainingBlockpositionForFloat(const Box&) const;54 std::optional<Point InContainingBlock> positionForFloatAvoiding(const Box&) const;55 std::optional<Position InContainingBlock> verticalPositionWithClearance(const Box&) const;53 Point positionForFloat(const Box&) const; 54 std::optional<Point> positionForFloatAvoiding(const Box&) const; 55 std::optional<Position> verticalPositionWithClearance(const Box&) const; 56 56 57 57 private: -
trunk/Source/WebCore/layout/floats/FloatingState.cpp
r238481 r238482 116 116 117 117 if (floatItem.isLeftPositioned()) 118 constraints.left = rect.right();118 constraints.left = PositionInContextRoot { rect.right() }; 119 119 else 120 constraints.right = rect.left();120 constraints.right = PositionInContextRoot { rect.left() }; 121 121 122 122 if (constraints.left && constraints.right) … … 126 126 if (coordinateMappingIsRequired) { 127 127 if (constraints.left) 128 constraints.left = *constraints.left - adjustedPosition.x;128 constraints.left = PositionInContextRoot { *constraints.left - adjustedPosition.x }; 129 129 130 130 if (constraints.right) 131 constraints.right = *constraints.right - adjustedPosition.x;131 constraints.right = PositionInContextRoot { *constraints.right - adjustedPosition.x }; 132 132 } 133 133 … … 154 154 auto floatsBottom = floatItem.rectWithMargin().bottom(); 155 155 if (bottom) { 156 bottom = std::max (*bottom, floatsBottom);156 bottom = std::max<PositionInContextRoot>(*bottom, { floatsBottom }); 157 157 continue; 158 158 } 159 bottom = floatsBottom;159 bottom = PositionInContextRoot { floatsBottom }; 160 160 } 161 161 return bottom; -
trunk/Source/WebCore/layout/floats/FloatingState.h
r238480 r238482 75 75 76 76 Display::Box::Rect rectWithMargin() const { return m_absoluteDisplayBox.rectWithMargin(); } 77 PositionInContextRoot bottom() const { return m_absoluteDisplayBox.bottom(); }77 PositionInContextRoot bottom() const { return { m_absoluteDisplayBox.bottom() }; } 78 78 79 79 private: -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp
r238479 r238482 96 96 auto& floatingState = formattingState().floatingState(); 97 97 if (!floatingState.isEmpty()) { 98 auto floatConstraints = floatingState.constraints( lineLogicalTop, formattingRoot);98 auto floatConstraints = floatingState.constraints({ lineLogicalTop }, formattingRoot); 99 99 // Check if these constraints actually put limitation on the line. 100 100 if (floatConstraints.left && *floatConstraints.left <= formattingRootDisplayBox.contentBoxLeft())
Note:
See TracChangeset
for help on using the changeset viewer.