Changeset 294983 in webkit


Ignore:
Timestamp:
May 27, 2022 9:10:06 PM (2 years ago)
Author:
Alan Bujtas
Message:

Introduce base-size to the flex algorithm
https://bugs.webkit.org/show_bug.cgi?id=241001

Reviewed by Antti Koivisto.

This is in preparation for supporting flex-basis, where the flex-basis value is used as the base for flexing.

  • Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.cpp:

(WebCore::Layout::FlexFormattingContext::computeLogicalWidthForShrinkingFlexItems):
(WebCore::Layout::FlexFormattingContext::computeLogicalWidthForFlexItems):

Canonical link: https://commits.webkit.org/251087@main

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.cpp

    r294904 r294983  
    218218        // don't participate in content flexing.
    219219        for (size_t index = 0; index < logicalFlexItemList.size(); ++index) {
    220             auto& logicalFlexItem = logicalFlexItemList[index];
    221             if (auto flexShrink = logicalFlexItem.layoutBox->style().flexShrink()) {
     220            auto& flexItem = logicalFlexItemList[index];
     221            auto baseSize = flexItem.rect.width();
     222            if (auto flexShrink = flexItem.layoutBox->style().flexShrink()) {
    222223                shrinkingItems.append(index);
    223                 totalShrink += flexShrink;
    224                 totalFlexibleSpace += logicalFlexItem.rect.width();
     224                totalShrink += flexShrink * baseSize;
     225                totalFlexibleSpace += baseSize;
    225226            } else
    226                 availableSpace -= logicalFlexItem.rect.width();
     227                availableSpace -= baseSize;
    227228        }
    228229        if (totalShrink)
     
    237238            auto& flexItem = logicalFlexItemList[flexItemIndex];
    238239
    239             auto flexShrink = flexItem.layoutBox->style().flexShrink();
    240             auto flexedSize = flexItem.rect.width() - (flexShrink * flexShrinkBase);
     240            auto baseSize = flexItem.rect.width();
     241            auto flexShrink = flexItem.layoutBox->style().flexShrink() * baseSize;
     242            auto flexedSize = baseSize - (flexShrink * flexShrinkBase);
    241243            auto minimumSize = formattingState.intrinsicWidthConstraintsForBox(*flexItem.layoutBox)->minimum;
    242244            if (minimumSize >= flexedSize) {
    243245                totalShrink -= flexShrink;
    244                 totalFlexibleSpace -= flexItem.rect.width();
     246                totalFlexibleSpace -= baseSize;
    245247                availableSpace -= minimumSize;
    246248            }
     
    255257            auto& flexItem = logicalFlexItemList[flexItemIndex];
    256258
    257             auto flexShrink = flexItem.layoutBox->style().flexShrink();
    258             auto flexedSize = LayoutUnit { flexItem.rect.width() - (flexShrink * flexShrinkBase) };
     259            auto baseSize = flexItem.rect.width();
     260            auto flexShrink = flexItem.layoutBox->style().flexShrink() * baseSize;
     261            auto flexedSize = LayoutUnit { baseSize - (flexShrink * flexShrinkBase) };
    259262            auto minimumSize = formattingState.intrinsicWidthConstraintsForBox(*flexItem.layoutBox)->minimum;
    260263            flexItem.rect.setWidth(std::max(minimumSize, flexedSize));
     
    341344            logicalWidth += logicalFlexItem.rect.width();
    342345        return logicalWidth;
    343     };
     346    }();
    344347
    345348    if (!availableSpace)
    346349        ASSERT_NOT_IMPLEMENTED_YET();
    347     else if (*availableSpace > contentLogicalWidth())
     350    else if (*availableSpace > contentLogicalWidth)
    348351        computeLogicalWidthForStretchingFlexItems(logicalFlexItemList, *availableSpace);
    349     else
     352    else if (*availableSpace < contentLogicalWidth)
    350353        computeLogicalWidthForShrinkingFlexItems(logicalFlexItemList, *availableSpace);
    351354}
Note: See TracChangeset for help on using the changeset viewer.