Changeset 246482 in webkit
- Timestamp:
- Jun 16, 2019 1:15:02 PM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r246481 r246482 1 2019-06-16 Zalan Bujtas <zalan@apple.com> 2 3 [LFC][Floats] Add bottom value to FloatingState::Constraints 4 https://bugs.webkit.org/show_bug.cgi?id=198889 5 <rdar://problem/51776730> 6 7 Reviewed by Antti Koivisto. 8 9 Constraints::left/right->y indicates where this particular constrain ends. This is going to be used by inline layout to figure where 10 the next line should go (vertical position). 11 12 * layout/floats/FloatingState.cpp: 13 (WebCore::Layout::FloatingState::constraints const): 14 * layout/floats/FloatingState.h: 15 1 16 2019-06-16 Zalan Bujtas <zalan@apple.com> 2 17 -
trunk/Source/WebCore/layout/LayoutUnits.h
r241264 r246482 60 60 Point(LayoutUnit, LayoutUnit); 61 61 Point(LayoutPoint); 62 void move(LayoutSize); 62 63 void moveBy(LayoutPoint); 63 64 operator LayoutPoint() const { return { x, y }; } … … 78 79 , y(y) 79 80 { 81 } 82 83 inline void Point::move(LayoutSize offset) 84 { 85 x += offset.width(); 86 y += offset.height(); 80 87 } 81 88 -
trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp
r246468 r246482 149 149 150 150 // Shrink the available space if the floats are actually intruding at this vertical position. 151 availableWidth -= (std::max<LayoutUnit>(0, constraints.left.valueOr(PositionInContextRoot { 0 }) - containingBlockContentBoxLeft) 152 + std::max<LayoutUnit>(0, containingBlockContentBoxRight - constraints.right.valueOr(PositionInContextRoot { containingBlockContentBoxRight }))); 151 if (constraints.left) 152 availableWidth -= std::max<LayoutUnit>(0, constraints.left->x - containingBlockContentBoxLeft); 153 if (constraints.right) 154 availableWidth -= std::max<LayoutUnit>(0, containingBlockContentBoxRight - constraints.right->x); 153 155 return availableWidth; 154 156 } -
trunk/Source/WebCore/layout/floats/FloatingState.cpp
r246468 r246482 120 120 auto coordinateMappingIsRequired = &root() != &formattingContextRoot; 121 121 auto adjustedPosition = Point { 0, verticalPosition }; 122 123 if (coordinateMappingIsRequired) 122 LayoutSize adjustingDelta; 123 124 if (coordinateMappingIsRequired) { 124 125 adjustedPosition = FormattingContext::mapPointToAncestor(m_layoutState, adjustedPosition, downcast<Container>(formattingContextRoot), downcast<Container>(root())); 126 adjustingDelta = { adjustedPosition.x, adjustedPosition.y - verticalPosition }; 127 } 125 128 126 129 Constraints constraints; … … 139 142 140 143 if (floatItem.isLeftPositioned()) 141 constraints.left = Po sitionInContextRoot { rect.right() };144 constraints.left = PointInContextRoot { rect.right(), rect.bottom() }; 142 145 else 143 constraints.right = Po sitionInContextRoot { rect.left() };146 constraints.right = PointInContextRoot { rect.left(), rect.bottom() }; 144 147 145 148 if (constraints.left && constraints.right) … … 149 152 if (coordinateMappingIsRequired) { 150 153 if (constraints.left) 151 constraints.left = PositionInContextRoot { *constraints.left - adjustedPosition.x };154 constraints.left->move(-adjustingDelta); 152 155 153 156 if (constraints.right) 154 constraints.right = PositionInContextRoot { *constraints.right - adjustedPosition.x }; 155 } 156 157 constraints.right->move(-adjustingDelta); 158 } 157 159 return constraints; 158 160 } -
trunk/Source/WebCore/layout/floats/FloatingState.h
r246479 r246482 61 61 62 62 struct Constraints { 63 Optional<Po sitionInContextRoot> left;64 Optional<Po sitionInContextRoot> right;63 Optional<PointInContextRoot> left; 64 Optional<PointInContextRoot> right; 65 65 }; 66 66 Constraints constraints(PositionInContextRoot verticalPosition, const Box& formattingContextRoot) const; -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextLineLayout.cpp
r246478 r246482 231 231 auto floatConstraints = m_floatingState.constraints({ lineLogicalTop }, m_formattingRoot); 232 232 // Check if these constraints actually put limitation on the line. 233 if (floatConstraints.left && *floatConstraints.left<= formattingRootDisplayBox.contentBoxLeft())233 if (floatConstraints.left && floatConstraints.left->x <= formattingRootDisplayBox.contentBoxLeft()) 234 234 floatConstraints.left = { }; 235 235 236 if (floatConstraints.right && *floatConstraints.right>= formattingRootDisplayBox.contentBoxRight())236 if (floatConstraints.right && floatConstraints.right->x >= formattingRootDisplayBox.contentBoxRight()) 237 237 floatConstraints.right = { }; 238 238 239 239 if (floatConstraints.left && floatConstraints.right) { 240 ASSERT( *floatConstraints.left < *floatConstraints.right);241 availableWidth = *floatConstraints.right - *floatConstraints.left;242 lineLogicalLeft = *floatConstraints.left;240 ASSERT(floatConstraints.left->x < floatConstraints.right->x); 241 availableWidth = floatConstraints.right->x - floatConstraints.left->x; 242 lineLogicalLeft = floatConstraints.left->x; 243 243 } else if (floatConstraints.left) { 244 ASSERT( *floatConstraints.left> lineLogicalLeft);245 availableWidth -= ( *floatConstraints.left- lineLogicalLeft);246 lineLogicalLeft = *floatConstraints.left;244 ASSERT(floatConstraints.left->x > lineLogicalLeft); 245 availableWidth -= (floatConstraints.left->x - lineLogicalLeft); 246 lineLogicalLeft = floatConstraints.left->x; 247 247 } else if (floatConstraints.right) { 248 ASSERT( *floatConstraints.right> lineLogicalLeft);249 availableWidth = *floatConstraints.right- lineLogicalLeft;248 ASSERT(floatConstraints.right->x > lineLogicalLeft); 249 availableWidth = floatConstraints.right->x - lineLogicalLeft; 250 250 } 251 251 lineHorizontalConstraint.availableLogicalWidth = availableWidth;
Note: See TracChangeset
for help on using the changeset viewer.