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

Changeset 286096 in webkit


Ignore:
Timestamp:
Nov 20, 2021, 6:43:28 AM (5 years ago)
Author:
Alan Bujtas
Message:

[IFC][Integration] Initialize layout box geometries for preferred width computation
https://bugs.webkit.org/show_bug.cgi?id=233386

Reviewed by Antti Koivisto.

Initializing certain geometries (e.g. inline box margin/border/padding) is required for the integration
codepath the same way we do it for the actual line layout.

  • layout/formattingContexts/inline/InlineFormattingContext.cpp: Add a dedicated integration codepath for preferred width

computation using the preset geometry values.
(WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraintsForIntegration):

  • layout/formattingContexts/inline/InlineFormattingContext.h:
  • rendering/RenderBlockFlow.cpp:

(WebCore::RenderBlockFlow::tryComputePreferredWidthsUsingModernPath):

Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r286094 r286096  
     12021-11-20  Alan Bujtas  <zalan@apple.com>
     2
     3        [IFC][Integration] Initialize layout box geometries for preferred width computation
     4        https://bugs.webkit.org/show_bug.cgi?id=233386
     5
     6        Reviewed by Antti Koivisto.
     7
     8        Initializing certain geometries (e.g. inline box margin/border/padding) is required for the integration
     9        codepath the same way we do it for the actual line layout.
     10
     11        * layout/formattingContexts/inline/InlineFormattingContext.cpp: Add a dedicated integration codepath for preferred width
     12        computation using the preset geometry values.
     13        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraintsForIntegration):
     14        * layout/formattingContexts/inline/InlineFormattingContext.h:
     15        * rendering/RenderBlockFlow.cpp:
     16        (WebCore::RenderBlockFlow::tryComputePreferredWidthsUsingModernPath):
     17
    1182021-11-20  Carlos Garcia Campos  <cgarcia@igalia.com>
    219
  • trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp

    r285956 r286096  
    158158}
    159159
     160IntrinsicWidthConstraints InlineFormattingContext::computedIntrinsicWidthConstraintsForIntegration()
     161{
     162    if (formattingState().intrinsicWidthConstraints())
     163        return *formattingState().intrinsicWidthConstraints();
     164
     165    collectContentIfNeeded();
     166
     167    auto constraints = formattingGeometry().constrainByMinMaxWidth(root(),
     168        { ceiledLayoutUnit(computedIntrinsicWidthForConstraint(IntrinsicWidthMode::Minimum))
     169        , ceiledLayoutUnit(computedIntrinsicWidthForConstraint(IntrinsicWidthMode::Maximum)) });
     170    formattingState().setIntrinsicWidthConstraints(constraints);
     171    return constraints;
     172}
     173
    160174LayoutUnit InlineFormattingContext::usedContentHeight() const
    161175{
  • trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.h

    r285956 r286096  
    5555
    5656    void lineLayoutForIntergration(const ConstraintsForInFlowContent&);
     57    IntrinsicWidthConstraints computedIntrinsicWidthConstraintsForIntegration();
    5758
    5859    const InlineFormattingGeometry& formattingGeometry() const final { return m_inlineFormattingGeometry; }
  • trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp

    r285782 r286096  
    221221{
    222222    auto inlineFormattingContext = Layout::InlineFormattingContext { rootLayoutBox(), m_inlineFormattingState, nullptr };
    223     auto constraints = inlineFormattingContext.computedIntrinsicWidthConstraints();
     223    auto constraints = inlineFormattingContext.computedIntrinsicWidthConstraintsForIntegration();
    224224
    225225    return { constraints.minimum, constraints.maximum };
  • trunk/Source/WebCore/rendering/RenderBlockFlow.cpp

    r286024 r286096  
    45814581        m_lineLayout = makeUnique<LayoutIntegration::LineLayout>(*this);
    45824582
     4583#if ENABLE_MODERN_PREFERRED_WIDTH_COMPUTATION_FOR_INLINE_BOXES
     4584    auto& layoutFormattingContextLineLayout = *this->modernLineLayout();
     4585    for (auto walker = InlineWalker(*this); !walker.atEnd(); walker.advance()) {
     4586        auto& renderer = *walker.current();
     4587        if (renderer.isText() || is<RenderLineBreak>(renderer))
     4588            continue;
     4589        if (is<RenderInline>(renderer)) {
     4590            layoutFormattingContextLineLayout.updateInlineBoxDimensions(downcast<RenderInline>(renderer));
     4591            continue;
     4592        }
     4593        // FIXME: Add other, inline level box cases.
     4594        ASSERT_NOT_IMPLEMENTED_YET();
     4595    }
     4596#endif
     4597
    45834598    std::tie(minLogicalWidth, maxLogicalWidth) = modernLineLayout()->computeIntrinsicWidthConstraints();
    45844599    for (auto walker = InlineWalker(*this); !walker.atEnd(); walker.advance())
Note: See TracChangeset for help on using the changeset viewer.