Changeset 237454 in webkit
- Timestamp:
- Oct 26, 2018, 7:36:30 AM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
-
ChangeLog (modified) (1 diff)
-
layout/inlineformatting/InlineFormattingContext.cpp (modified) (3 diffs)
-
layout/inlineformatting/InlineFormattingContext.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r237453 r237454 1 2018-10-26 Zalan Bujtas <zalan@apple.com> 2 3 [LFC][IFC] Compute float box size and position 4 https://bugs.webkit.org/show_bug.cgi?id=190938 5 6 Reviewed by Antti Koivisto. 7 8 * layout/inlineformatting/InlineFormattingContext.cpp: 9 (WebCore::Layout::InlineFormattingContext::computeWidthAndHeight const): 10 (WebCore::Layout::InlineFormattingContext::computeFloatPosition const): 11 * layout/inlineformatting/InlineFormattingContext.h: 12 1 13 2018-10-26 Zalan Bujtas <zalan@apple.com> 2 14 -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp
r237453 r237454 160 160 } 161 161 162 void InlineFormattingContext::computeWidthAndHeight( constLayoutContext& layoutContext, const Box& layoutBox) const162 void InlineFormattingContext::computeWidthAndHeight(LayoutContext& layoutContext, const Box& layoutBox) const 163 163 { 164 164 if (is<InlineBox>(layoutBox) && downcast<InlineBox>(layoutBox).hasTextContent()) { … … 168 168 } 169 169 170 if (layoutBox.isFloatingPositioned()) {171 ASSERT_NOT_IMPLEMENTED_YET();172 return;173 }174 175 170 if (layoutBox.isInlineBlockBox()) { 176 171 ASSERT_NOT_IMPLEMENTED_YET(); … … 178 173 } 179 174 180 if (layoutBox.replaced()) { 181 computeBorderAndPadding(layoutContext, layoutBox); 182 183 auto& displayBox = layoutContext.displayBoxForLayoutBox(layoutBox); 184 185 auto widthAndMargin = Geometry::inlineReplacedWidthAndMargin(layoutContext, layoutBox); 186 displayBox.setContentBoxWidth(widthAndMargin.width); 187 displayBox.setHorizontalMargin(widthAndMargin.margin); 188 displayBox.setHorizontalNonComputedMargin(widthAndMargin.nonComputedMargin); 189 190 auto heightAndMargin = Geometry::inlineReplacedHeightAndMargin(layoutContext, layoutBox); 191 displayBox.setContentBoxHeight(heightAndMargin.height); 192 displayBox.setVerticalNonCollapsedMargin(heightAndMargin.margin); 193 displayBox.setVerticalMargin(heightAndMargin.collapsedMargin.value_or(heightAndMargin.margin)); 194 return; 195 } 196 197 ASSERT_NOT_REACHED(); 175 computeBorderAndPadding(layoutContext, layoutBox); 176 177 WidthAndMargin widthAndMargin; 178 HeightAndMargin heightAndMargin; 179 180 if (layoutBox.isFloatingPositioned()) { 181 widthAndMargin = Geometry::floatingWidthAndMargin(layoutContext, *this, layoutBox); 182 heightAndMargin = Geometry::floatingHeightAndMargin(layoutContext, layoutBox); 183 } else if (layoutBox.replaced()) { 184 widthAndMargin = Geometry::inlineReplacedWidthAndMargin(layoutContext, layoutBox); 185 heightAndMargin = Geometry::inlineReplacedHeightAndMargin(layoutContext, layoutBox); 186 } else 187 ASSERT_NOT_REACHED(); 188 189 auto& displayBox = layoutContext.displayBoxForLayoutBox(layoutBox); 190 displayBox.setContentBoxWidth(widthAndMargin.width); 191 displayBox.setHorizontalMargin(widthAndMargin.margin); 192 displayBox.setHorizontalNonComputedMargin(widthAndMargin.nonComputedMargin); 193 194 displayBox.setContentBoxHeight(heightAndMargin.height); 195 displayBox.setVerticalNonCollapsedMargin(heightAndMargin.margin); 196 displayBox.setVerticalMargin(heightAndMargin.collapsedMargin.value_or(heightAndMargin.margin)); 198 197 return; 199 198 } 200 199 200 void InlineFormattingContext::computeFloatPosition(const LayoutContext& layoutContext, const FloatingContext& floatingContext, Line& line, const Box& floatBox) const 201 { 202 ASSERT(layoutContext.hasDisplayBox(floatBox)); 203 auto& displayBox = layoutContext.displayBoxForLayoutBox(floatBox); 204 205 // Set static position first. 206 displayBox.setTopLeft({ line.contentLogicalRight(), line.logicalTop() }); 207 // Float it. 208 displayBox.setTopLeft(floatingContext.positionForFloat(floatBox)); 209 } 210 201 211 void InlineFormattingContext::computeStaticPosition(const LayoutContext&, const Box&) const 202 212 { -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h
r237453 r237454 93 93 void initializeNewLine(const LayoutContext&, Line&) const; 94 94 95 void computeWidthAndHeight(const LayoutContext&, const Box&) const; 95 void computeWidthAndHeight(LayoutContext&, const Box&) const; 96 void computeFloatPosition(const LayoutContext&, const FloatingContext&, Line&, const Box&) const; 96 97 void computeStaticPosition(const LayoutContext&, const Box&) const override; 97 98 void computeInFlowPositionedPosition(const LayoutContext&, const Box&) const override;
Note:
See TracChangeset
for help on using the changeset viewer.