Changeset 107179 in webkit


Ignore:
Timestamp:
Feb 8, 2012 9:57:14 PM (12 years ago)
Author:
tony@chromium.org
Message:

refactor RenderFlexibleBox to return preferred sizes of all children
https://bugs.webkit.org/show_bug.cgi?id=78169

Reviewed by Ojan Vafai.

This is in preparation for multi-line flexbox. We need the preferred
size of each child so we can compute where the multi-line breaks happen.

No new tests, just refactoring.

  • rendering/RenderFlexibleBox.cpp:

(WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild): Renamed from preferredMainAxisContentExtentForFlexItem because
other methods are ForChild rather than ForFlexItem.
(WebCore::RenderFlexibleBox::layoutFlexItems):
(WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
(WebCore::RenderFlexibleBox::runFreeSpaceAllocationAlgorithm):

  • rendering/RenderFlexibleBox.h:

(RenderFlexibleBox):

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r107178 r107179  
     12012-02-08  Tony Chang  <tony@chromium.org>
     2
     3        refactor RenderFlexibleBox to return preferred sizes of all children
     4        https://bugs.webkit.org/show_bug.cgi?id=78169
     5
     6        Reviewed by Ojan Vafai.
     7
     8        This is in preparation for multi-line flexbox. We need the preferred
     9        size of each child so we can compute where the multi-line breaks happen.
     10
     11        No new tests, just refactoring.
     12
     13        * rendering/RenderFlexibleBox.cpp:
     14        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild): Renamed from preferredMainAxisContentExtentForFlexItem because
     15        other methods are ForChild rather than ForFlexItem.
     16        (WebCore::RenderFlexibleBox::layoutFlexItems):
     17        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
     18        (WebCore::RenderFlexibleBox::runFreeSpaceAllocationAlgorithm):
     19        * rendering/RenderFlexibleBox.h:
     20        (RenderFlexibleBox):
     21
    1222012-02-08  Shinya Kawanaka  <shinyak@google.com>
    223
  • trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp

    r106694 r107179  
    454454}
    455455
    456 LayoutUnit RenderFlexibleBox::preferredMainAxisContentExtentForFlexItem(RenderBox* child) const
     456LayoutUnit RenderFlexibleBox::preferredMainAxisContentExtentForChild(RenderBox* child) const
    457457{
    458458    Length mainAxisLength = mainAxisLengthForChild(child);
     
    466466void RenderFlexibleBox::layoutFlexItems(bool relayoutChildren)
    467467{
    468     LayoutUnit preferredMainAxisExtent;
    469468    float totalPositiveFlexibility;
    470469    float totalNegativeFlexibility;
    471470    TreeOrderIterator treeIterator(this);
    472471
    473     computePreferredMainAxisExtent(relayoutChildren, treeIterator, preferredMainAxisExtent, totalPositiveFlexibility, totalNegativeFlexibility);
     472    WTF::Vector<LayoutUnit> preferredSizes;
     473    computeMainAxisPreferredSizes(relayoutChildren, treeIterator, preferredSizes, totalPositiveFlexibility, totalNegativeFlexibility);
     474    LayoutUnit preferredMainAxisExtent = 0;
     475    for (size_t i = 0; i < preferredSizes.size(); ++i)
     476        preferredMainAxisExtent += preferredSizes[i];
    474477    LayoutUnit availableFreeSpace = mainAxisContentExtent() - preferredMainAxisExtent;
    475478
     
    510513}
    511514
    512 void RenderFlexibleBox::computePreferredMainAxisExtent(bool relayoutChildren, TreeOrderIterator& iterator, LayoutUnit& preferredMainAxisExtent, float& totalPositiveFlexibility, float& totalNegativeFlexibility)
    513 {
    514     preferredMainAxisExtent = 0;
     515void RenderFlexibleBox::computeMainAxisPreferredSizes(bool relayoutChildren, TreeOrderIterator& iterator, WTF::Vector<LayoutUnit>& preferredSizes, float& totalPositiveFlexibility, float& totalNegativeFlexibility)
     516{
    515517    totalPositiveFlexibility = totalNegativeFlexibility = 0;
    516518
    517519    LayoutUnit flexboxAvailableContentExtent = mainAxisContentExtent();
    518520    for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
    519         if (child->isPositioned())
     521        if (child->isPositioned()) {
     522            preferredSizes.append(0);
    520523            continue;
     524        }
    521525
    522526        child->clearOverrideSize();
     
    526530            child->layoutIfNeeded();
    527531        }
     532
     533        LayoutUnit preferredSize = mainAxisBorderAndPaddingExtentForChild(child) + preferredMainAxisContentExtentForChild(child);
    528534
    529535        // We set the margins because we want to make sure 'auto' has a margin
     
    533539            child->setMarginLeft(child->style()->marginLeft().calcMinValue(flexboxAvailableContentExtent));
    534540            child->setMarginRight(child->style()->marginRight().calcMinValue(flexboxAvailableContentExtent));
    535             preferredMainAxisExtent += child->marginLeft() + child->marginRight();
     541            preferredSize += child->marginLeft() + child->marginRight();
    536542        } else {
    537543            child->setMarginTop(child->style()->marginTop().calcMinValue(flexboxAvailableContentExtent));
    538544            child->setMarginBottom(child->style()->marginBottom().calcMinValue(flexboxAvailableContentExtent));
    539             preferredMainAxisExtent += child->marginTop() + child->marginBottom();
    540         }
    541 
    542         preferredMainAxisExtent += mainAxisBorderAndPaddingExtentForChild(child);
    543         preferredMainAxisExtent += preferredMainAxisContentExtentForFlexItem(child);
     545            preferredSize += child->marginTop() + child->marginBottom();
     546        }
     547
     548        preferredSizes.append(preferredSize);
    544549
    545550        totalPositiveFlexibility += positiveFlexForChild(child);
     
    564569            childPreferredSize = inflexibleItems.get(child);
    565570        else {
    566             childPreferredSize = preferredMainAxisContentExtentForFlexItem(child);
     571            childPreferredSize = preferredMainAxisContentExtentForChild(child);
    567572            if (availableFreeSpace > 0 && totalPositiveFlexibility > 0) {
    568573                childPreferredSize += lroundf(availableFreeSpace * positiveFlexForChild(child) / totalPositiveFlexibility);
     
    571576                if (!childLogicalMaxWidth.isUndefined() && childLogicalMaxWidth.isSpecified() && childPreferredSize > childLogicalMaxWidth.calcValue(flexboxAvailableContentExtent)) {
    572577                    childPreferredSize = childLogicalMaxWidth.calcValue(flexboxAvailableContentExtent);
    573                     availableFreeSpace -= childPreferredSize - preferredMainAxisContentExtentForFlexItem(child);
     578                    availableFreeSpace -= childPreferredSize - preferredMainAxisContentExtentForChild(child);
    574579                    totalPositiveFlexibility -= positiveFlexForChild(child);
    575580
     
    583588                if (!childLogicalMinWidth.isUndefined() && childLogicalMinWidth.isSpecified() && childPreferredSize < childLogicalMinWidth.calcValue(flexboxAvailableContentExtent)) {
    584589                    childPreferredSize = childLogicalMinWidth.calcValue(flexboxAvailableContentExtent);
    585                     availableFreeSpace += preferredMainAxisContentExtentForFlexItem(child) - childPreferredSize;
     590                    availableFreeSpace += preferredMainAxisContentExtentForChild(child) - childPreferredSize;
    586591                    totalNegativeFlexibility -= negativeFlexForChild(child);
    587592
  • trunk/Source/WebCore/rendering/RenderFlexibleBox.h

    r106129 r107179  
    8686    LayoutUnit mainAxisBorderAndPaddingExtentForChild(RenderBox* child) const;
    8787    LayoutUnit mainAxisScrollbarExtentForChild(RenderBox* child) const;
    88     LayoutUnit preferredMainAxisContentExtentForFlexItem(RenderBox* child) const;
     88    LayoutUnit preferredMainAxisContentExtentForChild(RenderBox* child) const;
    8989
    9090    void layoutFlexItems(bool relayoutChildren);
     
    9696    LayoutUnit marginBoxAscent(RenderBox*);
    9797
    98     void computePreferredMainAxisExtent(bool relayoutChildren, TreeOrderIterator&, LayoutUnit&, float& totalPositiveFlexibility, float& totalNegativeFlexibility);
     98    void computeMainAxisPreferredSizes(bool relayoutChildren, TreeOrderIterator&, WTF::Vector<LayoutUnit>&, float& totalPositiveFlexibility, float& totalNegativeFlexibility);
    9999    bool runFreeSpaceAllocationAlgorithm(FlexOrderIterator&, LayoutUnit& availableFreeSpace, float& totalPositiveFlexibility, float& totalNegativeFlexibility, InflexibleFlexItemSize&, WTF::Vector<LayoutUnit>& childSizes);
    100100    void setLogicalOverrideSize(RenderBox* child, LayoutUnit childPreferredSize);
Note: See TracChangeset for help on using the changeset viewer.