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 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 | 341 |
342 computeOverflow(oldClientAfterEdge); | 342 computeOverflow(oldClientAfterEdge); |
343 } | 343 } |
344 | 344 |
345 updateLayerTransformAfterLayout(); | 345 updateLayerTransformAfterLayout(); |
346 updateScrollInfoAfterLayout(); | 346 updateScrollInfoAfterLayout(); |
347 | 347 |
348 clearNeedsLayout(); | 348 clearNeedsLayout(); |
349 } | 349 } |
350 | 350 |
| 351 LayoutUnit LayoutGrid::guttersSize(GridTrackSizingDirection direction, size_t sp
an) const |
| 352 { |
| 353 ASSERT(span >= 1); |
| 354 |
| 355 if (span == 1) |
| 356 return 0; |
| 357 |
| 358 const Length& trackGap = direction == ForColumns ? styleRef().gridColumnGap(
) : styleRef().gridRowGap(); |
| 359 return valueForLength(trackGap, 0) * (span - 1); |
| 360 } |
| 361 |
351 void LayoutGrid::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layo
utUnit& maxLogicalWidth) const | 362 void LayoutGrid::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layo
utUnit& maxLogicalWidth) const |
352 { | 363 { |
353 const_cast<LayoutGrid*>(this)->placeItemsOnGrid(); | 364 const_cast<LayoutGrid*>(this)->placeItemsOnGrid(); |
354 | 365 |
355 GridSizingData sizingData(gridColumnCount(), gridRowCount()); | 366 GridSizingData sizingData(gridColumnCount(), gridRowCount()); |
356 LayoutUnit availableLogicalSpace = 0; | 367 LayoutUnit availableLogicalSpace = 0; |
357 const_cast<LayoutGrid*>(this)->computeUsedBreadthOfGridTracks(ForColumns, si
zingData, availableLogicalSpace); | 368 const_cast<LayoutGrid*>(this)->computeUsedBreadthOfGridTracks(ForColumns, si
zingData, availableLogicalSpace); |
358 | 369 |
359 for (const auto& column : sizingData.columnTracks) { | 370 for (const auto& column : sizingData.columnTracks) { |
360 const LayoutUnit& minTrackBreadth = column.baseSize(); | 371 const LayoutUnit& minTrackBreadth = column.baseSize(); |
361 const LayoutUnit& maxTrackBreadth = column.growthLimit(); | 372 const LayoutUnit& maxTrackBreadth = column.growthLimit(); |
362 | 373 |
363 minLogicalWidth += minTrackBreadth; | 374 minLogicalWidth += minTrackBreadth; |
364 maxLogicalWidth += maxTrackBreadth; | 375 maxLogicalWidth += maxTrackBreadth; |
365 } | 376 } |
366 | 377 |
| 378 LayoutUnit totalGuttersSize = guttersSize(ForColumns, sizingData.columnTrack
s.size()); |
| 379 minLogicalWidth += totalGuttersSize; |
| 380 maxLogicalWidth += totalGuttersSize; |
| 381 |
367 LayoutUnit scrollbarWidth = intrinsicScrollbarLogicalWidth(); | 382 LayoutUnit scrollbarWidth = intrinsicScrollbarLogicalWidth(); |
368 minLogicalWidth += scrollbarWidth; | 383 minLogicalWidth += scrollbarWidth; |
369 maxLogicalWidth += scrollbarWidth; | 384 maxLogicalWidth += scrollbarWidth; |
370 } | 385 } |
371 | 386 |
372 bool LayoutGrid::gridElementIsShrinkToFit() | 387 bool LayoutGrid::gridElementIsShrinkToFit() |
373 { | 388 { |
374 return isFloatingOrOutOfFlowPositioned(); | 389 return isFloatingOrOutOfFlowPositioned(); |
375 } | 390 } |
376 | 391 |
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
930 | 945 |
931 sizingData.filteredTracks.append(&track); | 946 sizingData.filteredTracks.append(&track); |
932 | 947 |
933 if (trackShouldGrowBeyondGrowthLimitsForTrackSizeComputationPhase(ph
ase, trackSize)) | 948 if (trackShouldGrowBeyondGrowthLimitsForTrackSizeComputationPhase(ph
ase, trackSize)) |
934 sizingData.growBeyondGrowthLimitsTracks.append(&track); | 949 sizingData.growBeyondGrowthLimitsTracks.append(&track); |
935 } | 950 } |
936 | 951 |
937 if (sizingData.filteredTracks.isEmpty()) | 952 if (sizingData.filteredTracks.isEmpty()) |
938 continue; | 953 continue; |
939 | 954 |
| 955 spanningTracksSize += guttersSize(direction, itemSpan.integerSpan()); |
| 956 |
940 LayoutUnit extraSpace = currentItemSizeForTrackSizeComputationPhase(phas
e, gridItemWithSpan.gridItem(), direction, sizingData.columnTracks) - spanningTr
acksSize; | 957 LayoutUnit extraSpace = currentItemSizeForTrackSizeComputationPhase(phas
e, gridItemWithSpan.gridItem(), direction, sizingData.columnTracks) - spanningTr
acksSize; |
941 extraSpace = std::max<LayoutUnit>(extraSpace, 0); | 958 extraSpace = std::max<LayoutUnit>(extraSpace, 0); |
942 auto& tracksToGrowBeyondGrowthLimits = sizingData.growBeyondGrowthLimits
Tracks.isEmpty() ? sizingData.filteredTracks : sizingData.growBeyondGrowthLimits
Tracks; | 959 auto& tracksToGrowBeyondGrowthLimits = sizingData.growBeyondGrowthLimits
Tracks.isEmpty() ? sizingData.filteredTracks : sizingData.growBeyondGrowthLimits
Tracks; |
943 distributeSpaceToTracks<phase>(sizingData.filteredTracks, &tracksToGrowB
eyondGrowthLimits, sizingData, extraSpace); | 960 distributeSpaceToTracks<phase>(sizingData.filteredTracks, &tracksToGrowB
eyondGrowthLimits, sizingData, extraSpace); |
944 } | 961 } |
945 | 962 |
946 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { | 963 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { |
947 GridTrack& track = tracks[trackIndex]; | 964 GridTrack& track = tracks[trackIndex]; |
948 markAsInfinitelyGrowableForTrackSizeComputationPhase(phase, track); | 965 markAsInfinitelyGrowableForTrackSizeComputationPhase(phase, track); |
949 updateTrackSizeForTrackSizeComputationPhase(phase, track); | 966 updateTrackSizeForTrackSizeComputationPhase(phase, track); |
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1288 track->setBaseSize(baseSize); | 1305 track->setBaseSize(baseSize); |
1289 } | 1306 } |
1290 } | 1307 } |
1291 | 1308 |
1292 void LayoutGrid::layoutGridItems() | 1309 void LayoutGrid::layoutGridItems() |
1293 { | 1310 { |
1294 placeItemsOnGrid(); | 1311 placeItemsOnGrid(); |
1295 | 1312 |
1296 LayoutUnit availableSpaceForColumns = availableLogicalWidth(); | 1313 LayoutUnit availableSpaceForColumns = availableLogicalWidth(); |
1297 LayoutUnit availableSpaceForRows = availableLogicalHeight(IncludeMarginBorde
rPadding); | 1314 LayoutUnit availableSpaceForRows = availableLogicalHeight(IncludeMarginBorde
rPadding); |
| 1315 |
| 1316 // Remove space consumed by gutters from the available logical space. |
| 1317 availableSpaceForColumns -= guttersSize(ForColumns, gridColumnCount()); |
| 1318 availableSpaceForRows -= guttersSize(ForRows, gridRowCount()); |
| 1319 |
1298 GridSizingData sizingData(gridColumnCount(), gridRowCount()); | 1320 GridSizingData sizingData(gridColumnCount(), gridRowCount()); |
1299 computeUsedBreadthOfGridTracks(ForColumns, sizingData, availableSpaceForColu
mns); | 1321 computeUsedBreadthOfGridTracks(ForColumns, sizingData, availableSpaceForColu
mns); |
1300 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData.columnTracks
)); | 1322 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData.columnTracks
)); |
1301 computeUsedBreadthOfGridTracks(ForRows, sizingData, availableSpaceForRows); | 1323 computeUsedBreadthOfGridTracks(ForRows, sizingData, availableSpaceForRows); |
1302 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData.rowTracks)); | 1324 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData.rowTracks)); |
1303 | 1325 |
1304 applyStretchAlignmentToTracksIfNeeded(ForColumns, sizingData, availableSpace
ForColumns); | 1326 applyStretchAlignmentToTracksIfNeeded(ForColumns, sizingData, availableSpace
ForColumns); |
1305 applyStretchAlignmentToTracksIfNeeded(ForRows, sizingData, availableSpaceFor
Rows); | 1327 applyStretchAlignmentToTracksIfNeeded(ForRows, sizingData, availableSpaceFor
Rows); |
1306 | 1328 |
1307 populateGridPositions(sizingData, availableSpaceForColumns, availableSpaceFo
rRows); | 1329 populateGridPositions(sizingData, availableSpaceForColumns, availableSpaceFo
rRows); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1346 #endif | 1368 #endif |
1347 child->setLogicalLocation(findChildLogicalPosition(*child, sizingData)); | 1369 child->setLogicalLocation(findChildLogicalPosition(*child, sizingData)); |
1348 | 1370 |
1349 // Keep track of children overflowing their grid area as we might need t
o paint them even if the grid-area is | 1371 // Keep track of children overflowing their grid area as we might need t
o paint them even if the grid-area is |
1350 // not visible | 1372 // not visible |
1351 if (child->logicalHeight() > overrideContainingBlockContentLogicalHeight | 1373 if (child->logicalHeight() > overrideContainingBlockContentLogicalHeight |
1352 || child->logicalWidth() > overrideContainingBlockContentLogicalWidt
h) | 1374 || child->logicalWidth() > overrideContainingBlockContentLogicalWidt
h) |
1353 m_gridItemsOverflowingGridArea.append(child); | 1375 m_gridItemsOverflowingGridArea.append(child); |
1354 } | 1376 } |
1355 | 1377 |
| 1378 LayoutUnit height = borderAndPaddingLogicalHeight() + scrollbarLogicalHeight
(); |
1356 for (const auto& row : sizingData.rowTracks) | 1379 for (const auto& row : sizingData.rowTracks) |
1357 setLogicalHeight(logicalHeight() + row.baseSize()); | 1380 height += row.baseSize(); |
1358 | 1381 |
1359 LayoutUnit height = logicalHeight() + borderAndPaddingLogicalHeight() + scro
llbarLogicalHeight(); | 1382 height += guttersSize(ForRows, sizingData.rowTracks.size()); |
| 1383 |
1360 if (hasLineIfEmpty()) | 1384 if (hasLineIfEmpty()) |
1361 height = std::max(height, minimumLogicalHeightForEmptyLine()); | 1385 height = std::max(height, minimumLogicalHeightForEmptyLine()); |
1362 | 1386 |
1363 // Min / max logical height is handled by the call to updateLogicalHeight in
layoutBlock. | 1387 // Min / max logical height is handled by the call to updateLogicalHeight in
layoutBlock. |
1364 setLogicalHeight(height); | 1388 setLogicalHeight(height); |
1365 } | 1389 } |
1366 | 1390 |
1367 void LayoutGrid::prepareChildForPositionedLayout(LayoutBox& child) | 1391 void LayoutGrid::prepareChildForPositionedLayout(LayoutBox& child) |
1368 { | 1392 { |
1369 ASSERT(child.isOutOfFlowPositioned()); | 1393 ASSERT(child.isOutOfFlowPositioned()); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1468 return m_gridItemCoordinate.get(&gridItem); | 1492 return m_gridItemCoordinate.get(&gridItem); |
1469 } | 1493 } |
1470 | 1494 |
1471 LayoutUnit LayoutGrid::gridAreaBreadthForChild(const LayoutBox& child, GridTrack
SizingDirection direction, const Vector<GridTrack>& tracks) const | 1495 LayoutUnit LayoutGrid::gridAreaBreadthForChild(const LayoutBox& child, GridTrack
SizingDirection direction, const Vector<GridTrack>& tracks) const |
1472 { | 1496 { |
1473 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1497 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
1474 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor
dinate.rows; | 1498 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor
dinate.rows; |
1475 LayoutUnit gridAreaBreadth = 0; | 1499 LayoutUnit gridAreaBreadth = 0; |
1476 for (GridSpan::iterator trackPosition = span.begin(); trackPosition != span.
end(); ++trackPosition) | 1500 for (GridSpan::iterator trackPosition = span.begin(); trackPosition != span.
end(); ++trackPosition) |
1477 gridAreaBreadth += tracks[trackPosition.toInt()].baseSize(); | 1501 gridAreaBreadth += tracks[trackPosition.toInt()].baseSize(); |
| 1502 |
| 1503 gridAreaBreadth += guttersSize(direction, span.integerSpan()); |
| 1504 |
1478 return gridAreaBreadth; | 1505 return gridAreaBreadth; |
1479 } | 1506 } |
1480 | 1507 |
1481 LayoutUnit LayoutGrid::gridAreaBreadthForChildIncludingAlignmentOffsets(const La
youtBox& child, GridTrackSizingDirection direction, const GridSizingData& sizing
Data) const | 1508 LayoutUnit LayoutGrid::gridAreaBreadthForChildIncludingAlignmentOffsets(const La
youtBox& child, GridTrackSizingDirection direction, const GridSizingData& sizing
Data) const |
1482 { | 1509 { |
1483 // We need the cached value when available because Content Distribution alig
nment properties | 1510 // We need the cached value when available because Content Distribution alig
nment properties |
1484 // may have some influence in the final grid area breadth. | 1511 // may have some influence in the final grid area breadth. |
1485 const Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.col
umnTracks : sizingData.rowTracks; | 1512 const Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.col
umnTracks : sizingData.rowTracks; |
1486 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1513 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
1487 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor
dinate.rows; | 1514 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor
dinate.rows; |
1488 const Vector<LayoutUnit>& linePositions = (direction == ForColumns) ? m_colu
mnPositions : m_rowPositions; | 1515 const Vector<LayoutUnit>& linePositions = (direction == ForColumns) ? m_colu
mnPositions : m_rowPositions; |
1489 LayoutUnit initialTrackPosition = linePositions[span.resolvedInitialPosition
.toInt()]; | 1516 LayoutUnit initialTrackPosition = linePositions[span.resolvedInitialPosition
.toInt()]; |
1490 LayoutUnit finalTrackPosition = linePositions[span.resolvedFinalPosition.toI
nt()]; | 1517 LayoutUnit finalTrackPosition = linePositions[span.resolvedFinalPosition.toI
nt()]; |
1491 // Track Positions vector stores the 'start' grid line of each track, so w h
ave to add last track's baseSize. | 1518 // Track Positions vector stores the 'start' grid line of each track, so w h
ave to add last track's baseSize. |
1492 return finalTrackPosition - initialTrackPosition + tracks[span.resolvedFinal
Position.toInt()].baseSize(); | 1519 return finalTrackPosition - initialTrackPosition + tracks[span.resolvedFinal
Position.toInt()].baseSize(); |
1493 } | 1520 } |
1494 | 1521 |
1495 void LayoutGrid::populateGridPositions(GridSizingData& sizingData, LayoutUnit av
ailableSpaceForColumns, LayoutUnit availableSpaceForRows) | 1522 void LayoutGrid::populateGridPositions(GridSizingData& sizingData, LayoutUnit av
ailableSpaceForColumns, LayoutUnit availableSpaceForRows) |
1496 { | 1523 { |
1497 // Since we add alignment offsets, grid lines are not always adjacent. Hence
we will have to | 1524 // Since we add alignment offsets and track gutters, grid lines are not alwa
ys adjacent. Hence we will have to |
1498 // assume from now on that we just store positions of the initial grid lines
of each track, | 1525 // assume from now on that we just store positions of the initial grid lines
of each track, |
1499 // except the last one, which is the only one considered as a final grid lin
e of a track. | 1526 // except the last one, which is the only one considered as a final grid lin
e of a track. |
1500 // FIXME: This will affect the computed style value of grid tracks size, sin
ce we are | 1527 // FIXME: This will affect the computed style value of grid tracks size, sin
ce we are |
1501 // using these positions to compute them. | 1528 // using these positions to compute them. |
1502 | 1529 |
1503 unsigned numberOfTracks = sizingData.columnTracks.size(); | 1530 unsigned numberOfTracks = sizingData.columnTracks.size(); |
1504 unsigned numberOfLines = numberOfTracks + 1; | 1531 unsigned numberOfLines = numberOfTracks + 1; |
1505 unsigned lastLine = numberOfLines - 1; | 1532 unsigned lastLine = numberOfLines - 1; |
1506 unsigned nextToLastLine = numberOfLines - 2; | 1533 unsigned nextToLastLine = numberOfLines - 2; |
1507 ContentAlignmentData offset = computeContentPositionAndDistributionOffset(Fo
rColumns, availableSpaceForColumns, numberOfTracks); | 1534 ContentAlignmentData offset = computeContentPositionAndDistributionOffset(Fo
rColumns, availableSpaceForColumns, numberOfTracks); |
| 1535 LayoutUnit trackGap = guttersSize(ForColumns, 2); |
1508 m_columnPositions.resize(numberOfLines); | 1536 m_columnPositions.resize(numberOfLines); |
1509 m_columnPositions[0] = borderAndPaddingStart() + offset.positionOffset; | 1537 m_columnPositions[0] = borderAndPaddingStart() + offset.positionOffset; |
1510 for (unsigned i = 0; i < lastLine; ++i) | 1538 for (unsigned i = 0; i < lastLine; ++i) |
1511 m_columnPositions[i + 1] = m_columnPositions[i] + offset.distributionOff
set + sizingData.columnTracks[i].baseSize(); | 1539 m_columnPositions[i + 1] = m_columnPositions[i] + offset.distributionOff
set + sizingData.columnTracks[i].baseSize() + trackGap; |
1512 m_columnPositions[lastLine] = m_columnPositions[nextToLastLine] + sizingData
.columnTracks[nextToLastLine].baseSize(); | 1540 m_columnPositions[lastLine] = m_columnPositions[nextToLastLine] + sizingData
.columnTracks[nextToLastLine].baseSize(); |
1513 | 1541 |
1514 numberOfTracks = sizingData.rowTracks.size(); | 1542 numberOfTracks = sizingData.rowTracks.size(); |
1515 numberOfLines = numberOfTracks + 1; | 1543 numberOfLines = numberOfTracks + 1; |
1516 lastLine = numberOfLines - 1; | 1544 lastLine = numberOfLines - 1; |
1517 nextToLastLine = numberOfLines - 2; | 1545 nextToLastLine = numberOfLines - 2; |
1518 offset = computeContentPositionAndDistributionOffset(ForRows, availableSpace
ForRows, numberOfTracks); | 1546 offset = computeContentPositionAndDistributionOffset(ForRows, availableSpace
ForRows, numberOfTracks); |
| 1547 trackGap = guttersSize(ForRows, 2); |
1519 m_rowPositions.resize(numberOfLines); | 1548 m_rowPositions.resize(numberOfLines); |
1520 m_rowPositions[0] = borderAndPaddingBefore() + offset.positionOffset; | 1549 m_rowPositions[0] = borderAndPaddingBefore() + offset.positionOffset; |
1521 for (unsigned i = 0; i < lastLine; ++i) | 1550 for (unsigned i = 0; i < lastLine; ++i) |
1522 m_rowPositions[i + 1] = m_rowPositions[i] + offset.distributionOffset +
sizingData.rowTracks[i].baseSize(); | 1551 m_rowPositions[i + 1] = m_rowPositions[i] + offset.distributionOffset +
sizingData.rowTracks[i].baseSize() + trackGap; |
1523 m_rowPositions[lastLine] = m_rowPositions[nextToLastLine] + sizingData.rowTr
acks[nextToLastLine].baseSize(); | 1552 m_rowPositions[lastLine] = m_rowPositions[nextToLastLine] + sizingData.rowTr
acks[nextToLastLine].baseSize(); |
1524 } | 1553 } |
1525 | 1554 |
1526 static LayoutUnit computeOverflowAlignmentOffset(OverflowAlignment overflow, Lay
outUnit trackBreadth, LayoutUnit childBreadth) | 1555 static LayoutUnit computeOverflowAlignmentOffset(OverflowAlignment overflow, Lay
outUnit trackBreadth, LayoutUnit childBreadth) |
1527 { | 1556 { |
1528 LayoutUnit offset = trackBreadth - childBreadth; | 1557 LayoutUnit offset = trackBreadth - childBreadth; |
1529 switch (overflow) { | 1558 switch (overflow) { |
1530 case OverflowAlignmentSafe: | 1559 case OverflowAlignmentSafe: |
1531 // If overflow is 'safe', we have to make sure we don't overflow the 'st
art' | 1560 // If overflow is 'safe', we have to make sure we don't overflow the 'st
art' |
1532 // edge (potentially cause some data loss as the overflow is unreachable
). | 1561 // edge (potentially cause some data loss as the overflow is unreachable
). |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1817 if (hasAutoMarginsInColumnAxis(child)) | 1846 if (hasAutoMarginsInColumnAxis(child)) |
1818 return startPosition; | 1847 return startPosition; |
1819 GridAxisPosition axisPosition = columnAxisPositionForChild(child); | 1848 GridAxisPosition axisPosition = columnAxisPositionForChild(child); |
1820 switch (axisPosition) { | 1849 switch (axisPosition) { |
1821 case GridAxisStart: | 1850 case GridAxisStart: |
1822 return startPosition; | 1851 return startPosition; |
1823 case GridAxisEnd: | 1852 case GridAxisEnd: |
1824 case GridAxisCenter: { | 1853 case GridAxisCenter: { |
1825 size_t childEndLine = coordinate.rows.resolvedFinalPosition.next().toInt
(); | 1854 size_t childEndLine = coordinate.rows.resolvedFinalPosition.next().toInt
(); |
1826 LayoutUnit endOfRow = m_rowPositions[childEndLine]; | 1855 LayoutUnit endOfRow = m_rowPositions[childEndLine]; |
| 1856 // m_rowPositions include gutters so we need to substract them to get th
e actual end position for a given |
| 1857 // row (this does not have to be done for the last track as there are no
more m_rowPositions after it) |
| 1858 if (childEndLine < m_rowPositions.size() - 1) |
| 1859 endOfRow -= guttersSize(ForRows, 2); |
1827 LayoutUnit childBreadth = child.logicalHeight() + child.marginLogicalHei
ght(); | 1860 LayoutUnit childBreadth = child.logicalHeight() + child.marginLogicalHei
ght(); |
1828 if (childEndLine - childStartLine > 1 && childEndLine < m_rowPositions.s
ize() - 1) | 1861 if (childEndLine - childStartLine > 1 && childEndLine < m_rowPositions.s
ize() - 1) |
1829 endOfRow -= offsetBetweenTracks(styleRef().alignContentDistribution(
), m_rowPositions, childBreadth); | 1862 endOfRow -= offsetBetweenTracks(styleRef().alignContentDistribution(
), m_rowPositions, childBreadth); |
1830 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(chil
d.styleRef().alignSelfOverflowAlignment(), endOfRow - startOfRow, childBreadth); | 1863 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(chil
d.styleRef().alignSelfOverflowAlignment(), endOfRow - startOfRow, childBreadth); |
1831 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos
ition : offsetFromStartPosition / 2); | 1864 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos
ition : offsetFromStartPosition / 2); |
1832 } | 1865 } |
1833 } | 1866 } |
1834 | 1867 |
1835 ASSERT_NOT_REACHED(); | 1868 ASSERT_NOT_REACHED(); |
1836 return 0; | 1869 return 0; |
1837 } | 1870 } |
1838 | 1871 |
1839 LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child) const | 1872 LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child) const |
1840 { | 1873 { |
1841 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1874 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
1842 size_t childStartLine = coordinate.columns.resolvedInitialPosition.toInt(); | 1875 size_t childStartLine = coordinate.columns.resolvedInitialPosition.toInt(); |
1843 LayoutUnit startOfColumn = m_columnPositions[childStartLine]; | 1876 LayoutUnit startOfColumn = m_columnPositions[childStartLine]; |
1844 LayoutUnit startPosition = startOfColumn + marginStartForChild(child); | 1877 LayoutUnit startPosition = startOfColumn + marginStartForChild(child); |
1845 if (hasAutoMarginsInRowAxis(child)) | 1878 if (hasAutoMarginsInRowAxis(child)) |
1846 return startPosition; | 1879 return startPosition; |
1847 GridAxisPosition axisPosition = rowAxisPositionForChild(child); | 1880 GridAxisPosition axisPosition = rowAxisPositionForChild(child); |
1848 switch (axisPosition) { | 1881 switch (axisPosition) { |
1849 case GridAxisStart: | 1882 case GridAxisStart: |
1850 return startPosition; | 1883 return startPosition; |
1851 case GridAxisEnd: | 1884 case GridAxisEnd: |
1852 case GridAxisCenter: { | 1885 case GridAxisCenter: { |
1853 size_t childEndLine = coordinate.columns.resolvedFinalPosition.next().to
Int(); | 1886 size_t childEndLine = coordinate.columns.resolvedFinalPosition.next().to
Int(); |
1854 LayoutUnit endOfColumn = m_columnPositions[childEndLine]; | 1887 LayoutUnit endOfColumn = m_columnPositions[childEndLine]; |
| 1888 // m_columnPositions include gutters so we need to substract them to get
the actual end position for a given |
| 1889 // column (this does not have to be done for the last track as there are
no more m_columnPositions after it) |
| 1890 if (childEndLine < m_columnPositions.size() - 1) |
| 1891 endOfColumn -= guttersSize(ForRows, 2); |
1855 LayoutUnit childBreadth = child.logicalWidth() + child.marginLogicalWidt
h(); | 1892 LayoutUnit childBreadth = child.logicalWidth() + child.marginLogicalWidt
h(); |
1856 if (childEndLine - childStartLine > 1 && childEndLine < m_columnPosition
s.size() - 1) | 1893 if (childEndLine - childStartLine > 1 && childEndLine < m_columnPosition
s.size() - 1) |
1857 endOfColumn -= offsetBetweenTracks(styleRef().justifyContentDistribu
tion(), m_columnPositions, childBreadth); | 1894 endOfColumn -= offsetBetweenTracks(styleRef().justifyContentDistribu
tion(), m_columnPositions, childBreadth); |
1858 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(chil
d.styleRef().justifySelfOverflowAlignment(), endOfColumn - startOfColumn, childB
readth); | 1895 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(chil
d.styleRef().justifySelfOverflowAlignment(), endOfColumn - startOfColumn, childB
readth); |
1859 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos
ition : offsetFromStartPosition / 2); | 1896 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos
ition : offsetFromStartPosition / 2); |
1860 } | 1897 } |
1861 } | 1898 } |
1862 | 1899 |
1863 ASSERT_NOT_REACHED(); | 1900 ASSERT_NOT_REACHED(); |
1864 return 0; | 1901 return 0; |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1990 | 2027 |
1991 return LayoutPoint(rowAxisOffset, columnAxisOffsetForChild(child)); | 2028 return LayoutPoint(rowAxisOffset, columnAxisOffsetForChild(child)); |
1992 } | 2029 } |
1993 | 2030 |
1994 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa
intOffset) const | 2031 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa
intOffset) const |
1995 { | 2032 { |
1996 GridPainter(*this).paintChildren(paintInfo, paintOffset); | 2033 GridPainter(*this).paintChildren(paintInfo, paintOffset); |
1997 } | 2034 } |
1998 | 2035 |
1999 } // namespace blink | 2036 } // namespace blink |
OLD | NEW |