Changeset 107446 in webkit


Ignore:
Timestamp:
Feb 10, 2012 3:01:40 PM (12 years ago)
Author:
ojan@chromium.org
Message:

flex-pack:center and flex-item-align:center should do true centering
https://bugs.webkit.org/show_bug.cgi?id=77385

Reviewed by Tony Chang.

Source/WebCore:

Also, removed passing totalPositiveFlexibility around. We don't
need to know about positive/negative flex once we run the flexing algorithm.
We used to need to know this in order to flex margins, but margins can
no longer be flexed.

Test: css3/flexbox/true-centering.html

  • rendering/RenderFlexibleBox.cpp:

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

  • rendering/RenderFlexibleBox.h:

(RenderFlexibleBox):

LayoutTests:

  • css3/flexbox/true-centering-expected.txt: Added.
  • css3/flexbox/true-centering.html: Added.
Location:
trunk
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r107444 r107446  
     12012-02-10  Ojan Vafai  <ojan@chromium.org>
     2
     3        flex-pack:center and flex-item-align:center should do true centering
     4        https://bugs.webkit.org/show_bug.cgi?id=77385
     5
     6        Reviewed by Tony Chang.
     7
     8        * css3/flexbox/true-centering-expected.txt: Added.
     9        * css3/flexbox/true-centering.html: Added.
     10
    1112012-02-10  Tony Chang  <tony@chromium.org>
    212
  • trunk/Source/WebCore/ChangeLog

    r107445 r107446  
     12012-02-10  Ojan Vafai  <ojan@chromium.org>
     2
     3        flex-pack:center and flex-item-align:center should do true centering
     4        https://bugs.webkit.org/show_bug.cgi?id=77385
     5
     6        Reviewed by Tony Chang.
     7
     8        Also, removed passing totalPositiveFlexibility around. We don't
     9        need to know about positive/negative flex once we run the flexing algorithm.
     10        We used to need to know this in order to flex margins, but margins can
     11        no longer be flexed.
     12
     13        Test: css3/flexbox/true-centering.html
     14
     15        * rendering/RenderFlexibleBox.cpp:
     16        (WebCore::RenderFlexibleBox::layoutFlexItems):
     17        (WebCore::initialPackingOffset):
     18        (WebCore::packingSpaceBetweenChildren):
     19        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
     20        (WebCore::RenderFlexibleBox::layoutColumnReverse):
     21        * rendering/RenderFlexibleBox.h:
     22        (RenderFlexibleBox):
     23
    1242012-02-10  Mark Hahnenberg  <mhahnenberg@apple.com>
    225
  • trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp

    r107317 r107446  
    442442    }
    443443
    444     layoutAndPlaceChildren(orderedChildren, childSizes, availableFreeSpace, totalPositiveFlexibility);
     444    layoutAndPlaceChildren(orderedChildren, childSizes, availableFreeSpace);
    445445}
    446446
     
    572572}
    573573
    574 static bool hasPackingSpace(LayoutUnit availableFreeSpace, float totalPositiveFlexibility)
    575 {
    576     return availableFreeSpace > 0 && !totalPositiveFlexibility;
    577 }
    578 
    579 static LayoutUnit initialPackingOffset(LayoutUnit availableFreeSpace, float totalPositiveFlexibility, EFlexPack flexPack, size_t numberOfChildren)
    580 {
    581     if (hasPackingSpace(availableFreeSpace, totalPositiveFlexibility)) {
     574static LayoutUnit initialPackingOffset(LayoutUnit availableFreeSpace, EFlexPack flexPack, size_t numberOfChildren)
     575{
     576    if (availableFreeSpace > 0) {
    582577        if (flexPack == PackEnd)
    583578            return availableFreeSpace;
     
    586581        if (flexPack == PackDistribute && numberOfChildren)
    587582            return availableFreeSpace / (2 * numberOfChildren);
     583    } else if (availableFreeSpace < 0) {
     584        if (flexPack == PackCenter || flexPack == PackDistribute)
     585            return availableFreeSpace / 2;
    588586    }
    589587    return 0;
    590588}
    591589
    592 static LayoutUnit packingSpaceBetweenChildren(LayoutUnit availableFreeSpace, float totalPositiveFlexibility, EFlexPack flexPack, size_t numberOfChildren)
    593 {
    594     if (hasPackingSpace(availableFreeSpace, totalPositiveFlexibility) && numberOfChildren > 1) {
     590static LayoutUnit packingSpaceBetweenChildren(LayoutUnit availableFreeSpace, EFlexPack flexPack, size_t numberOfChildren)
     591{
     592    if (availableFreeSpace > 0 && numberOfChildren > 1) {
    595593        if (flexPack == PackJustify)
    596594            return availableFreeSpace / (numberOfChildren - 1);
     
    636634}
    637635
    638 void RenderFlexibleBox::layoutAndPlaceChildren(const OrderedFlexItemList& children, const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace, float totalPositiveFlexibility)
     636void RenderFlexibleBox::layoutAndPlaceChildren(const OrderedFlexItemList& children, const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace)
    639637{
    640638    LayoutUnit mainAxisOffset = flowAwareBorderStart() + flowAwarePaddingStart();
    641     mainAxisOffset += initialPackingOffset(availableFreeSpace, totalPositiveFlexibility, style()->flexPack(), childSizes.size());
     639    mainAxisOffset += initialPackingOffset(availableFreeSpace, style()->flexPack(), childSizes.size());
    642640    if (style()->flexDirection() == FlowRowReverse)
    643641        mainAxisOffset += isHorizontalFlow() ? verticalScrollbarWidth() : horizontalScrollbarHeight();
     
    651649        if (child->isPositioned()) {
    652650            prepareChildForPositionedLayout(child, mainAxisOffset, crossAxisOffset);
    653             mainAxisOffset += packingSpaceBetweenChildren(availableFreeSpace, totalPositiveFlexibility, style()->flexPack(), childSizes.size());
     651            mainAxisOffset += packingSpaceBetweenChildren(availableFreeSpace, style()->flexPack(), childSizes.size());
    654652            continue;
    655653        }
     
    681679        mainAxisOffset += childMainExtent + flowAwareMarginEndForChild(child);
    682680
    683         mainAxisOffset += packingSpaceBetweenChildren(availableFreeSpace, totalPositiveFlexibility, style()->flexPack(), childSizes.size());
     681        mainAxisOffset += packingSpaceBetweenChildren(availableFreeSpace, style()->flexPack(), childSizes.size());
    684682
    685683        if (isColumnFlow())
     
    691689        // on the height of the flexbox, which we only know after we've positioned all the flex items.
    692690        computeLogicalHeight();
    693         layoutColumnReverse(children, childSizes, availableFreeSpace, totalPositiveFlexibility);
     691        layoutColumnReverse(children, childSizes, availableFreeSpace);
    694692    }
    695693
     
    697695}
    698696
    699 void RenderFlexibleBox::layoutColumnReverse(const OrderedFlexItemList& children, const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace, float totalPositiveFlexibility)
     697void RenderFlexibleBox::layoutColumnReverse(const OrderedFlexItemList& children, const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace)
    700698{
    701699    // This is similar to the logic in layoutAndPlaceChildren, except we place the children
     
    703701    // just moving the children to a new position.
    704702    LayoutUnit mainAxisOffset = logicalHeight() - flowAwareBorderEnd() - flowAwarePaddingEnd();
    705     mainAxisOffset -= initialPackingOffset(availableFreeSpace, totalPositiveFlexibility, style()->flexPack(), childSizes.size());
     703    mainAxisOffset -= initialPackingOffset(availableFreeSpace, style()->flexPack(), childSizes.size());
    706704    mainAxisOffset -= isHorizontalFlow() ? verticalScrollbarWidth() : horizontalScrollbarHeight();
    707705
     
    711709        if (child->isPositioned()) {
    712710            child->layer()->setStaticBlockPosition(mainAxisOffset);
    713             mainAxisOffset -= packingSpaceBetweenChildren(availableFreeSpace, totalPositiveFlexibility, style()->flexPack(), childSizes.size());
     711            mainAxisOffset -= packingSpaceBetweenChildren(availableFreeSpace, style()->flexPack(), childSizes.size());
    714712            continue;
    715713        }
     
    722720
    723721        mainAxisOffset -= flowAwareMarginStartForChild(child);
    724         mainAxisOffset -= packingSpaceBetweenChildren(availableFreeSpace, totalPositiveFlexibility, style()->flexPack(), childSizes.size());
     722        mainAxisOffset -= packingSpaceBetweenChildren(availableFreeSpace, style()->flexPack(), childSizes.size());
    725723    }
    726724}
  • trunk/Source/WebCore/rendering/RenderFlexibleBox.h

    r107317 r107446  
    104104    void setLogicalOverrideSize(RenderBox* child, LayoutUnit childPreferredSize);
    105105    void prepareChildForPositionedLayout(RenderBox* child, LayoutUnit mainAxisOffset, LayoutUnit crossAxisOffset);
    106     void layoutAndPlaceChildren(const OrderedFlexItemList&, const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace, float totalPositiveFlexibility);
    107     void layoutColumnReverse(const OrderedFlexItemList&, const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace, float totalPositiveFlexibility);
     106    void layoutAndPlaceChildren(const OrderedFlexItemList&, const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace);
     107    void layoutColumnReverse(const OrderedFlexItemList&, const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace);
    108108    void alignChildren(const OrderedFlexItemList&, LayoutUnit maxAscent);
    109109};
Note: See TracChangeset for help on using the changeset viewer.