Changeset 136938 in webkit
- Timestamp:
- Dec 7, 2012 1:56:44 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r136937 r136938 1 2012-12-06 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 Use always the order iterator from data member in RenderFlexibleBox 4 https://bugs.webkit.org/show_bug.cgi?id=104112 5 6 Reviewed by Tony Chang. 7 8 Some methods receive it as parameter and others use the data 9 member. 10 11 * rendering/RenderFlexibleBox.cpp: 12 (WebCore::RenderFlexibleBox::layoutBlock): 13 (WebCore::RenderFlexibleBox::repositionLogicalHeightDependentFlexItems): 14 (WebCore::RenderFlexibleBox::layoutFlexItems): 15 (WebCore::RenderFlexibleBox::computeNextFlexLine): 16 (WebCore::RenderFlexibleBox::alignFlexLines): 17 (WebCore::RenderFlexibleBox::alignChildren): 18 (WebCore::RenderFlexibleBox::flipForRightToLeftColumn): 19 (WebCore::RenderFlexibleBox::flipForWrapReverse): 20 * rendering/RenderFlexibleBox.h: 21 1 22 2012-12-07 Kent Tamura <tkent@chromium.org> 2 23 -
trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp
r136709 r136938 336 336 ChildFrameRects oldChildRects; 337 337 appendChildFrameRects(oldChildRects); 338 layoutFlexItems( *m_orderIterator,lineContexts);338 layoutFlexItems(lineContexts); 339 339 340 340 LayoutUnit oldClientAfterEdge = clientLogicalBottom(); 341 341 updateLogicalHeight(); 342 repositionLogicalHeightDependentFlexItems( *m_orderIterator,lineContexts, oldClientAfterEdge);342 repositionLogicalHeightDependentFlexItems(lineContexts, oldClientAfterEdge); 343 343 344 344 RenderBlock::finishDelayUpdateScrollInfo(); … … 407 407 } 408 408 409 void RenderFlexibleBox::repositionLogicalHeightDependentFlexItems( OrderIterator& iterator,Vector<LineContext>& lineContexts, LayoutUnit& oldClientAfterEdge)409 void RenderFlexibleBox::repositionLogicalHeightDependentFlexItems(Vector<LineContext>& lineContexts, LayoutUnit& oldClientAfterEdge) 410 410 { 411 411 LayoutUnit crossAxisStartEdge = lineContexts.isEmpty() ? LayoutUnit() : lineContexts[0].crossAxisOffset; 412 alignFlexLines( iterator,lineContexts);412 alignFlexLines(lineContexts); 413 413 414 414 // If we have a single line flexbox, the line height is all the available space. … … 416 416 if (!isMultiline() && lineContexts.size() == 1) 417 417 lineContexts[0].crossAxisExtent = crossAxisContentExtent(); 418 alignChildren( iterator,lineContexts);418 alignChildren(lineContexts); 419 419 420 420 if (style()->flexWrap() == FlexWrapReverse) { 421 421 if (isHorizontalFlow()) 422 422 oldClientAfterEdge = clientLogicalBottom(); 423 flipForWrapReverse( iterator,lineContexts, crossAxisStartEdge);423 flipForWrapReverse(lineContexts, crossAxisStartEdge); 424 424 } 425 425 426 426 // direction:rtl + flex-direction:column means the cross-axis direction is flipped. 427 flipForRightToLeftColumn( iterator);427 flipForRightToLeftColumn(); 428 428 } 429 429 … … 724 724 } 725 725 726 void RenderFlexibleBox::layoutFlexItems(OrderIterator& iterator, Vector<LineContext>& lineContexts) 727 { 726 void RenderFlexibleBox::layoutFlexItems(Vector<LineContext>& lineContexts) 727 { 728 ASSERT(m_orderIterator); 729 728 730 OrderedFlexItemList orderedChildren; 729 731 LayoutUnit preferredMainAxisExtent; … … 732 734 LayoutUnit minMaxAppliedMainAxisExtent; 733 735 734 iterator.first();736 m_orderIterator->first(); 735 737 LayoutUnit crossAxisOffset = flowAwareBorderBefore() + flowAwarePaddingBefore(); 736 while (computeNextFlexLine( iterator,orderedChildren, preferredMainAxisExtent, totalFlexGrow, totalWeightedFlexShrink, minMaxAppliedMainAxisExtent)) {738 while (computeNextFlexLine(orderedChildren, preferredMainAxisExtent, totalFlexGrow, totalWeightedFlexShrink, minMaxAppliedMainAxisExtent)) { 737 739 LayoutUnit availableFreeSpace = mainAxisContentExtent(preferredMainAxisExtent) - preferredMainAxisExtent; 738 740 FlexSign flexSign = (minMaxAppliedMainAxisExtent < preferredMainAxisExtent + availableFreeSpace) ? PositiveFlexibility : NegativeFlexibility; … … 913 915 } 914 916 915 bool RenderFlexibleBox::computeNextFlexLine(OrderIterator& iterator, OrderedFlexItemList& orderedChildren, LayoutUnit& preferredMainAxisExtent, double& totalFlexGrow, double& totalWeightedFlexShrink, LayoutUnit& minMaxAppliedMainAxisExtent) 916 { 917 bool RenderFlexibleBox::computeNextFlexLine(OrderedFlexItemList& orderedChildren, LayoutUnit& preferredMainAxisExtent, double& totalFlexGrow, double& totalWeightedFlexShrink, LayoutUnit& minMaxAppliedMainAxisExtent) 918 { 919 ASSERT(m_orderIterator); 920 917 921 orderedChildren.clear(); 918 922 preferredMainAxisExtent = 0; … … 920 924 minMaxAppliedMainAxisExtent = 0; 921 925 922 if (! iterator.currentChild())926 if (!m_orderIterator->currentChild()) 923 927 return false; 924 928 … … 926 930 bool lineHasInFlowItem = false; 927 931 928 for (RenderBox* child = iterator.currentChild(); child; child = iterator.next()) {932 for (RenderBox* child = m_orderIterator->currentChild(); child; child = m_orderIterator->next()) { 929 933 if (child->isOutOfFlowPositioned()) { 930 934 orderedChildren.append(child); … … 1242 1246 } 1243 1247 1244 void RenderFlexibleBox::alignFlexLines(OrderIterator& iterator, Vector<LineContext>& lineContexts) 1245 { 1248 void RenderFlexibleBox::alignFlexLines(Vector<LineContext>& lineContexts) 1249 { 1250 ASSERT(m_orderIterator); 1251 1246 1252 if (!isMultiline() || style()->alignContent() == AlignContentFlexStart) 1247 1253 return; … … 1251 1257 availableCrossAxisSpace -= lineContexts[i].crossAxisExtent; 1252 1258 1253 RenderBox* child = iterator.first();1259 RenderBox* child = m_orderIterator->first(); 1254 1260 LayoutUnit lineOffset = initialAlignContentOffset(availableCrossAxisSpace, style()->alignContent(), lineContexts.size()); 1255 1261 for (unsigned lineNumber = 0; lineNumber < lineContexts.size(); ++lineNumber) { 1256 1262 lineContexts[lineNumber].crossAxisOffset += lineOffset; 1257 for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numberOfChildren; ++childNumber, child = iterator.next())1263 for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numberOfChildren; ++childNumber, child = m_orderIterator->next()) 1258 1264 adjustAlignmentForChild(child, lineOffset); 1259 1265 … … 1280 1286 } 1281 1287 1282 void RenderFlexibleBox::alignChildren(OrderIterator& iterator, const Vector<LineContext>& lineContexts) 1283 { 1288 void RenderFlexibleBox::alignChildren(const Vector<LineContext>& lineContexts) 1289 { 1290 ASSERT(m_orderIterator); 1291 1284 1292 // Keep track of the space between the baseline edge and the after edge of the box for each line. 1285 1293 Vector<LayoutUnit> minMarginAfterBaselines; 1286 1294 1287 RenderBox* child = iterator.first();1295 RenderBox* child = m_orderIterator->first(); 1288 1296 for (size_t lineNumber = 0; lineNumber < lineContexts.size(); ++lineNumber) { 1289 1297 LayoutUnit minMarginAfterBaseline = LayoutUnit::max(); … … 1291 1299 LayoutUnit maxAscent = lineContexts[lineNumber].maxAscent; 1292 1300 1293 for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numberOfChildren; ++childNumber, child = iterator.next()) {1301 for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numberOfChildren; ++childNumber, child = m_orderIterator->next()) { 1294 1302 ASSERT(child); 1295 1303 if (child->isOutOfFlowPositioned()) { … … 1342 1350 // wrap-reverse flips the cross axis start and end. For baseline alignment, this means we 1343 1351 // need to align the after edge of baseline elements with the after edge of the flex line. 1344 child = iterator.first();1352 child = m_orderIterator->first(); 1345 1353 for (size_t lineNumber = 0; lineNumber < lineContexts.size(); ++lineNumber) { 1346 1354 LayoutUnit minMarginAfterBaseline = minMarginAfterBaselines[lineNumber]; 1347 for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numberOfChildren; ++childNumber, child = iterator.next()) {1355 for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numberOfChildren; ++childNumber, child = m_orderIterator->next()) { 1348 1356 ASSERT(child); 1349 1357 if (alignmentForChild(child) == AlignBaseline && !hasAutoMarginsInCrossAxis(child) && minMarginAfterBaseline) … … 1384 1392 } 1385 1393 1386 void RenderFlexibleBox::flipForRightToLeftColumn(OrderIterator& iterator) 1387 { 1394 void RenderFlexibleBox::flipForRightToLeftColumn() 1395 { 1396 ASSERT(m_orderIterator); 1397 1388 1398 if (style()->isLeftToRightDirection() || !isColumnFlow()) 1389 1399 return; 1390 1400 1391 1401 LayoutUnit crossExtent = crossAxisExtent(); 1392 for (RenderBox* child = iterator.first(); child; child = iterator.next()) {1402 for (RenderBox* child = m_orderIterator->first(); child; child = m_orderIterator->next()) { 1393 1403 if (child->isOutOfFlowPositioned()) 1394 1404 continue; … … 1399 1409 } 1400 1410 1401 void RenderFlexibleBox::flipForWrapReverse(OrderIterator& iterator, const Vector<LineContext>& lineContexts, LayoutUnit crossAxisStartEdge) 1402 { 1411 void RenderFlexibleBox::flipForWrapReverse(const Vector<LineContext>& lineContexts, LayoutUnit crossAxisStartEdge) 1412 { 1413 ASSERT(m_orderIterator); 1414 1403 1415 LayoutUnit contentExtent = crossAxisContentExtent(); 1404 RenderBox* child = iterator.first();1416 RenderBox* child = m_orderIterator->first(); 1405 1417 for (size_t lineNumber = 0; lineNumber < lineContexts.size(); ++lineNumber) { 1406 for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numberOfChildren; ++childNumber, child = iterator.next()) {1418 for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numberOfChildren; ++childNumber, child = m_orderIterator->next()) { 1407 1419 ASSERT(child); 1408 1420 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisExtent; -
trunk/Source/WebCore/rendering/RenderFlexibleBox.h
r136709 r136938 119 119 LayoutUnit preferredMainAxisContentExtentForChild(RenderBox* child); 120 120 121 void layoutFlexItems( OrderIterator&,Vector<LineContext>&);121 void layoutFlexItems(Vector<LineContext>&); 122 122 LayoutUnit autoMarginOffsetInMainAxis(const OrderedFlexItemList&, LayoutUnit& availableFreeSpace); 123 123 void updateAutoMarginsInMainAxis(RenderBox* child, LayoutUnit autoMarginOffset); 124 124 bool hasAutoMarginsInCrossAxis(RenderBox* child) const; 125 125 bool updateAutoMarginsInCrossAxis(RenderBox* child, LayoutUnit availableAlignmentSpace); 126 void repositionLogicalHeightDependentFlexItems( OrderIterator&,Vector<LineContext>&, LayoutUnit& oldClientAfterEdge);126 void repositionLogicalHeightDependentFlexItems(Vector<LineContext>&, LayoutUnit& oldClientAfterEdge); 127 127 void clearChildOverrideSizes(); 128 128 void appendChildFrameRects(ChildFrameRects&); … … 135 135 void computeMainAxisPreferredSizes(bool relayoutChildren, OrderHashSet&); 136 136 LayoutUnit adjustChildSizeForMinAndMax(RenderBox*, LayoutUnit childSize); 137 bool computeNextFlexLine(Order Iterator&, OrderedFlexItemList& orderedChildren, LayoutUnit& preferredMainAxisExtent, double& totalFlexGrow, double& totalWeightedFlexShrink, LayoutUnit& minMaxAppliedMainAxisExtent);137 bool computeNextFlexLine(OrderedFlexItemList& orderedChildren, LayoutUnit& preferredMainAxisExtent, double& totalFlexGrow, double& totalWeightedFlexShrink, LayoutUnit& minMaxAppliedMainAxisExtent); 138 138 139 139 bool resolveFlexibleLengths(FlexSign, const OrderedFlexItemList&, LayoutUnit& availableFreeSpace, double& totalFlexGrow, double& totalWeightedFlexShrink, InflexibleFlexItemSize&, Vector<LayoutUnit>& childSizes); … … 147 147 void layoutAndPlaceChildren(LayoutUnit& crossAxisOffset, const OrderedFlexItemList&, const Vector<LayoutUnit>& childSizes, LayoutUnit availableFreeSpace, Vector<LineContext>&); 148 148 void layoutColumnReverse(const OrderedFlexItemList&, LayoutUnit crossAxisOffset, LayoutUnit availableFreeSpace); 149 void alignFlexLines( OrderIterator&,Vector<LineContext>&);150 void alignChildren( OrderIterator&,const Vector<LineContext>&);149 void alignFlexLines(Vector<LineContext>&); 150 void alignChildren(const Vector<LineContext>&); 151 151 void applyStretchAlignmentToChild(RenderBox*, LayoutUnit lineCrossAxisExtent); 152 void flipForRightToLeftColumn( OrderIterator&);153 void flipForWrapReverse( OrderIterator&,const Vector<LineContext>&, LayoutUnit crossAxisStartEdge);152 void flipForRightToLeftColumn(); 153 void flipForWrapReverse(const Vector<LineContext>&, LayoutUnit crossAxisStartEdge); 154 154 155 155 OwnPtr<OrderIterator> m_orderIterator;
Note: See TracChangeset
for help on using the changeset viewer.