Changeset 105694 in webkit


Ignore:
Timestamp:
Jan 23, 2012 10:26:54 PM (12 years ago)
Author:
ojan@chromium.org
Message:

Implement flex-pack:distribute
https://bugs.webkit.org/show_bug.cgi?id=76864

Reviewed by Tony Chang.

Source/WebCore:

See http://dev.w3.org/csswg/css3-flexbox/#flex-pack.

  • css/CSSParser.cpp:

(WebCore::CSSParser::parseValue):

  • css/CSSPrimitiveValueMappings.h:

(WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
(WebCore::CSSPrimitiveValue::operator EFlexPack):

  • css/CSSValueKeywords.in:
  • rendering/RenderFlexibleBox.cpp:

(WebCore::initialPackingOffset):
(WebCore::packingSpaceBetweenChildren):
(WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
(WebCore::RenderFlexibleBox::layoutColumnReverse):

  • rendering/style/RenderStyleConstants.h:
  • rendering/style/StyleFlexibleBoxData.h:

LayoutTests:

  • css3/flexbox/004-expected.txt:
  • css3/flexbox/004.html:
Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r105691 r105694  
     12012-01-23  Ojan Vafai  <ojan@chromium.org>
     2
     3        Implement flex-pack:distribute
     4        https://bugs.webkit.org/show_bug.cgi?id=76864
     5
     6        Reviewed by Tony Chang.
     7
     8        * css3/flexbox/004-expected.txt:
     9        * css3/flexbox/004.html:
     10
    1112012-01-23  Tom Sepez  <tsepez@chromium.org>
    212
  • trunk/LayoutTests/css3/flexbox/004-expected.txt

    r96851 r105694  
    66PASS
    77PASS
     8PASS
     9PASS
     10PASS
  • trunk/LayoutTests/css3/flexbox/004.html

    r96776 r105694  
    6161</div>
    6262
     63<div class="flexbox" style="-webkit-flex-pack: distribute">
     64  <div data-expected-width="100" data-offset-x="50" style="width: -webkit-flex(1 0 0); max-width: 100px;"></div>
     65  <div data-expected-width="100" data-offset-x="250" style="width: 100px;"></div>
     66  <div data-expected-width="100" data-offset-x="450" style="width: 100px;"></div>
     67</div>
     68
     69<!-- If there's only one child, we pack center. -->
     70<div class="flexbox" style="-webkit-flex-pack: distribute">
     71  <div data-expected-width="100" data-offset-x="250" style="width: -webkit-flex(1 0 0); max-width: 100px;"></div>
     72</div>
     73
     74<!-- Make sure we don't crash with no children. -->
     75<div class="flexbox" style="-webkit-flex-pack: distribute"></div>
     76
    6377<!-- margin:auto does nothing here. -->
    6478<div class="flexbox" style="-webkit-flex-pack: end">
  • trunk/Source/WebCore/ChangeLog

    r105693 r105694  
     12012-01-23  Ojan Vafai  <ojan@chromium.org>
     2
     3        Implement flex-pack:distribute
     4        https://bugs.webkit.org/show_bug.cgi?id=76864
     5
     6        Reviewed by Tony Chang.
     7
     8        See http://dev.w3.org/csswg/css3-flexbox/#flex-pack.
     9
     10        * css/CSSParser.cpp:
     11        (WebCore::CSSParser::parseValue):
     12        * css/CSSPrimitiveValueMappings.h:
     13        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
     14        (WebCore::CSSPrimitiveValue::operator EFlexPack):
     15        * css/CSSValueKeywords.in:
     16        * rendering/RenderFlexibleBox.cpp:
     17        (WebCore::initialPackingOffset):
     18        (WebCore::packingSpaceBetweenChildren):
     19        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
     20        (WebCore::RenderFlexibleBox::layoutColumnReverse):
     21        * rendering/style/RenderStyleConstants.h:
     22        * rendering/style/StyleFlexibleBoxData.h:
     23
    1242012-01-23  Luke Macpherson   <macpherson@chromium.org>
    225
  • trunk/Source/WebCore/css/CSSParser.cpp

    r105576 r105694  
    16371637        break;
    16381638    case CSSPropertyWebkitFlexPack:
    1639         validPrimitive = id == CSSValueStart || id == CSSValueEnd || id == CSSValueCenter || id == CSSValueJustify;
     1639        validPrimitive = id == CSSValueStart || id == CSSValueEnd || id == CSSValueCenter || id == CSSValueJustify || id == CSSValueDistribute;
    16401640        break;
    16411641    case CSSPropertyWebkitFlexAlign:
  • trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h

    r105693 r105694  
    12191219        m_value.ident = CSSValueJustify;
    12201220        break;
     1221    case PackDistribute:
     1222        m_value.ident = CSSValueDistribute;
     1223        break;
    12211224    }
    12221225}
     
    12331236    case CSSValueJustify:
    12341237        return PackJustify;
     1238    case CSSValueDistribute:
     1239        return PackDistribute;
    12351240    default:
    12361241        ASSERT_NOT_REACHED();
  • trunk/Source/WebCore/css/CSSValueKeywords.in

    r105429 r105694  
    493493// stretch
    494494
     495// CSS_PROP_FLEX_PACK
     496// start
     497// end
     498// center
     499// justify
     500distribute
     501
    495502// CSS_PROP_FLEX_FLOW
    496503row
  • trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp

    r105015 r105694  
    574574}
    575575
    576 static LayoutUnit initialPackingOffset(LayoutUnit availableFreeSpace, float totalPositiveFlexibility, EFlexPack flexPack)
     576static LayoutUnit initialPackingOffset(LayoutUnit availableFreeSpace, float totalPositiveFlexibility, EFlexPack flexPack, size_t numberOfChildren)
    577577{
    578578    if (hasPackingSpace(availableFreeSpace, totalPositiveFlexibility)) {
     
    581581        if (flexPack == PackCenter)
    582582            return availableFreeSpace / 2;
     583        if (flexPack == PackDistribute && numberOfChildren)
     584            return availableFreeSpace / (2 * numberOfChildren);
    583585    }
    584586    return 0;
     
    587589static LayoutUnit packingSpaceBetweenChildren(LayoutUnit availableFreeSpace, float totalPositiveFlexibility, EFlexPack flexPack, size_t numberOfChildren)
    588590{
    589     if (hasPackingSpace(availableFreeSpace, totalPositiveFlexibility) && flexPack == PackJustify && numberOfChildren > 1)
    590         return availableFreeSpace / (numberOfChildren - 1);
     591    if (hasPackingSpace(availableFreeSpace, totalPositiveFlexibility) && numberOfChildren > 1) {
     592        if (flexPack == PackJustify)
     593            return availableFreeSpace / (numberOfChildren - 1);
     594        if (flexPack == PackDistribute)
     595            return availableFreeSpace / numberOfChildren;
     596    }
    591597    return 0;
    592598}
     
    630636{
    631637    LayoutUnit mainAxisOffset = flowAwareBorderStart() + flowAwarePaddingStart();
    632     mainAxisOffset += initialPackingOffset(availableFreeSpace, totalPositiveFlexibility, style()->flexPack());
     638    mainAxisOffset += initialPackingOffset(availableFreeSpace, totalPositiveFlexibility, style()->flexPack(), childSizes.size());
    633639
    634640    LayoutUnit crossAxisOffset = flowAwareBorderBefore() + flowAwarePaddingBefore();
     
    693699    // just moving the children to a new position.
    694700    LayoutUnit mainAxisOffset = logicalHeight() - flowAwareBorderEnd() - flowAwarePaddingEnd();
    695     mainAxisOffset -= initialPackingOffset(availableFreeSpace, totalPositiveFlexibility, style()->flexPack());
     701    mainAxisOffset -= initialPackingOffset(availableFreeSpace, totalPositiveFlexibility, style()->flexPack(), childSizes.size());
    696702
    697703    LayoutUnit crossAxisOffset = flowAwareBorderBefore() + flowAwarePaddingBefore();
  • trunk/Source/WebCore/rendering/style/RenderStyleConstants.h

    r105429 r105694  
    177177// CSS3 Flexbox Properties
    178178
    179 enum EFlexPack { PackStart, PackEnd, PackCenter, PackJustify };
     179enum EFlexPack { PackStart, PackEnd, PackCenter, PackJustify, PackDistribute };
    180180enum EFlexAlign { AlignAuto, AlignStart, AlignEnd, AlignCenter, AlignStretch, AlignBaseline };
    181181enum EFlexDirection { FlowRow, FlowRowReverse, FlowColumn, FlowColumnReverse };
  • trunk/Source/WebCore/rendering/style/StyleFlexibleBoxData.h

    r105015 r105694  
    5050    int m_flexOrder;
    5151
    52     unsigned m_flexPack : 2; // EFlexPack
     52    unsigned m_flexPack : 3; // EFlexPack
    5353    unsigned m_flexAlign : 3; // EFlexAlign
    5454    unsigned m_flexItemAlign : 3; // EFlexAlign
Note: See TracChangeset for help on using the changeset viewer.