OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011 Apple 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 | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
644 LayoutUnit RenderGrid::minContentForChild(RenderBox& child, GridTrackSizingDirec
tion direction, Vector<GridTrack>& columnTracks) | 644 LayoutUnit RenderGrid::minContentForChild(RenderBox& child, GridTrackSizingDirec
tion direction, Vector<GridTrack>& columnTracks) |
645 { | 645 { |
646 bool hasOrthogonalWritingMode = child.isHorizontalWritingMode() != isHorizon
talWritingMode(); | 646 bool hasOrthogonalWritingMode = child.isHorizontalWritingMode() != isHorizon
talWritingMode(); |
647 // FIXME: Properly support orthogonal writing mode. | 647 // FIXME: Properly support orthogonal writing mode. |
648 if (hasOrthogonalWritingMode) | 648 if (hasOrthogonalWritingMode) |
649 return 0; | 649 return 0; |
650 | 650 |
651 if (direction == ForColumns) { | 651 if (direction == ForColumns) { |
652 // FIXME: It's unclear if we should return the intrinsic width or the pr
eferred width. | 652 // FIXME: It's unclear if we should return the intrinsic width or the pr
eferred width. |
653 // See http://lists.w3.org/Archives/Public/www-style/2013Jan/0245.html | 653 // See http://lists.w3.org/Archives/Public/www-style/2013Jan/0245.html |
654 return child.minPreferredLogicalWidth() + marginIntrinsicLogicalWidthFor
Child(&child); | 654 return child.minPreferredLogicalWidth() + marginIntrinsicLogicalWidthFor
Child(child); |
655 } | 655 } |
656 | 656 |
657 return logicalHeightForChild(child, columnTracks); | 657 return logicalHeightForChild(child, columnTracks); |
658 } | 658 } |
659 | 659 |
660 LayoutUnit RenderGrid::maxContentForChild(RenderBox& child, GridTrackSizingDirec
tion direction, Vector<GridTrack>& columnTracks) | 660 LayoutUnit RenderGrid::maxContentForChild(RenderBox& child, GridTrackSizingDirec
tion direction, Vector<GridTrack>& columnTracks) |
661 { | 661 { |
662 bool hasOrthogonalWritingMode = child.isHorizontalWritingMode() != isHorizon
talWritingMode(); | 662 bool hasOrthogonalWritingMode = child.isHorizontalWritingMode() != isHorizon
talWritingMode(); |
663 // FIXME: Properly support orthogonal writing mode. | 663 // FIXME: Properly support orthogonal writing mode. |
664 if (hasOrthogonalWritingMode) | 664 if (hasOrthogonalWritingMode) |
665 return LayoutUnit(); | 665 return LayoutUnit(); |
666 | 666 |
667 if (direction == ForColumns) { | 667 if (direction == ForColumns) { |
668 // FIXME: It's unclear if we should return the intrinsic width or the pr
eferred width. | 668 // FIXME: It's unclear if we should return the intrinsic width or the pr
eferred width. |
669 // See http://lists.w3.org/Archives/Public/www-style/2013Jan/0245.html | 669 // See http://lists.w3.org/Archives/Public/www-style/2013Jan/0245.html |
670 return child.maxPreferredLogicalWidth() + marginIntrinsicLogicalWidthFor
Child(&child); | 670 return child.maxPreferredLogicalWidth() + marginIntrinsicLogicalWidthFor
Child(child); |
671 } | 671 } |
672 | 672 |
673 return logicalHeightForChild(child, columnTracks); | 673 return logicalHeightForChild(child, columnTracks); |
674 } | 674 } |
675 | 675 |
676 // We're basically using a class instead of a std::pair for two reasons. First o
f all, accessing gridItem() or | 676 // We're basically using a class instead of a std::pair for two reasons. First o
f all, accessing gridItem() or |
677 // coordinate() is much more self-explanatory that using .first or .second membe
rs in the pair. Secondly the class | 677 // coordinate() is much more self-explanatory that using .first or .second membe
rs in the pair. Secondly the class |
678 // allows us to precompute the value of the span, something which is quite conve
nient for the sorting. Having a | 678 // allows us to precompute the value of the span, something which is quite conve
nient for the sorting. Having a |
679 // std::pair<RenderBox*, size_t> does not work either because we still need the
GridCoordinate so we'd have to add an | 679 // std::pair<RenderBox*, size_t> does not work either because we still need the
GridCoordinate so we'd have to add an |
680 // extra hash lookup for each item at the beginning of RenderGrid::resolveConten
tBasedTrackSizingFunctionsForItems(). | 680 // extra hash lookup for each item at the beginning of RenderGrid::resolveConten
tBasedTrackSizingFunctionsForItems(). |
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1200 // ignore the overflow and just return the value regardless (which may cause
data | 1200 // ignore the overflow and just return the value regardless (which may cause
data |
1201 // loss as we overflow the 'start' edge). | 1201 // loss as we overflow the 'start' edge). |
1202 return offset; | 1202 return offset; |
1203 } | 1203 } |
1204 | 1204 |
1205 LayoutUnit RenderGrid::startOfColumnForChild(const RenderBox& child) const | 1205 LayoutUnit RenderGrid::startOfColumnForChild(const RenderBox& child) const |
1206 { | 1206 { |
1207 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1207 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
1208 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit
ialPosition.toInt()]; | 1208 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit
ialPosition.toInt()]; |
1209 // The grid items should be inside the grid container's border box, that's w
hy they need to be shifted. | 1209 // The grid items should be inside the grid container's border box, that's w
hy they need to be shifted. |
1210 return startOfColumn + marginStartForChild(&child); | 1210 return startOfColumn + marginStartForChild(child); |
1211 } | 1211 } |
1212 | 1212 |
1213 LayoutUnit RenderGrid::endOfColumnForChild(const RenderBox& child) const | 1213 LayoutUnit RenderGrid::endOfColumnForChild(const RenderBox& child) const |
1214 { | 1214 { |
1215 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1215 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
1216 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit
ialPosition.toInt()]; | 1216 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit
ialPosition.toInt()]; |
1217 // The grid items should be inside the grid container's border box, that's w
hy they need to be shifted. | 1217 // The grid items should be inside the grid container's border box, that's w
hy they need to be shifted. |
1218 LayoutUnit columnPosition = startOfColumn + marginStartForChild(&child); | 1218 LayoutUnit columnPosition = startOfColumn + marginStartForChild(child); |
1219 | 1219 |
1220 LayoutUnit endOfColumn = m_columnPositions[coordinate.columns.resolvedFinalP
osition.next().toInt()]; | 1220 LayoutUnit endOfColumn = m_columnPositions[coordinate.columns.resolvedFinalP
osition.next().toInt()]; |
1221 LayoutUnit offsetFromColumnPosition = computeOverflowAlignmentOffset(child.s
tyle()->justifySelfOverflowAlignment(), startOfColumn, endOfColumn, child.logica
lWidth()); | 1221 LayoutUnit offsetFromColumnPosition = computeOverflowAlignmentOffset(child.s
tyle()->justifySelfOverflowAlignment(), startOfColumn, endOfColumn, child.logica
lWidth()); |
1222 | 1222 |
1223 return columnPosition + offsetFromColumnPosition; | 1223 return columnPosition + offsetFromColumnPosition; |
1224 } | 1224 } |
1225 | 1225 |
1226 LayoutUnit RenderGrid::columnPositionAlignedWithGridContainerStart(const RenderB
ox& child) const | 1226 LayoutUnit RenderGrid::columnPositionAlignedWithGridContainerStart(const RenderB
ox& child) const |
1227 { | 1227 { |
1228 if (style()->isLeftToRightDirection()) | 1228 if (style()->isLeftToRightDirection()) |
1229 return startOfColumnForChild(child); | 1229 return startOfColumnForChild(child); |
1230 | 1230 |
1231 return endOfColumnForChild(child); | 1231 return endOfColumnForChild(child); |
1232 } | 1232 } |
1233 | 1233 |
1234 LayoutUnit RenderGrid::columnPositionAlignedWithGridContainerEnd(const RenderBox
& child) const | 1234 LayoutUnit RenderGrid::columnPositionAlignedWithGridContainerEnd(const RenderBox
& child) const |
1235 { | 1235 { |
1236 if (!style()->isLeftToRightDirection()) | 1236 if (!style()->isLeftToRightDirection()) |
1237 return startOfColumnForChild(child); | 1237 return startOfColumnForChild(child); |
1238 | 1238 |
1239 return endOfColumnForChild(child); | 1239 return endOfColumnForChild(child); |
1240 } | 1240 } |
1241 | 1241 |
1242 LayoutUnit RenderGrid::centeredColumnPositionForChild(const RenderBox& child) co
nst | 1242 LayoutUnit RenderGrid::centeredColumnPositionForChild(const RenderBox& child) co
nst |
1243 { | 1243 { |
1244 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1244 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
1245 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit
ialPosition.toInt()]; | 1245 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit
ialPosition.toInt()]; |
1246 LayoutUnit endOfColumn = m_columnPositions[coordinate.columns.resolvedFinalP
osition.next().toInt()]; | 1246 LayoutUnit endOfColumn = m_columnPositions[coordinate.columns.resolvedFinalP
osition.next().toInt()]; |
1247 LayoutUnit columnPosition = startOfColumn + marginStartForChild(&child); | 1247 LayoutUnit columnPosition = startOfColumn + marginStartForChild(child); |
1248 LayoutUnit offsetFromColumnPosition = computeOverflowAlignmentOffset(child.s
tyle()->justifySelfOverflowAlignment(), startOfColumn, endOfColumn, child.logica
lWidth()); | 1248 LayoutUnit offsetFromColumnPosition = computeOverflowAlignmentOffset(child.s
tyle()->justifySelfOverflowAlignment(), startOfColumn, endOfColumn, child.logica
lWidth()); |
1249 | 1249 |
1250 return columnPosition + offsetFromColumnPosition / 2; | 1250 return columnPosition + offsetFromColumnPosition / 2; |
1251 } | 1251 } |
1252 | 1252 |
1253 LayoutUnit RenderGrid::columnPositionForChild(const RenderBox& child) const | 1253 LayoutUnit RenderGrid::columnPositionForChild(const RenderBox& child) const |
1254 { | 1254 { |
1255 bool hasOrthogonalWritingMode = child.isHorizontalWritingMode() != isHorizon
talWritingMode(); | 1255 bool hasOrthogonalWritingMode = child.isHorizontalWritingMode() != isHorizon
talWritingMode(); |
1256 | 1256 |
1257 switch (RenderStyle::resolveJustification(style(), child.style(), ItemPositi
onStretch)) { | 1257 switch (RenderStyle::resolveJustification(style(), child.style(), ItemPositi
onStretch)) { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1324 ASSERT_NOT_REACHED(); | 1324 ASSERT_NOT_REACHED(); |
1325 return 0; | 1325 return 0; |
1326 } | 1326 } |
1327 | 1327 |
1328 LayoutUnit RenderGrid::endOfRowForChild(const RenderBox& child) const | 1328 LayoutUnit RenderGrid::endOfRowForChild(const RenderBox& child) const |
1329 { | 1329 { |
1330 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1330 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
1331 | 1331 |
1332 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi
on.toInt()]; | 1332 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi
on.toInt()]; |
1333 // The grid items should be inside the grid container's border box, that's w
hy they need to be shifted. | 1333 // The grid items should be inside the grid container's border box, that's w
hy they need to be shifted. |
1334 LayoutUnit rowPosition = startOfRow + marginBeforeForChild(&child); | 1334 LayoutUnit rowPosition = startOfRow + marginBeforeForChild(child); |
1335 | 1335 |
1336 LayoutUnit endOfRow = m_rowPositions[coordinate.rows.resolvedFinalPosition.n
ext().toInt()]; | 1336 LayoutUnit endOfRow = m_rowPositions[coordinate.rows.resolvedFinalPosition.n
ext().toInt()]; |
1337 LayoutUnit offsetFromRowPosition = computeOverflowAlignmentOffset(child.styl
e()->alignSelfOverflowAlignment(), startOfRow, endOfRow, child.logicalHeight()); | 1337 LayoutUnit offsetFromRowPosition = computeOverflowAlignmentOffset(child.styl
e()->alignSelfOverflowAlignment(), startOfRow, endOfRow, child.logicalHeight()); |
1338 | 1338 |
1339 return rowPosition + offsetFromRowPosition; | 1339 return rowPosition + offsetFromRowPosition; |
1340 } | 1340 } |
1341 | 1341 |
1342 LayoutUnit RenderGrid::startOfRowForChild(const RenderBox& child) const | 1342 LayoutUnit RenderGrid::startOfRowForChild(const RenderBox& child) const |
1343 { | 1343 { |
1344 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1344 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
1345 | 1345 |
1346 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi
on.toInt()]; | 1346 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi
on.toInt()]; |
1347 // The grid items should be inside the grid container's border box, that's w
hy they need to be shifted. | 1347 // The grid items should be inside the grid container's border box, that's w
hy they need to be shifted. |
1348 LayoutUnit rowPosition = startOfRow + marginBeforeForChild(&child); | 1348 LayoutUnit rowPosition = startOfRow + marginBeforeForChild(child); |
1349 | 1349 |
1350 return rowPosition; | 1350 return rowPosition; |
1351 } | 1351 } |
1352 | 1352 |
1353 LayoutUnit RenderGrid::centeredRowPositionForChild(const RenderBox& child) const | 1353 LayoutUnit RenderGrid::centeredRowPositionForChild(const RenderBox& child) const |
1354 { | 1354 { |
1355 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1355 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
1356 | 1356 |
1357 // The grid items should be inside the grid container's border box, that's w
hy they need to be shifted. | 1357 // The grid items should be inside the grid container's border box, that's w
hy they need to be shifted. |
1358 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi
on.toInt()] + marginBeforeForChild(&child); | 1358 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi
on.toInt()] + marginBeforeForChild(child); |
1359 LayoutUnit endOfRow = m_rowPositions[coordinate.rows.resolvedFinalPosition.n
ext().toInt()]; | 1359 LayoutUnit endOfRow = m_rowPositions[coordinate.rows.resolvedFinalPosition.n
ext().toInt()]; |
1360 LayoutUnit rowPosition = startOfRow + marginBeforeForChild(&child); | 1360 LayoutUnit rowPosition = startOfRow + marginBeforeForChild(child); |
1361 LayoutUnit offsetFromRowPosition = computeOverflowAlignmentOffset(child.styl
e()->alignSelfOverflowAlignment(), startOfRow, endOfRow, child.logicalHeight()); | 1361 LayoutUnit offsetFromRowPosition = computeOverflowAlignmentOffset(child.styl
e()->alignSelfOverflowAlignment(), startOfRow, endOfRow, child.logicalHeight()); |
1362 | 1362 |
1363 return rowPosition + offsetFromRowPosition / 2; | 1363 return rowPosition + offsetFromRowPosition / 2; |
1364 } | 1364 } |
1365 | 1365 |
1366 static inline LayoutUnit constrainedChildIntrinsicContentLogicalHeight(const Ren
derBox& child) | 1366 static inline LayoutUnit constrainedChildIntrinsicContentLogicalHeight(const Ren
derBox& child) |
1367 { | 1367 { |
1368 LayoutUnit childIntrinsicContentLogicalHeight = child.intrinsicContentLogica
lHeight(); | 1368 LayoutUnit childIntrinsicContentLogicalHeight = child.intrinsicContentLogica
lHeight(); |
1369 return child.constrainLogicalHeightByMinMax(childIntrinsicContentLogicalHeig
ht + child.borderAndPaddingLogicalHeight(), childIntrinsicContentLogicalHeight); | 1369 return child.constrainLogicalHeightByMinMax(childIntrinsicContentLogicalHeig
ht + child.borderAndPaddingLogicalHeight(), childIntrinsicContentLogicalHeight); |
1370 } | 1370 } |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1600 if (isOutOfFlowPositioned()) | 1600 if (isOutOfFlowPositioned()) |
1601 return "RenderGrid (positioned)"; | 1601 return "RenderGrid (positioned)"; |
1602 if (isAnonymous()) | 1602 if (isAnonymous()) |
1603 return "RenderGrid (generated)"; | 1603 return "RenderGrid (generated)"; |
1604 if (isRelPositioned()) | 1604 if (isRelPositioned()) |
1605 return "RenderGrid (relative positioned)"; | 1605 return "RenderGrid (relative positioned)"; |
1606 return "RenderGrid"; | 1606 return "RenderGrid"; |
1607 } | 1607 } |
1608 | 1608 |
1609 } // namespace blink | 1609 } // namespace blink |
OLD | NEW |