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