⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 237454 in webkit


Ignore:
Timestamp:
Oct 26, 2018, 7:36:30 AM (8 years ago)
Author:
Alan Bujtas
Message:

[LFC][IFC] Compute float box size and position
​https://bugs.webkit.org/show_bug.cgi?id=190938

Reviewed by Antti Koivisto.

  • layout/inlineformatting/InlineFormattingContext.cpp:

(WebCore::Layout::InlineFormattingContext::computeWidthAndHeight const):
(WebCore::Layout::InlineFormattingContext::computeFloatPosition const):

  • layout/inlineformatting/InlineFormattingContext.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r237453 r237454  
     12018-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
    1132018-10-26  Zalan Bujtas  <zalan@apple.com>
    214
  • trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp

    r237453 r237454  
    160160}
    161161
    162 void InlineFormattingContext::computeWidthAndHeight(const LayoutContext& layoutContext, const Box& layoutBox) const
     162void InlineFormattingContext::computeWidthAndHeight(LayoutContext& layoutContext, const Box& layoutBox) const
    163163{
    164164    if (is<InlineBox>(layoutBox) && downcast<InlineBox>(layoutBox).hasTextContent()) {
    … …  
    168168    }
    169169
    170     if (layoutBox.isFloatingPositioned()) {
    171         ASSERT_NOT_IMPLEMENTED_YET();
    172         return;
    173     }
    174 
    175170    if (layoutBox.isInlineBlockBox()) {
    176171        ASSERT_NOT_IMPLEMENTED_YET();
    … …  
    178173    }
    179174
    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));
    198197    return;
    199198}
    200199
     200void 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
    201211void InlineFormattingContext::computeStaticPosition(const LayoutContext&, const Box&) const
    202212{
  • trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h

    r237453 r237454  
    9393    void initializeNewLine(const LayoutContext&, Line&) const;
    9494
    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;
    9697    void computeStaticPosition(const LayoutContext&, const Box&) const override;
    9798    void computeInFlowPositionedPosition(const LayoutContext&, const Box&) const override;
Note: See TracChangeset for help on using the changeset viewer.