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 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 | 96 |
97 void RenderFlexibleBox::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidt
h, LayoutUnit& maxLogicalWidth) const | 97 void RenderFlexibleBox::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidt
h, LayoutUnit& maxLogicalWidth) const |
98 { | 98 { |
99 // FIXME: We're ignoring flex-basis here and we shouldn't. We can't start ho
noring it though until | 99 // FIXME: We're ignoring flex-basis here and we shouldn't. We can't start ho
noring it though until |
100 // the flex shorthand stops setting it to 0. | 100 // the flex shorthand stops setting it to 0. |
101 // See https://bugs.webkit.org/show_bug.cgi?id=116117 and http://crbug.com/2
40765. | 101 // See https://bugs.webkit.org/show_bug.cgi?id=116117 and http://crbug.com/2
40765. |
102 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo
x()) { | 102 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo
x()) { |
103 if (child->isOutOfFlowPositioned()) | 103 if (child->isOutOfFlowPositioned()) |
104 continue; | 104 continue; |
105 | 105 |
106 LayoutUnit margin = marginIntrinsicLogicalWidthForChild(child); | 106 LayoutUnit margin = marginIntrinsicLogicalWidthForChild(*child); |
107 bool hasOrthogonalWritingMode = child->isHorizontalWritingMode() != isHo
rizontalWritingMode(); | 107 bool hasOrthogonalWritingMode = child->isHorizontalWritingMode() != isHo
rizontalWritingMode(); |
108 LayoutUnit minPreferredLogicalWidth = hasOrthogonalWritingMode ? child->
logicalHeight() : child->minPreferredLogicalWidth(); | 108 LayoutUnit minPreferredLogicalWidth = hasOrthogonalWritingMode ? child->
logicalHeight() : child->minPreferredLogicalWidth(); |
109 LayoutUnit maxPreferredLogicalWidth = hasOrthogonalWritingMode ? child->
logicalHeight() : child->maxPreferredLogicalWidth(); | 109 LayoutUnit maxPreferredLogicalWidth = hasOrthogonalWritingMode ? child->
logicalHeight() : child->maxPreferredLogicalWidth(); |
110 minPreferredLogicalWidth += margin; | 110 minPreferredLogicalWidth += margin; |
111 maxPreferredLogicalWidth += margin; | 111 maxPreferredLogicalWidth += margin; |
112 if (!isColumnFlow()) { | 112 if (!isColumnFlow()) { |
113 maxLogicalWidth += maxPreferredLogicalWidth; | 113 maxLogicalWidth += maxPreferredLogicalWidth; |
114 if (isMultiline()) { | 114 if (isMultiline()) { |
115 // For multiline, the min preferred width is if you put a break
between each item. | 115 // For multiline, the min preferred width is if you put a break
between each item. |
116 minLogicalWidth = std::max(minLogicalWidth, minPreferredLogicalW
idth); | 116 minLogicalWidth = std::max(minLogicalWidth, minPreferredLogicalW
idth); |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 // direction:rtl + flex-direction:column means the cross-axis direction is f
lipped. | 289 // direction:rtl + flex-direction:column means the cross-axis direction is f
lipped. |
290 flipForRightToLeftColumn(); | 290 flipForRightToLeftColumn(); |
291 } | 291 } |
292 | 292 |
293 LayoutUnit RenderFlexibleBox::clientLogicalBottomAfterRepositioning() | 293 LayoutUnit RenderFlexibleBox::clientLogicalBottomAfterRepositioning() |
294 { | 294 { |
295 LayoutUnit maxChildLogicalBottom = 0; | 295 LayoutUnit maxChildLogicalBottom = 0; |
296 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo
x()) { | 296 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo
x()) { |
297 if (child->isOutOfFlowPositioned()) | 297 if (child->isOutOfFlowPositioned()) |
298 continue; | 298 continue; |
299 LayoutUnit childLogicalBottom = logicalTopForChild(child) + logicalHeigh
tForChild(child) + marginAfterForChild(child); | 299 LayoutUnit childLogicalBottom = logicalTopForChild(*child) + logicalHeig
htForChild(*child) + marginAfterForChild(*child); |
300 maxChildLogicalBottom = std::max(maxChildLogicalBottom, childLogicalBott
om); | 300 maxChildLogicalBottom = std::max(maxChildLogicalBottom, childLogicalBott
om); |
301 } | 301 } |
302 return std::max(clientLogicalBottom(), maxChildLogicalBottom + paddingAfter(
)); | 302 return std::max(clientLogicalBottom(), maxChildLogicalBottom + paddingAfter(
)); |
303 } | 303 } |
304 | 304 |
305 bool RenderFlexibleBox::hasOrthogonalFlow(RenderBox& child) const | 305 bool RenderFlexibleBox::hasOrthogonalFlow(RenderBox& child) const |
306 { | 306 { |
307 // FIXME: If the child is a flexbox, then we need to check isHorizontalFlow. | 307 // FIXME: If the child is a flexbox, then we need to check isHorizontalFlow. |
308 return isHorizontalFlow() != child.isHorizontalWritingMode(); | 308 return isHorizontalFlow() != child.isHorizontalWritingMode(); |
309 } | 309 } |
(...skipping 775 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1085 LayoutUnit childPreferredSize = childSizes[i] + mainAxisBorderAndPadding
ExtentForChild(*child); | 1085 LayoutUnit childPreferredSize = childSizes[i] + mainAxisBorderAndPadding
ExtentForChild(*child); |
1086 setOverrideMainAxisSizeForChild(*child, childPreferredSize); | 1086 setOverrideMainAxisSizeForChild(*child, childPreferredSize); |
1087 if (childPreferredSize != mainAxisExtentForChild(*child)) { | 1087 if (childPreferredSize != mainAxisExtentForChild(*child)) { |
1088 child->setChildNeedsLayout(MarkOnlyThis); | 1088 child->setChildNeedsLayout(MarkOnlyThis); |
1089 } else { | 1089 } else { |
1090 // To avoid double applying margin changes in updateAutoMarginsInCro
ssAxis, we reset the margins here. | 1090 // To avoid double applying margin changes in updateAutoMarginsInCro
ssAxis, we reset the margins here. |
1091 resetAutoMarginsAndLogicalTopInCrossAxis(*child); | 1091 resetAutoMarginsAndLogicalTopInCrossAxis(*child); |
1092 } | 1092 } |
1093 // We may have already forced relayout for orthogonal flowing children i
n preferredMainAxisContentExtentForChild. | 1093 // We may have already forced relayout for orthogonal flowing children i
n preferredMainAxisContentExtentForChild. |
1094 bool forceChildRelayout = relayoutChildren && !childPreferredMainAxisCon
tentExtentRequiresLayout(*child, hasInfiniteLineLength); | 1094 bool forceChildRelayout = relayoutChildren && !childPreferredMainAxisCon
tentExtentRequiresLayout(*child, hasInfiniteLineLength); |
1095 updateBlockChildDirtyBitsBeforeLayout(forceChildRelayout, child); | 1095 updateBlockChildDirtyBitsBeforeLayout(forceChildRelayout, *child); |
1096 child->layoutIfNeeded(); | 1096 child->layoutIfNeeded(); |
1097 | 1097 |
1098 updateAutoMarginsInMainAxis(*child, autoMarginOffset); | 1098 updateAutoMarginsInMainAxis(*child, autoMarginOffset); |
1099 | 1099 |
1100 LayoutUnit childCrossAxisMarginBoxExtent; | 1100 LayoutUnit childCrossAxisMarginBoxExtent; |
1101 if (alignmentForChild(*child) == ItemPositionBaseline && !hasAutoMargins
InCrossAxis(*child)) { | 1101 if (alignmentForChild(*child) == ItemPositionBaseline && !hasAutoMargins
InCrossAxis(*child)) { |
1102 LayoutUnit ascent = marginBoxAscentForChild(*child); | 1102 LayoutUnit ascent = marginBoxAscentForChild(*child); |
1103 LayoutUnit descent = (crossAxisMarginExtentForChild(*child) + crossA
xisExtentForChild(*child)) - ascent; | 1103 LayoutUnit descent = (crossAxisMarginExtentForChild(*child) + crossA
xisExtentForChild(*child)) - ascent; |
1104 | 1104 |
1105 maxAscent = std::max(maxAscent, ascent); | 1105 maxAscent = std::max(maxAscent, ascent); |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1398 ASSERT(child); | 1398 ASSERT(child); |
1399 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE
xtent; | 1399 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE
xtent; |
1400 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset
- crossAxisStartEdge; | 1400 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset
- crossAxisStartEdge; |
1401 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi
sExtent; | 1401 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi
sExtent; |
1402 adjustAlignmentForChild(*child, newOffset - originalOffset); | 1402 adjustAlignmentForChild(*child, newOffset - originalOffset); |
1403 } | 1403 } |
1404 } | 1404 } |
1405 } | 1405 } |
1406 | 1406 |
1407 } | 1407 } |
OLD | NEW |