Modified: trunk/Source/WebCore/ChangeLog (94116 => 94117)
--- trunk/Source/WebCore/ChangeLog 2011-08-30 22:12:02 UTC (rev 94116)
+++ trunk/Source/WebCore/ChangeLog 2011-08-30 22:33:43 UTC (rev 94117)
@@ -1,3 +1,20 @@
+2011-08-30 Tony Chang <[email protected]>
+
+ refactor and cleanup RenderFlexibleBox
+ https://bugs.webkit.org/show_bug.cgi?id=67165
+
+ Reviewed by Ojan Vafai.
+
+ No new tests, just refactoring code.
+
+ * rendering/RenderFlexibleBox.cpp:
+ (WebCore::RenderFlexibleBox::layoutHorizontalBlock):
+ (WebCore::RenderFlexibleBox::runFreeSpaceAllocationAlgorithmHorizontal): Make childSizes a param so we can pass the results to layoutAndPlaceChildrenHorizontal.
+ (WebCore::hasPackingSpace): Move closer to where it's used.
+ (WebCore::RenderFlexibleBox::layoutAndPlaceChildrenHorizontal):
+ Pull this code out into its own function because it's not part of running the free space allocation algorithm.
+ * rendering/RenderFlexibleBox.h:
+
2011-08-30 Tim Horton <[email protected]>
getBBox() on a SVGPathElement with curves incorrectly includes control points
Modified: trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp (94116 => 94117)
--- trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp 2011-08-30 22:12:02 UTC (rev 94116)
+++ trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp 2011-08-30 22:33:43 UTC (rev 94117)
@@ -133,11 +133,14 @@
LayoutUnit availableFreeSpace = contentWidth() - preferredSize;
InflexibleFlexItemSize inflexibleItems;
- while (!runFreeSpaceAllocationAlgorithmHorizontal(availableFreeSpace, totalPositiveFlexibility, totalNegativeFlexibility, inflexibleItems)) {
+ WTF::Vector<LayoutUnit> childSizes;
+ while (!runFreeSpaceAllocationAlgorithmHorizontal(availableFreeSpace, totalPositiveFlexibility, totalNegativeFlexibility, inflexibleItems, childSizes)) {
ASSERT(totalPositiveFlexibility >= 0 && totalNegativeFlexibility >= 0);
ASSERT(inflexibleItems.size() > 0);
}
+ layoutAndPlaceChildrenHorizontal(childSizes, availableFreeSpace, totalPositiveFlexibility);
+
// FIXME: Handle distribution of vertical space (third distribution round).
}
@@ -180,19 +183,14 @@
}
}
-static bool hasPackingSpace(LayoutUnit availableFreeSpace, float totalPositiveFlexibility)
-{
- return availableFreeSpace > 0 && !totalPositiveFlexibility;
-}
-
// Returns true if we successfully ran the algorithm and sized the flex items.
-bool RenderFlexibleBox::runFreeSpaceAllocationAlgorithmHorizontal(LayoutUnit& availableFreeSpace, float& totalPositiveFlexibility, float& totalNegativeFlexibility, InflexibleFlexItemSize& inflexibleItems)
+bool RenderFlexibleBox::runFreeSpaceAllocationAlgorithmHorizontal(LayoutUnit& availableFreeSpace, float& totalPositiveFlexibility, float& totalNegativeFlexibility, InflexibleFlexItemSize& inflexibleItems, WTF::Vector<LayoutUnit>& childSizes)
{
FlexibleBoxIterator iterator(this);
+ childSizes.clear();
// FIXME: Handle vertical writing modes with horizontal flexing.
LayoutUnit flexboxAvailableLogicalWidth = availableLogicalWidth();
- WTF::Vector<LayoutUnit> childSizes;
for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
LayoutUnit childPreferredSize;
if (inflexibleItems.contains(child))
@@ -227,7 +225,17 @@
}
childSizes.append(childPreferredSize);
}
+ return true;
+}
+static bool hasPackingSpace(LayoutUnit availableFreeSpace, float totalPositiveFlexibility)
+{
+ return availableFreeSpace > 0 && !totalPositiveFlexibility;
+}
+
+void RenderFlexibleBox::layoutAndPlaceChildrenHorizontal(const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace, float totalPositiveFlexibility)
+{
+ FlexibleBoxIterator iterator(this);
// Now that we know the sizes, layout and position the flex items.
LayoutUnit xOffset = borderLeft() + paddingLeft();
@@ -242,8 +250,7 @@
setHeight(0);
size_t i = 0;
for (RenderBox* child = iterator.first(); child; child = iterator.next(), ++i) {
- LayoutUnit childPreferredSize = childSizes[i];
- childPreferredSize += child->borderLeft() + child->borderRight() + child->paddingLeft() + child->paddingRight();
+ LayoutUnit childPreferredSize = child->borderLeft() + child->paddingLeft() + childSizes[i] + child->paddingRight() + child->borderRight();
// FIXME: Handle vertical writing modes with horizontal flexing.
child->setOverrideSize(LayoutSize(childPreferredSize, 0));
child->setChildNeedsLayout(true);
@@ -263,7 +270,6 @@
if (hasPackingSpace(availableFreeSpace, totalPositiveFlexibility) && style()->flexPack() == PackJustify && childSizes.size() > 1)
xOffset += availableFreeSpace / (childSizes.size() - 1);
}
- return true;
}
}
Modified: trunk/Source/WebCore/rendering/RenderFlexibleBox.h (94116 => 94117)
--- trunk/Source/WebCore/rendering/RenderFlexibleBox.h 2011-08-30 22:12:02 UTC (rev 94116)
+++ trunk/Source/WebCore/rendering/RenderFlexibleBox.h 2011-08-30 22:33:43 UTC (rev 94117)
@@ -55,7 +55,8 @@
void layoutHorizontalBlock(bool relayoutChildren);
void computePreferredSizeHorizontal(bool relayoutChildren, FlexibleBoxIterator&, LayoutUnit&, float& totalPositiveFlexibility, float& totalNegativeFlexibility);
- bool runFreeSpaceAllocationAlgorithmHorizontal(LayoutUnit& availableFreeSpace, float& totalPositiveFlexibility, float& totalNegativeFlexibility, InflexibleFlexItemSize&);
+ bool runFreeSpaceAllocationAlgorithmHorizontal(LayoutUnit& availableFreeSpace, float& totalPositiveFlexibility, float& totalNegativeFlexibility, InflexibleFlexItemSize&, WTF::Vector<LayoutUnit>& childSizes);
+ void layoutAndPlaceChildrenHorizontal(const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace, float totalPositiveFlexibility);
};
} // namespace WebCore