Changeset 104645 in webkit
- Timestamp:
- Jan 10, 2012 3:52:56 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r104642 r104645 1 2012-01-10 Tony Chang <tony@chromium.org> 2 3 Need to handle absolutely positioned elements inside flexboxes 4 https://bugs.webkit.org/show_bug.cgi?id=70793 5 6 Reviewed by David Hyatt. 7 8 * css3/flexbox/insert-text-crash-expected.txt: Added. 9 * css3/flexbox/insert-text-crash.html: Added. 10 * css3/flexbox/position-absolute-child-expected.txt: Added. 11 * css3/flexbox/position-absolute-child.html: Added. 12 1 13 2012-01-10 Ryosuke Niwa <rniwa@webkit.org> 2 14 -
trunk/Source/WebCore/ChangeLog
r104644 r104645 1 2012-01-10 Tony Chang <tony@chromium.org> 2 3 Need to handle absolutely positioned elements inside flexboxes 4 https://bugs.webkit.org/show_bug.cgi?id=70793 5 6 Reviewed by David Hyatt. 7 8 Tests: css3/flexbox/insert-text-crash.html 9 css3/flexbox/position-absolute-child.html 10 11 * rendering/RenderFlexibleBox.cpp: 12 (WebCore::RenderFlexibleBox::computePreferredMainAxisExtent): Skip the size of positioned elements. 13 (WebCore::RenderFlexibleBox::runFreeSpaceAllocationAlgorithm): Add placeholders for positioned elements. 14 (WebCore::RenderFlexibleBox::prepareChildForPositionedLayout): Positions the layer for the positioned child. 15 (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): Handle positioned elements. 16 (WebCore::RenderFlexibleBox::layoutColumnReverse): Adjust the main axis offset of the layer for positioned elements. 17 * rendering/RenderFlexibleBox.h: 18 1 19 2012-01-10 Nat Duca <nduca@chromium.org> 2 20 -
trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp
r104625 r104645 33 33 34 34 #include "LayoutRepainter.h" 35 #include "RenderLayer.h" 35 36 #include "RenderView.h" 36 37 … … 489 490 LayoutUnit flexboxAvailableContentExtent = mainAxisContentExtent(); 490 491 for (RenderBox* child = iterator.first(); child; child = iterator.next()) { 492 if (child->isPositioned()) 493 continue; 494 491 495 child->clearOverrideSize(); 492 496 if (mainAxisLengthForChild(child).isAuto()) { … … 524 528 LayoutUnit flexboxAvailableContentExtent = mainAxisContentExtent(); 525 529 for (RenderBox* child = iterator.first(); child; child = iterator.next()) { 530 if (child->isPositioned()) { 531 childSizes.append(0); 532 continue; 533 } 534 526 535 LayoutUnit childPreferredSize; 527 536 if (inflexibleItems.contains(child)) … … 592 601 } 593 602 603 void RenderFlexibleBox::prepareChildForPositionedLayout(RenderBox* child, LayoutUnit mainAxisOffset, LayoutUnit crossAxisOffset) 604 { 605 ASSERT(child->isPositioned()); 606 child->containingBlock()->insertPositionedObject(child); 607 RenderLayer* childLayer = child->layer(); 608 LayoutUnit inlinePosition = isColumnFlow() ? crossAxisOffset : mainAxisOffset; 609 if (style()->flexDirection() == FlowRowReverse) 610 inlinePosition = mainAxisExtent() - mainAxisOffset; 611 childLayer->setStaticInlinePosition(inlinePosition); // FIXME: Not right for regions. 612 613 LayoutUnit staticBlockPosition = isColumnFlow() ? mainAxisOffset : crossAxisOffset; 614 if (childLayer->staticBlockPosition() != staticBlockPosition) { 615 childLayer->setStaticBlockPosition(staticBlockPosition); 616 if (child->style()->hasStaticBlockPosition(style()->isHorizontalWritingMode())) 617 child->setChildNeedsLayout(true, false); 618 } 619 } 620 594 621 void RenderFlexibleBox::layoutAndPlaceChildren(FlexOrderIterator& iterator, const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace, float totalPositiveFlexibility) 595 622 { … … 603 630 size_t i = 0; 604 631 for (RenderBox* child = iterator.first(); child; child = iterator.next(), ++i) { 632 if (child->isPositioned()) { 633 prepareChildForPositionedLayout(child, mainAxisOffset, crossAxisOffset); 634 mainAxisOffset += packingSpaceBetweenChildren(availableFreeSpace, totalPositiveFlexibility, style()->flexPack(), childSizes.size()); 635 continue; 636 } 605 637 LayoutUnit childPreferredSize = childSizes[i] + mainAxisBorderAndPaddingExtentForChild(child); 606 638 setLogicalOverrideSize(child, childPreferredSize); … … 658 690 size_t i = 0; 659 691 for (RenderBox* child = iterator.first(); child; child = iterator.next(), ++i) { 692 if (child->isPositioned()) { 693 child->layer()->setStaticBlockPosition(mainAxisOffset); 694 mainAxisOffset -= packingSpaceBetweenChildren(availableFreeSpace, totalPositiveFlexibility, style()->flexPack(), childSizes.size()); 695 continue; 696 } 660 697 mainAxisOffset -= mainAxisExtentForChild(child) + flowAwareMarginEndForChild(child); 661 698 -
trunk/Source/WebCore/rendering/RenderFlexibleBox.h
r102090 r104645 97 97 bool runFreeSpaceAllocationAlgorithm(FlexOrderIterator&, LayoutUnit& availableFreeSpace, float& totalPositiveFlexibility, float& totalNegativeFlexibility, InflexibleFlexItemSize&, WTF::Vector<LayoutUnit>& childSizes); 98 98 void setLogicalOverrideSize(RenderBox* child, LayoutUnit childPreferredSize); 99 void prepareChildForPositionedLayout(RenderBox* child, LayoutUnit mainAxisOffset, LayoutUnit crossAxisOffset); 99 100 void layoutAndPlaceChildren(FlexOrderIterator&, const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace, float totalPositiveFlexibility); 100 101 void layoutColumnReverse(FlexOrderIterator&, const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace, float totalPositiveFlexibility);
Note: See TracChangeset
for help on using the changeset viewer.