| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 void LayoutFlexibleBox::removeChild(LayoutObject* child) | 196 void LayoutFlexibleBox::removeChild(LayoutObject* child) |
| 197 { | 197 { |
| 198 LayoutBlock::removeChild(child); | 198 LayoutBlock::removeChild(child); |
| 199 m_intrinsicSizeAlongMainAxis.remove(child); | 199 m_intrinsicSizeAlongMainAxis.remove(child); |
| 200 } | 200 } |
| 201 | 201 |
| 202 void LayoutFlexibleBox::styleDidChange(StyleDifference diff, const ComputedStyle
* oldStyle) | 202 void LayoutFlexibleBox::styleDidChange(StyleDifference diff, const ComputedStyle
* oldStyle) |
| 203 { | 203 { |
| 204 LayoutBlock::styleDidChange(diff, oldStyle); | 204 LayoutBlock::styleDidChange(diff, oldStyle); |
| 205 | 205 |
| 206 if (oldStyle && oldStyle->alignItems() == ItemPositionStretch && diff.needsF
ullLayout()) { | 206 if (oldStyle && oldStyle->alignItemsPosition() == ItemPositionStretch && dif
f.needsFullLayout()) { |
| 207 // Flex items that were previously stretching need to be relayed out so
we can compute new available cross axis space. | 207 // Flex items that were previously stretching need to be relayed out so
we can compute new available cross axis space. |
| 208 // This is only necessary for stretching since other alignment values do
n't change the size of the box. | 208 // This is only necessary for stretching since other alignment values do
n't change the size of the box. |
| 209 for (LayoutBox* child = firstChildBox(); child; child = child->nextSibli
ngBox()) { | 209 for (LayoutBox* child = firstChildBox(); child; child = child->nextSibli
ngBox()) { |
| 210 ItemPosition previousAlignment = ComputedStyle::resolveAlignment(*ol
dStyle, child->styleRef(), ItemPositionStretch); | 210 ItemPosition previousAlignment = ComputedStyle::resolveAlignment(*ol
dStyle, child->styleRef(), ItemPositionStretch); |
| 211 if (previousAlignment == ItemPositionStretch && previousAlignment !=
ComputedStyle::resolveAlignment(styleRef(), child->styleRef(), ItemPositionStre
tch)) | 211 if (previousAlignment == ItemPositionStretch && previousAlignment !=
ComputedStyle::resolveAlignment(styleRef(), child->styleRef(), ItemPositionStre
tch)) |
| 212 child->setChildNeedsLayout(MarkOnlyThis); | 212 child->setChildNeedsLayout(MarkOnlyThis); |
| 213 } | 213 } |
| 214 } | 214 } |
| 215 } | 215 } |
| 216 | 216 |
| (...skipping 879 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1096 return child.styleRef().overflowY(); | 1096 return child.styleRef().overflowY(); |
| 1097 } | 1097 } |
| 1098 | 1098 |
| 1099 void LayoutFlexibleBox::layoutAndPlaceChildren(LayoutUnit& crossAxisOffset, cons
t OrderedFlexItemList& children, const Vector<LayoutUnit, 16>& childSizes, Layou
tUnit availableFreeSpace, bool relayoutChildren, Vector<LineContext>& lineContex
ts) | 1099 void LayoutFlexibleBox::layoutAndPlaceChildren(LayoutUnit& crossAxisOffset, cons
t OrderedFlexItemList& children, const Vector<LayoutUnit, 16>& childSizes, Layou
tUnit availableFreeSpace, bool relayoutChildren, Vector<LineContext>& lineContex
ts) |
| 1100 { | 1100 { |
| 1101 ASSERT(childSizes.size() == children.size()); | 1101 ASSERT(childSizes.size() == children.size()); |
| 1102 | 1102 |
| 1103 size_t numberOfChildrenForJustifyContent = numberOfInFlowPositionedChildren(
children); | 1103 size_t numberOfChildrenForJustifyContent = numberOfInFlowPositionedChildren(
children); |
| 1104 LayoutUnit autoMarginOffset = autoMarginOffsetInMainAxis(children, available
FreeSpace); | 1104 LayoutUnit autoMarginOffset = autoMarginOffsetInMainAxis(children, available
FreeSpace); |
| 1105 LayoutUnit mainAxisOffset = flowAwareBorderStart() + flowAwarePaddingStart()
; | 1105 LayoutUnit mainAxisOffset = flowAwareBorderStart() + flowAwarePaddingStart()
; |
| 1106 mainAxisOffset += initialJustifyContentOffset(availableFreeSpace, style()->j
ustifyContent(), style()->justifyContentDistribution(), numberOfChildrenForJusti
fyContent); | 1106 mainAxisOffset += initialJustifyContentOffset(availableFreeSpace, style()->j
ustifyContentPosition(), style()->justifyContentDistribution(), numberOfChildren
ForJustifyContent); |
| 1107 if (style()->flexDirection() == FlowRowReverse) | 1107 if (style()->flexDirection() == FlowRowReverse) |
| 1108 mainAxisOffset += isHorizontalFlow() ? verticalScrollbarWidth() : horizo
ntalScrollbarHeight(); | 1108 mainAxisOffset += isHorizontalFlow() ? verticalScrollbarWidth() : horizo
ntalScrollbarHeight(); |
| 1109 | 1109 |
| 1110 LayoutUnit totalMainExtent = mainAxisExtent(); | 1110 LayoutUnit totalMainExtent = mainAxisExtent(); |
| 1111 LayoutUnit maxAscent = 0, maxDescent = 0; // Used when align-items: baseline
. | 1111 LayoutUnit maxAscent = 0, maxDescent = 0; // Used when align-items: baseline
. |
| 1112 LayoutUnit maxChildCrossAxisExtent = 0; | 1112 LayoutUnit maxChildCrossAxisExtent = 0; |
| 1113 size_t seenInFlowPositionedChildren = 0; | 1113 size_t seenInFlowPositionedChildren = 0; |
| 1114 bool shouldFlipMainAxis = !isColumnFlow() && !isLeftToRightFlow(); | 1114 bool shouldFlipMainAxis = !isColumnFlow() && !isLeftToRightFlow(); |
| 1115 for (size_t i = 0; i < children.size(); ++i) { | 1115 for (size_t i = 0; i < children.size(); ++i) { |
| 1116 LayoutBox* child = children[i]; | 1116 LayoutBox* child = children[i]; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1187 crossAxisOffset += maxChildCrossAxisExtent; | 1187 crossAxisOffset += maxChildCrossAxisExtent; |
| 1188 } | 1188 } |
| 1189 | 1189 |
| 1190 void LayoutFlexibleBox::layoutColumnReverse(const OrderedFlexItemList& children,
LayoutUnit crossAxisOffset, LayoutUnit availableFreeSpace) | 1190 void LayoutFlexibleBox::layoutColumnReverse(const OrderedFlexItemList& children,
LayoutUnit crossAxisOffset, LayoutUnit availableFreeSpace) |
| 1191 { | 1191 { |
| 1192 // This is similar to the logic in layoutAndPlaceChildren, except we place t
he children | 1192 // This is similar to the logic in layoutAndPlaceChildren, except we place t
he children |
| 1193 // starting from the end of the flexbox. We also don't need to layout anythi
ng since we're | 1193 // starting from the end of the flexbox. We also don't need to layout anythi
ng since we're |
| 1194 // just moving the children to a new position. | 1194 // just moving the children to a new position. |
| 1195 size_t numberOfChildrenForJustifyContent = numberOfInFlowPositionedChildren(
children); | 1195 size_t numberOfChildrenForJustifyContent = numberOfInFlowPositionedChildren(
children); |
| 1196 LayoutUnit mainAxisOffset = logicalHeight() - flowAwareBorderEnd() - flowAwa
rePaddingEnd(); | 1196 LayoutUnit mainAxisOffset = logicalHeight() - flowAwareBorderEnd() - flowAwa
rePaddingEnd(); |
| 1197 mainAxisOffset -= initialJustifyContentOffset(availableFreeSpace, style()->j
ustifyContent(), style()->justifyContentDistribution(), numberOfChildrenForJusti
fyContent); | 1197 mainAxisOffset -= initialJustifyContentOffset(availableFreeSpace, style()->j
ustifyContentPosition(), style()->justifyContentDistribution(), numberOfChildren
ForJustifyContent); |
| 1198 mainAxisOffset -= isHorizontalFlow() ? verticalScrollbarWidth() : horizontal
ScrollbarHeight(); | 1198 mainAxisOffset -= isHorizontalFlow() ? verticalScrollbarWidth() : horizontal
ScrollbarHeight(); |
| 1199 | 1199 |
| 1200 size_t seenInFlowPositionedChildren = 0; | 1200 size_t seenInFlowPositionedChildren = 0; |
| 1201 for (size_t i = 0; i < children.size(); ++i) { | 1201 for (size_t i = 0; i < children.size(); ++i) { |
| 1202 LayoutBox* child = children[i]; | 1202 LayoutBox* child = children[i]; |
| 1203 | 1203 |
| 1204 if (child->isOutOfFlowPositioned()) { | 1204 if (child->isOutOfFlowPositioned()) { |
| 1205 child->layer()->setStaticBlockPosition(mainAxisOffset); | 1205 child->layer()->setStaticBlockPosition(mainAxisOffset); |
| 1206 continue; | 1206 continue; |
| 1207 } | 1207 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1248 void LayoutFlexibleBox::alignFlexLines(Vector<LineContext>& lineContexts) | 1248 void LayoutFlexibleBox::alignFlexLines(Vector<LineContext>& lineContexts) |
| 1249 { | 1249 { |
| 1250 // If we have a single line flexbox or a multiline line flexbox with only on
e flex line, | 1250 // If we have a single line flexbox or a multiline line flexbox with only on
e flex line, |
| 1251 // the line height is all the available space. | 1251 // the line height is all the available space. |
| 1252 // For flex-direction: row, this means we need to use the height, so we do t
his after calling updateLogicalHeight. | 1252 // For flex-direction: row, this means we need to use the height, so we do t
his after calling updateLogicalHeight. |
| 1253 if (lineContexts.size() == 1) { | 1253 if (lineContexts.size() == 1) { |
| 1254 lineContexts[0].crossAxisExtent = crossAxisContentExtent(); | 1254 lineContexts[0].crossAxisExtent = crossAxisContentExtent(); |
| 1255 return; | 1255 return; |
| 1256 } | 1256 } |
| 1257 | 1257 |
| 1258 if (style()->alignContent() == ContentPositionFlexStart) | 1258 if (style()->alignContentPosition() == ContentPositionFlexStart) |
| 1259 return; | 1259 return; |
| 1260 | 1260 |
| 1261 LayoutUnit availableCrossAxisSpace = crossAxisContentExtent(); | 1261 LayoutUnit availableCrossAxisSpace = crossAxisContentExtent(); |
| 1262 for (size_t i = 0; i < lineContexts.size(); ++i) | 1262 for (size_t i = 0; i < lineContexts.size(); ++i) |
| 1263 availableCrossAxisSpace -= lineContexts[i].crossAxisExtent; | 1263 availableCrossAxisSpace -= lineContexts[i].crossAxisExtent; |
| 1264 | 1264 |
| 1265 LayoutBox* child = m_orderIterator.first(); | 1265 LayoutBox* child = m_orderIterator.first(); |
| 1266 LayoutUnit lineOffset = initialAlignContentOffset(availableCrossAxisSpace, s
tyle()->alignContent(), style()->alignContentDistribution(), lineContexts.size()
); | 1266 LayoutUnit lineOffset = initialAlignContentOffset(availableCrossAxisSpace, s
tyle()->alignContentPosition(), style()->alignContentDistribution(), lineContext
s.size()); |
| 1267 for (unsigned lineNumber = 0; lineNumber < lineContexts.size(); ++lineNumber
) { | 1267 for (unsigned lineNumber = 0; lineNumber < lineContexts.size(); ++lineNumber
) { |
| 1268 lineContexts[lineNumber].crossAxisOffset += lineOffset; | 1268 lineContexts[lineNumber].crossAxisOffset += lineOffset; |
| 1269 for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numb
erOfChildren; ++childNumber, child = m_orderIterator.next()) | 1269 for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numb
erOfChildren; ++childNumber, child = m_orderIterator.next()) |
| 1270 adjustAlignmentForChild(*child, lineOffset); | 1270 adjustAlignmentForChild(*child, lineOffset); |
| 1271 | 1271 |
| 1272 if (style()->alignContentDistribution() == ContentDistributionStretch &&
availableCrossAxisSpace > 0) | 1272 if (style()->alignContentDistribution() == ContentDistributionStretch &&
availableCrossAxisSpace > 0) |
| 1273 lineContexts[lineNumber].crossAxisExtent += availableCrossAxisSpace
/ static_cast<unsigned>(lineContexts.size()); | 1273 lineContexts[lineNumber].crossAxisExtent += availableCrossAxisSpace
/ static_cast<unsigned>(lineContexts.size()); |
| 1274 | 1274 |
| 1275 lineOffset += alignContentSpaceBetweenChildren(availableCrossAxisSpace,
style()->alignContentDistribution(), lineContexts.size()); | 1275 lineOffset += alignContentSpaceBetweenChildren(availableCrossAxisSpace,
style()->alignContentDistribution(), lineContexts.size()); |
| 1276 } | 1276 } |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1439 ASSERT(child); | 1439 ASSERT(child); |
| 1440 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE
xtent; | 1440 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE
xtent; |
| 1441 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset
- crossAxisStartEdge; | 1441 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset
- crossAxisStartEdge; |
| 1442 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi
sExtent; | 1442 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi
sExtent; |
| 1443 adjustAlignmentForChild(*child, newOffset - originalOffset); | 1443 adjustAlignmentForChild(*child, newOffset - originalOffset); |
| 1444 } | 1444 } |
| 1445 } | 1445 } |
| 1446 } | 1446 } |
| 1447 | 1447 |
| 1448 } | 1448 } |
| OLD | NEW |