Changeset 209068 in webkit


Ignore:
Timestamp:
Nov 29, 2016 8:04:41 AM (7 years ago)
Author:
Alan Bujtas
Message:

Safari (WebKit) doesn't wrap element within flex when width comes below min-width
https://bugs.webkit.org/show_bug.cgi?id=136041
<rdar://problem/25569370>

Reviewed by Darin Adler.

Source/WebCore:

While figuring out whether a particular flex item fits the current line, we need to take
the min-width into account too. This matches both FF and Chrome behaviour.

Tests: fast/flexbox/flex-wrap-when-min-widht-is-set-1.html

fast/flexbox/flex-wrap-when-min-widht-is-set-2.html

  • rendering/RenderFlexibleBox.cpp:

(WebCore::RenderFlexibleBox::computeNextFlexLine):

LayoutTests:

  • fast/flexbox/flex-wrap-when-min-widht-is-set-1-expected.html: Added.
  • fast/flexbox/flex-wrap-when-min-widht-is-set-1.html: Added.
  • fast/flexbox/flex-wrap-when-min-widht-is-set-2-expected.html: Added.
  • fast/flexbox/flex-wrap-when-min-widht-is-set-2.html: Added.
Location:
trunk
Files:
4 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r209065 r209068  
     12016-11-29  Zalan Bujtas  <zalan@apple.com>
     2
     3        Safari (WebKit) doesn't wrap element within flex when width comes below min-width
     4        https://bugs.webkit.org/show_bug.cgi?id=136041
     5        <rdar://problem/25569370>
     6
     7        Reviewed by Darin Adler.
     8
     9        * fast/flexbox/flex-wrap-when-min-widht-is-set-1-expected.html: Added.
     10        * fast/flexbox/flex-wrap-when-min-widht-is-set-1.html: Added.
     11        * fast/flexbox/flex-wrap-when-min-widht-is-set-2-expected.html: Added.
     12        * fast/flexbox/flex-wrap-when-min-widht-is-set-2.html: Added.
     13
    1142016-11-28  Antti Koivisto  <antti@apple.com>
    215
  • trunk/Source/WebCore/ChangeLog

    r209066 r209068  
     12016-11-29  Zalan Bujtas  <zalan@apple.com>
     2
     3        Safari (WebKit) doesn't wrap element within flex when width comes below min-width
     4        https://bugs.webkit.org/show_bug.cgi?id=136041
     5        <rdar://problem/25569370>
     6
     7        Reviewed by Darin Adler.
     8
     9        While figuring out whether a particular flex item fits the current line, we need to take
     10        the min-width into account too. This matches both FF and Chrome behaviour.
     11
     12        Tests: fast/flexbox/flex-wrap-when-min-widht-is-set-1.html
     13               fast/flexbox/flex-wrap-when-min-widht-is-set-2.html
     14
     15        * rendering/RenderFlexibleBox.cpp:
     16        (WebCore::RenderFlexibleBox::computeNextFlexLine):
     17
    1182016-11-29  Antti Koivisto  <antti@apple.com>
    219
  • trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp

    r208985 r209068  
    984984    bool lineHasInFlowItem = false;
    985985
     986    LayoutUnit preferredMainAxisExtentWithMinWidthConstraint;
    986987    for (RenderBox* child = m_orderIterator.currentChild(); child; child = m_orderIterator.next()) {
    987988        if (child->isOutOfFlowPositioned()) {
     
    991992
    992993        LayoutUnit childMainAxisExtent = preferredMainAxisContentExtentForChild(*child, hasInfiniteLineLength);
    993         LayoutUnit childMainAxisMarginBoxExtent = mainAxisBorderAndPaddingExtentForChild(*child) + childMainAxisExtent;
    994         childMainAxisMarginBoxExtent += isHorizontalFlow() ? child->horizontalMarginExtent() : child->verticalMarginExtent();
    995 
    996         if (isMultiline() && preferredMainAxisExtent + childMainAxisMarginBoxExtent > lineBreakLength && lineHasInFlowItem)
     994        LayoutUnit borderMarginAndPaddingSpace = mainAxisBorderAndPaddingExtentForChild(*child) + (isHorizontalFlow() ? child->horizontalMarginExtent() : child->verticalMarginExtent());
     995
     996        LayoutUnit childMainAxisExtentWithMinWidthConstraint = childMainAxisExtent;
     997        if (child->style().logicalMinWidth().isSpecifiedOrIntrinsic()) {
     998            if (auto minWidthForChild = computeMainAxisExtentForChild(*child, MinSize, child->style().logicalMinWidth()))
     999                childMainAxisExtentWithMinWidthConstraint = std::max(childMainAxisExtent, minWidthForChild.value());
     1000        }
     1001        preferredMainAxisExtentWithMinWidthConstraint += childMainAxisExtentWithMinWidthConstraint + borderMarginAndPaddingSpace;
     1002
     1003        if (isMultiline() && preferredMainAxisExtentWithMinWidthConstraint > lineBreakLength && lineHasInFlowItem)
    9971004            break;
    9981005        orderedChildren.append(child);
    9991006        lineHasInFlowItem  = true;
    1000         preferredMainAxisExtent += childMainAxisMarginBoxExtent;
     1007
     1008        preferredMainAxisExtent += childMainAxisExtent + borderMarginAndPaddingSpace;
    10011009        totalFlexGrow += child->style().flexGrow();
    10021010        totalWeightedFlexShrink += child->style().flexShrink() * childMainAxisExtent;
    10031011
    10041012        LayoutUnit childMinMaxAppliedMainAxisExtent = adjustChildSizeForMinAndMax(*child, childMainAxisExtent);
    1005         minMaxAppliedMainAxisExtent += childMinMaxAppliedMainAxisExtent - childMainAxisExtent + childMainAxisMarginBoxExtent;
     1013        minMaxAppliedMainAxisExtent += childMinMaxAppliedMainAxisExtent + borderMarginAndPaddingSpace;
    10061014    }
    10071015    return true;
Note: See TracChangeset for help on using the changeset viewer.