Changeset 107179 in webkit
- Timestamp:
- Feb 8, 2012 9:57:14 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r107178 r107179 1 2012-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 1 22 2012-02-08 Shinya Kawanaka <shinyak@google.com> 2 23 -
trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp
r106694 r107179 454 454 } 455 455 456 LayoutUnit RenderFlexibleBox::preferredMainAxisContentExtentFor FlexItem(RenderBox* child) const456 LayoutUnit RenderFlexibleBox::preferredMainAxisContentExtentForChild(RenderBox* child) const 457 457 { 458 458 Length mainAxisLength = mainAxisLengthForChild(child); … … 466 466 void RenderFlexibleBox::layoutFlexItems(bool relayoutChildren) 467 467 { 468 LayoutUnit preferredMainAxisExtent;469 468 float totalPositiveFlexibility; 470 469 float totalNegativeFlexibility; 471 470 TreeOrderIterator treeIterator(this); 472 471 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]; 474 477 LayoutUnit availableFreeSpace = mainAxisContentExtent() - preferredMainAxisExtent; 475 478 … … 510 513 } 511 514 512 void RenderFlexibleBox::computePreferredMainAxisExtent(bool relayoutChildren, TreeOrderIterator& iterator, LayoutUnit& preferredMainAxisExtent, float& totalPositiveFlexibility, float& totalNegativeFlexibility) 513 { 514 preferredMainAxisExtent = 0; 515 void RenderFlexibleBox::computeMainAxisPreferredSizes(bool relayoutChildren, TreeOrderIterator& iterator, WTF::Vector<LayoutUnit>& preferredSizes, float& totalPositiveFlexibility, float& totalNegativeFlexibility) 516 { 515 517 totalPositiveFlexibility = totalNegativeFlexibility = 0; 516 518 517 519 LayoutUnit flexboxAvailableContentExtent = mainAxisContentExtent(); 518 520 for (RenderBox* child = iterator.first(); child; child = iterator.next()) { 519 if (child->isPositioned()) 521 if (child->isPositioned()) { 522 preferredSizes.append(0); 520 523 continue; 524 } 521 525 522 526 child->clearOverrideSize(); … … 526 530 child->layoutIfNeeded(); 527 531 } 532 533 LayoutUnit preferredSize = mainAxisBorderAndPaddingExtentForChild(child) + preferredMainAxisContentExtentForChild(child); 528 534 529 535 // We set the margins because we want to make sure 'auto' has a margin … … 533 539 child->setMarginLeft(child->style()->marginLeft().calcMinValue(flexboxAvailableContentExtent)); 534 540 child->setMarginRight(child->style()->marginRight().calcMinValue(flexboxAvailableContentExtent)); 535 preferred MainAxisExtent+= child->marginLeft() + child->marginRight();541 preferredSize += child->marginLeft() + child->marginRight(); 536 542 } else { 537 543 child->setMarginTop(child->style()->marginTop().calcMinValue(flexboxAvailableContentExtent)); 538 544 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); 544 549 545 550 totalPositiveFlexibility += positiveFlexForChild(child); … … 564 569 childPreferredSize = inflexibleItems.get(child); 565 570 else { 566 childPreferredSize = preferredMainAxisContentExtentFor FlexItem(child);571 childPreferredSize = preferredMainAxisContentExtentForChild(child); 567 572 if (availableFreeSpace > 0 && totalPositiveFlexibility > 0) { 568 573 childPreferredSize += lroundf(availableFreeSpace * positiveFlexForChild(child) / totalPositiveFlexibility); … … 571 576 if (!childLogicalMaxWidth.isUndefined() && childLogicalMaxWidth.isSpecified() && childPreferredSize > childLogicalMaxWidth.calcValue(flexboxAvailableContentExtent)) { 572 577 childPreferredSize = childLogicalMaxWidth.calcValue(flexboxAvailableContentExtent); 573 availableFreeSpace -= childPreferredSize - preferredMainAxisContentExtentFor FlexItem(child);578 availableFreeSpace -= childPreferredSize - preferredMainAxisContentExtentForChild(child); 574 579 totalPositiveFlexibility -= positiveFlexForChild(child); 575 580 … … 583 588 if (!childLogicalMinWidth.isUndefined() && childLogicalMinWidth.isSpecified() && childPreferredSize < childLogicalMinWidth.calcValue(flexboxAvailableContentExtent)) { 584 589 childPreferredSize = childLogicalMinWidth.calcValue(flexboxAvailableContentExtent); 585 availableFreeSpace += preferredMainAxisContentExtentFor FlexItem(child) - childPreferredSize;590 availableFreeSpace += preferredMainAxisContentExtentForChild(child) - childPreferredSize; 586 591 totalNegativeFlexibility -= negativeFlexForChild(child); 587 592 -
trunk/Source/WebCore/rendering/RenderFlexibleBox.h
r106129 r107179 86 86 LayoutUnit mainAxisBorderAndPaddingExtentForChild(RenderBox* child) const; 87 87 LayoutUnit mainAxisScrollbarExtentForChild(RenderBox* child) const; 88 LayoutUnit preferredMainAxisContentExtentFor FlexItem(RenderBox* child) const;88 LayoutUnit preferredMainAxisContentExtentForChild(RenderBox* child) const; 89 89 90 90 void layoutFlexItems(bool relayoutChildren); … … 96 96 LayoutUnit marginBoxAscent(RenderBox*); 97 97 98 void compute PreferredMainAxisExtent(bool relayoutChildren, TreeOrderIterator&, LayoutUnit&, float& totalPositiveFlexibility, float& totalNegativeFlexibility);98 void computeMainAxisPreferredSizes(bool relayoutChildren, TreeOrderIterator&, WTF::Vector<LayoutUnit>&, float& totalPositiveFlexibility, float& totalNegativeFlexibility); 99 99 bool runFreeSpaceAllocationAlgorithm(FlexOrderIterator&, LayoutUnit& availableFreeSpace, float& totalPositiveFlexibility, float& totalNegativeFlexibility, InflexibleFlexItemSize&, WTF::Vector<LayoutUnit>& childSizes); 100 100 void setLogicalOverrideSize(RenderBox* child, LayoutUnit childPreferredSize);
Note: See TracChangeset
for help on using the changeset viewer.