More refactoring in RenderFlexibleBox
authortony@chromium.org <tony@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 25 Feb 2012 01:46:27 +0000 (01:46 +0000)
committertony@chromium.org <tony@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 25 Feb 2012 01:46:27 +0000 (01:46 +0000)
https://bugs.webkit.org/show_bug.cgi?id=79533

Reviewed by Ojan Vafai.

No new tests, just refactoring.

* rendering/RenderFlexibleBox.cpp:
(WebCore::RenderFlexibleBox::layoutFlexItems): Move the flipping of RTL+column positions to its own method.
This might be a tiny bit slower, but it's clearer since it's not related to alignment.
(WebCore::RenderFlexibleBox::layoutAndPlaceChildren): Move the logical height calculation out of the loop.  We only need the final height.
(WebCore::RenderFlexibleBox::alignChildren):
(WebCore::RenderFlexibleBox::flipForRightToLeftColumn):
* rendering/RenderFlexibleBox.h:
(RenderFlexibleBox):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@108876 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderFlexibleBox.cpp
Source/WebCore/rendering/RenderFlexibleBox.h

index 997ef00..93cc43f 100644 (file)
@@ -1,3 +1,21 @@
+2012-02-24  Tony Chang  <tony@chromium.org>
+
+        More refactoring in RenderFlexibleBox
+        https://bugs.webkit.org/show_bug.cgi?id=79533
+
+        Reviewed by Ojan Vafai.
+
+        No new tests, just refactoring.
+
+        * rendering/RenderFlexibleBox.cpp:
+        (WebCore::RenderFlexibleBox::layoutFlexItems): Move the flipping of RTL+column positions to its own method.
+        This might be a tiny bit slower, but it's clearer since it's not related to alignment.
+        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): Move the logical height calculation out of the loop.  We only need the final height.
+        (WebCore::RenderFlexibleBox::alignChildren):
+        (WebCore::RenderFlexibleBox::flipForRightToLeftColumn):
+        * rendering/RenderFlexibleBox.h:
+        (RenderFlexibleBox):
+
 2012-02-24  Abhishek Arya  <inferno@chromium.org>
 
         Positioned objects not cleared when moving children
index f2f993d..6d0b761 100644 (file)
@@ -520,6 +520,9 @@ void RenderFlexibleBox::layoutFlexItems(bool relayoutChildren)
     }
 
     layoutAndPlaceChildren(orderedChildren, childSizes, availableFreeSpace);
+
+    // direction:rtl + flex-direction:column means the cross-axis direction is flipped.
+    flipForRightToLeftColumn(flexIterator);
 }
 
 float RenderFlexibleBox::positiveFlexForChild(RenderBox* child) const
@@ -759,11 +762,11 @@ void RenderFlexibleBox::layoutAndPlaceChildren(const OrderedFlexItemList& childr
         mainAxisOffset += childMainExtent + flowAwareMarginEndForChild(child);
 
         mainAxisOffset += packingSpaceBetweenChildren(availableFreeSpace, style()->flexPack(), childSizes.size());
-
-        if (isColumnFlow())
-            setLogicalHeight(mainAxisOffset + flowAwareBorderEnd() + flowAwarePaddingEnd() + scrollbarLogicalHeight());
     }
 
+    if (isColumnFlow())
+        setLogicalHeight(mainAxisOffset + flowAwareBorderEnd() + flowAwarePaddingEnd() + scrollbarLogicalHeight());
+
     if (style()->flexDirection() == FlowColumnReverse) {
         // We have to do an extra pass for column-reverse to reposition the flex items since the start depends
         // on the height of the flexbox, which we only know after we've positioned all the flex items.
@@ -818,8 +821,6 @@ void RenderFlexibleBox::adjustAlignmentForChild(RenderBox* child, LayoutUnit del
 
 void RenderFlexibleBox::alignChildren(const OrderedFlexItemList& children, LayoutUnit maxAscent)
 {
-    LayoutUnit crossExtent = crossAxisExtent();
-
     for (size_t i = 0; i < children.size(); ++i) {
         RenderBox* child = children[i];
         switch (flexAlignForChild(child)) {
@@ -856,14 +857,19 @@ void RenderFlexibleBox::alignChildren(const OrderedFlexItemList& children, Layou
             break;
         }
         }
+    }
+}
 
-        // direction:rtl + flex-direction:column means the cross-axis direction is flipped.
-        if (!style()->isLeftToRightDirection() && isColumnFlow()) {
-            LayoutPoint location = flowAwareLocationForChild(child);
-            location.setY(crossExtent - crossAxisExtentForChild(child) - location.y());
-            setFlowAwareLocationForChild(child, location);
-        }
+void RenderFlexibleBox::flipForRightToLeftColumn(FlexOrderIterator& iterator)
+{
+    if (style()->isLeftToRightDirection() || !isColumnFlow())
+        return;
 
+    LayoutUnit crossExtent = crossAxisExtent();
+    for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
+        LayoutPoint location = flowAwareLocationForChild(child);
+        location.setY(crossExtent - crossAxisExtentForChild(child) - location.y());
+        setFlowAwareLocationForChild(child, location);
     }
 }
 
index 0ee715f..ca5d58a 100644 (file)
@@ -106,6 +106,7 @@ private:
     void layoutAndPlaceChildren(const OrderedFlexItemList&, const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace);
     void layoutColumnReverse(const OrderedFlexItemList&, const WTF::Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace);
     void alignChildren(const OrderedFlexItemList&, LayoutUnit maxAscent);
+    void flipForRightToLeftColumn(FlexOrderIterator&);
 };
 
 } // namespace WebCore