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 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
363 | 363 |
364 computeOverflow(oldClientAfterEdge); | 364 computeOverflow(oldClientAfterEdge); |
365 } | 365 } |
366 | 366 |
367 updateLayerTransformAfterLayout(); | 367 updateLayerTransformAfterLayout(); |
368 updateScrollInfoAfterLayout(); | 368 updateScrollInfoAfterLayout(); |
369 | 369 |
370 clearNeedsLayout(); | 370 clearNeedsLayout(); |
371 } | 371 } |
372 | 372 |
373 LayoutUnit LayoutGrid::guttersSize(GridTrackSizingDirection direction, size_t sp an) const | |
374 { | |
375 if (span == 1) | |
376 return 0; | |
377 | |
378 DEFINE_STATIC_LOCAL(LayoutUnit, zero, ()); | |
esprehn
2015/10/01 08:46:48
LayoutUnit is basically just an int, don't define
svillar
2015/10/02 10:00:29
Acknowledged.
| |
379 const Length& trackGap = direction == ForColumns ? styleRef().gridColumnGap( ) : styleRef().gridRowGap(); | |
380 return valueForLength(trackGap, zero) * (span - 1); | |
esprehn
2015/10/01 08:46:48
just pass 0, it'll be made into a LayoutUnit
if s
svillar
2015/10/02 10:00:29
span cannot be negative as it is a size_t. In any
| |
381 } | |
382 | |
373 void LayoutGrid::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layo utUnit& maxLogicalWidth) const | 383 void LayoutGrid::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layo utUnit& maxLogicalWidth) const |
374 { | 384 { |
375 const_cast<LayoutGrid*>(this)->placeItemsOnGrid(); | 385 const_cast<LayoutGrid*>(this)->placeItemsOnGrid(); |
376 | 386 |
377 GridSizingData sizingData(gridColumnCount(), gridRowCount()); | 387 GridSizingData sizingData(gridColumnCount(), gridRowCount()); |
378 LayoutUnit availableLogicalSpace = 0; | 388 LayoutUnit availableLogicalSpace = 0; |
379 const_cast<LayoutGrid*>(this)->computeUsedBreadthOfGridTracks(ForColumns, si zingData, availableLogicalSpace); | 389 const_cast<LayoutGrid*>(this)->computeUsedBreadthOfGridTracks(ForColumns, si zingData, availableLogicalSpace); |
380 | 390 |
381 for (const auto& column : sizingData.columnTracks) { | 391 for (const auto& column : sizingData.columnTracks) { |
382 const LayoutUnit& minTrackBreadth = column.baseSize(); | 392 const LayoutUnit& minTrackBreadth = column.baseSize(); |
383 const LayoutUnit& maxTrackBreadth = column.growthLimit(); | 393 const LayoutUnit& maxTrackBreadth = column.growthLimit(); |
384 | 394 |
385 minLogicalWidth += minTrackBreadth; | 395 minLogicalWidth += minTrackBreadth; |
386 maxLogicalWidth += maxTrackBreadth; | 396 maxLogicalWidth += maxTrackBreadth; |
387 } | 397 } |
388 | 398 |
399 LayoutUnit totalGuttersSize = guttersSize(ForColumns, sizingData.columnTrack s.size()); | |
400 minLogicalWidth += totalGuttersSize; | |
401 maxLogicalWidth += totalGuttersSize; | |
402 | |
389 LayoutUnit scrollbarWidth = intrinsicScrollbarLogicalWidth(); | 403 LayoutUnit scrollbarWidth = intrinsicScrollbarLogicalWidth(); |
390 minLogicalWidth += scrollbarWidth; | 404 minLogicalWidth += scrollbarWidth; |
391 maxLogicalWidth += scrollbarWidth; | 405 maxLogicalWidth += scrollbarWidth; |
392 } | 406 } |
393 | 407 |
394 bool LayoutGrid::gridElementIsShrinkToFit() | 408 bool LayoutGrid::gridElementIsShrinkToFit() |
395 { | 409 { |
396 return isFloatingOrOutOfFlowPositioned(); | 410 return isFloatingOrOutOfFlowPositioned(); |
397 } | 411 } |
398 | 412 |
399 void LayoutGrid::computeUsedBreadthOfGridTracks(GridTrackSizingDirection directi on, GridSizingData& sizingData, LayoutUnit& freeSpace) | 413 void LayoutGrid::computeUsedBreadthOfGridTracks(GridTrackSizingDirection directi on, GridSizingData& sizingData, LayoutUnit& freeSpace) |
400 { | 414 { |
401 const LayoutUnit initialFreeSpace = freeSpace; | 415 const LayoutUnit initialFreeSpace = freeSpace; |
402 Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTra cks : sizingData.rowTracks; | 416 Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTra cks : sizingData.rowTracks; |
417 | |
403 Vector<size_t> flexibleSizedTracksIndex; | 418 Vector<size_t> flexibleSizedTracksIndex; |
404 sizingData.contentSizedTracksIndex.shrink(0); | 419 sizingData.contentSizedTracksIndex.shrink(0); |
405 | 420 |
406 // 1. Initialize per Grid track variables. | 421 // 1. Initialize per Grid track variables. |
407 for (size_t i = 0; i < tracks.size(); ++i) { | 422 for (size_t i = 0; i < tracks.size(); ++i) { |
408 GridTrack& track = tracks[i]; | 423 GridTrack& track = tracks[i]; |
409 GridTrackSize trackSize = gridTrackSize(direction, i); | 424 GridTrackSize trackSize = gridTrackSize(direction, i); |
410 const GridLength& minTrackBreadth = trackSize.minTrackBreadth(); | 425 const GridLength& minTrackBreadth = trackSize.minTrackBreadth(); |
411 const GridLength& maxTrackBreadth = trackSize.maxTrackBreadth(); | 426 const GridLength& maxTrackBreadth = trackSize.maxTrackBreadth(); |
412 | 427 |
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
946 | 961 |
947 sizingData.filteredTracks.append(&track); | 962 sizingData.filteredTracks.append(&track); |
948 | 963 |
949 if (trackShouldGrowBeyondGrowthLimitsForTrackSizeComputationPhase(ph ase, trackSize)) | 964 if (trackShouldGrowBeyondGrowthLimitsForTrackSizeComputationPhase(ph ase, trackSize)) |
950 sizingData.growBeyondGrowthLimitsTracks.append(&track); | 965 sizingData.growBeyondGrowthLimitsTracks.append(&track); |
951 } | 966 } |
952 | 967 |
953 if (sizingData.filteredTracks.isEmpty()) | 968 if (sizingData.filteredTracks.isEmpty()) |
954 continue; | 969 continue; |
955 | 970 |
971 spanningTracksSize += guttersSize(direction, itemSpan.integerSpan()); | |
972 | |
956 LayoutUnit extraSpace = currentItemSizeForTrackSizeComputationPhase(phas e, gridItemWithSpan.gridItem(), direction, sizingData.columnTracks) - spanningTr acksSize; | 973 LayoutUnit extraSpace = currentItemSizeForTrackSizeComputationPhase(phas e, gridItemWithSpan.gridItem(), direction, sizingData.columnTracks) - spanningTr acksSize; |
957 extraSpace = std::max<LayoutUnit>(extraSpace, 0); | 974 extraSpace = std::max<LayoutUnit>(extraSpace, 0); |
958 auto& tracksToGrowBeyondGrowthLimits = sizingData.growBeyondGrowthLimits Tracks.isEmpty() ? sizingData.filteredTracks : sizingData.growBeyondGrowthLimits Tracks; | 975 auto& tracksToGrowBeyondGrowthLimits = sizingData.growBeyondGrowthLimits Tracks.isEmpty() ? sizingData.filteredTracks : sizingData.growBeyondGrowthLimits Tracks; |
959 distributeSpaceToTracks<phase>(sizingData.filteredTracks, &tracksToGrowB eyondGrowthLimits, sizingData, extraSpace); | 976 distributeSpaceToTracks<phase>(sizingData.filteredTracks, &tracksToGrowB eyondGrowthLimits, sizingData, extraSpace); |
960 } | 977 } |
961 | 978 |
962 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { | 979 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { |
963 GridTrack& track = tracks[trackIndex]; | 980 GridTrack& track = tracks[trackIndex]; |
964 markAsInfinitelyGrowableForTrackSizeComputationPhase(phase, track); | 981 markAsInfinitelyGrowableForTrackSizeComputationPhase(phase, track); |
965 updateTrackSizeForTrackSizeComputationPhase(phase, track); | 982 updateTrackSizeForTrackSizeComputationPhase(phase, track); |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1302 track->setBaseSize(baseSize); | 1319 track->setBaseSize(baseSize); |
1303 } | 1320 } |
1304 } | 1321 } |
1305 | 1322 |
1306 void LayoutGrid::layoutGridItems() | 1323 void LayoutGrid::layoutGridItems() |
1307 { | 1324 { |
1308 placeItemsOnGrid(); | 1325 placeItemsOnGrid(); |
1309 | 1326 |
1310 LayoutUnit availableSpaceForColumns = availableLogicalWidth(); | 1327 LayoutUnit availableSpaceForColumns = availableLogicalWidth(); |
1311 LayoutUnit availableSpaceForRows = availableLogicalHeight(IncludeMarginBorde rPadding); | 1328 LayoutUnit availableSpaceForRows = availableLogicalHeight(IncludeMarginBorde rPadding); |
1329 | |
1330 // Remove space consumed by gutters from the available logical space. | |
1331 availableSpaceForColumns -= guttersSize(ForColumns, gridColumnCount()); | |
1332 availableSpaceForRows -= guttersSize(ForRows, gridRowCount()); | |
1333 | |
1312 GridSizingData sizingData(gridColumnCount(), gridRowCount()); | 1334 GridSizingData sizingData(gridColumnCount(), gridRowCount()); |
1313 computeUsedBreadthOfGridTracks(ForColumns, sizingData, availableSpaceForColu mns); | 1335 computeUsedBreadthOfGridTracks(ForColumns, sizingData, availableSpaceForColu mns); |
1314 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData.columnTracks )); | 1336 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData.columnTracks )); |
1315 computeUsedBreadthOfGridTracks(ForRows, sizingData, availableSpaceForRows); | 1337 computeUsedBreadthOfGridTracks(ForRows, sizingData, availableSpaceForRows); |
1316 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData.rowTracks)); | 1338 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData.rowTracks)); |
1317 | 1339 |
1318 applyStretchAlignmentToTracksIfNeeded(ForColumns, sizingData, availableSpace ForColumns); | 1340 applyStretchAlignmentToTracksIfNeeded(ForColumns, sizingData, availableSpace ForColumns); |
1319 applyStretchAlignmentToTracksIfNeeded(ForRows, sizingData, availableSpaceFor Rows); | 1341 applyStretchAlignmentToTracksIfNeeded(ForRows, sizingData, availableSpaceFor Rows); |
1320 | 1342 |
1321 populateGridPositions(sizingData, availableSpaceForColumns, availableSpaceFo rRows); | 1343 populateGridPositions(sizingData, availableSpaceForColumns, availableSpaceFo rRows); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1356 #endif | 1378 #endif |
1357 child->setLogicalLocation(findChildLogicalPosition(*child, sizingData)); | 1379 child->setLogicalLocation(findChildLogicalPosition(*child, sizingData)); |
1358 | 1380 |
1359 // Keep track of children overflowing their grid area as we might need t o paint them even if the grid-area is | 1381 // Keep track of children overflowing their grid area as we might need t o paint them even if the grid-area is |
1360 // not visible | 1382 // not visible |
1361 if (child->logicalHeight() > overrideContainingBlockContentLogicalHeight | 1383 if (child->logicalHeight() > overrideContainingBlockContentLogicalHeight |
1362 || child->logicalWidth() > overrideContainingBlockContentLogicalWidt h) | 1384 || child->logicalWidth() > overrideContainingBlockContentLogicalWidt h) |
1363 m_gridItemsOverflowingGridArea.append(child); | 1385 m_gridItemsOverflowingGridArea.append(child); |
1364 } | 1386 } |
1365 | 1387 |
1388 LayoutUnit height = borderAndPaddingLogicalHeight(); | |
1366 for (const auto& row : sizingData.rowTracks) | 1389 for (const auto& row : sizingData.rowTracks) |
1367 setLogicalHeight(logicalHeight() + row.baseSize()); | 1390 height += row.baseSize(); |
1368 | 1391 |
1369 LayoutUnit height = logicalHeight() + borderAndPaddingLogicalHeight(); | 1392 height += guttersSize(ForRows, sizingData.rowTracks.size()); |
1393 | |
1370 if (hasLineIfEmpty()) | 1394 if (hasLineIfEmpty()) |
1371 height = std::max(height, minimumLogicalHeightForEmptyLine()); | 1395 height = std::max(height, minimumLogicalHeightForEmptyLine()); |
1372 | 1396 |
1373 // Min / max logical height is handled by the call to updateLogicalHeight in layoutBlock. | 1397 // Min / max logical height is handled by the call to updateLogicalHeight in layoutBlock. |
1374 setLogicalHeight(height); | 1398 setLogicalHeight(height); |
1375 } | 1399 } |
1376 | 1400 |
1377 void LayoutGrid::prepareChildForPositionedLayout(LayoutBox& child) | 1401 void LayoutGrid::prepareChildForPositionedLayout(LayoutBox& child) |
1378 { | 1402 { |
1379 ASSERT(child.isOutOfFlowPositioned()); | 1403 ASSERT(child.isOutOfFlowPositioned()); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1471 return m_gridItemCoordinate.get(&gridItem); | 1495 return m_gridItemCoordinate.get(&gridItem); |
1472 } | 1496 } |
1473 | 1497 |
1474 LayoutUnit LayoutGrid::gridAreaBreadthForChild(const LayoutBox& child, GridTrack SizingDirection direction, const Vector<GridTrack>& tracks) const | 1498 LayoutUnit LayoutGrid::gridAreaBreadthForChild(const LayoutBox& child, GridTrack SizingDirection direction, const Vector<GridTrack>& tracks) const |
1475 { | 1499 { |
1476 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1500 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
1477 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor dinate.rows; | 1501 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor dinate.rows; |
1478 LayoutUnit gridAreaBreadth = 0; | 1502 LayoutUnit gridAreaBreadth = 0; |
1479 for (GridSpan::iterator trackPosition = span.begin(); trackPosition != span. end(); ++trackPosition) | 1503 for (GridSpan::iterator trackPosition = span.begin(); trackPosition != span. end(); ++trackPosition) |
1480 gridAreaBreadth += tracks[trackPosition.toInt()].baseSize(); | 1504 gridAreaBreadth += tracks[trackPosition.toInt()].baseSize(); |
1505 | |
1506 gridAreaBreadth += guttersSize(direction, span.integerSpan()); | |
1507 | |
1481 return gridAreaBreadth; | 1508 return gridAreaBreadth; |
1482 } | 1509 } |
1483 | 1510 |
1484 LayoutUnit LayoutGrid::gridAreaBreadthForChildIncludingAlignmentOffsets(const La youtBox& child, GridTrackSizingDirection direction, const GridSizingData& sizing Data) const | 1511 LayoutUnit LayoutGrid::gridAreaBreadthForChildIncludingAlignmentOffsets(const La youtBox& child, GridTrackSizingDirection direction, const GridSizingData& sizing Data) const |
1485 { | 1512 { |
1486 // We need the cached value when available because Content Distribution alig nment properties | 1513 // We need the cached value when available because Content Distribution alig nment properties |
1487 // may have some influence in the final grid area breadth. | 1514 // may have some influence in the final grid area breadth. |
1488 const Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.col umnTracks : sizingData.rowTracks; | 1515 const Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.col umnTracks : sizingData.rowTracks; |
1489 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1516 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
1490 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor dinate.rows; | 1517 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor dinate.rows; |
1491 const Vector<LayoutUnit>& linePositions = (direction == ForColumns) ? m_colu mnPositions : m_rowPositions; | 1518 const Vector<LayoutUnit>& linePositions = (direction == ForColumns) ? m_colu mnPositions : m_rowPositions; |
1492 LayoutUnit initialTrackPosition = linePositions[span.resolvedInitialPosition .toInt()]; | 1519 LayoutUnit initialTrackPosition = linePositions[span.resolvedInitialPosition .toInt()]; |
1493 LayoutUnit finalTrackPosition = linePositions[span.resolvedFinalPosition.toI nt()]; | 1520 LayoutUnit finalTrackPosition = linePositions[span.resolvedFinalPosition.toI nt()]; |
1494 // Track Positions vector stores the 'start' grid line of each track, so w h ave to add last track's baseSize. | 1521 // Track Positions vector stores the 'start' grid line of each track, so w h ave to add last track's baseSize. |
1495 return finalTrackPosition - initialTrackPosition + tracks[span.resolvedFinal Position.toInt()].baseSize(); | 1522 return finalTrackPosition - initialTrackPosition + tracks[span.resolvedFinal Position.toInt()].baseSize(); |
1496 } | 1523 } |
1497 | 1524 |
1498 void LayoutGrid::populateGridPositions(GridSizingData& sizingData, LayoutUnit av ailableSpaceForColumns, LayoutUnit availableSpaceForRows) | 1525 void LayoutGrid::populateGridPositions(GridSizingData& sizingData, LayoutUnit av ailableSpaceForColumns, LayoutUnit availableSpaceForRows) |
1499 { | 1526 { |
1500 // Since we add alignment offsets, grid lines are not always adjacent. Hence we will have to | 1527 // Since we add alignment offsets and track gutters, grid lines are not alwa ys adjacent. Hence we will have to |
1501 // assume from now on that we just store positions of the initial grid lines of each track, | 1528 // assume from now on that we just store positions of the initial grid lines of each track, |
1502 // except the last one, which is the only one considered as a final grid lin e of a track. | 1529 // except the last one, which is the only one considered as a final grid lin e of a track. |
1503 // FIXME: This will affect the computed style value of grid tracks size, sin ce we are | 1530 // FIXME: This will affect the computed style value of grid tracks size, sin ce we are |
1504 // using these positions to compute them. | 1531 // using these positions to compute them. |
1505 | 1532 |
1506 unsigned numberOfTracks = sizingData.columnTracks.size(); | 1533 unsigned numberOfTracks = sizingData.columnTracks.size(); |
1507 unsigned numberOfLines = numberOfTracks + 1; | 1534 unsigned numberOfLines = numberOfTracks + 1; |
1508 unsigned lastLine = numberOfLines - 1; | 1535 unsigned lastLine = numberOfLines - 1; |
1509 unsigned nextToLastLine = numberOfLines - 2; | 1536 unsigned nextToLastLine = numberOfLines - 2; |
1510 ContentAlignmentData offset = computeContentPositionAndDistributionOffset(Fo rColumns, availableSpaceForColumns, numberOfTracks); | 1537 ContentAlignmentData offset = computeContentPositionAndDistributionOffset(Fo rColumns, availableSpaceForColumns, numberOfTracks); |
1538 LayoutUnit trackGap = guttersSize(ForColumns, 2); | |
1511 m_columnPositions.resize(numberOfLines); | 1539 m_columnPositions.resize(numberOfLines); |
1512 m_columnPositions[0] = borderAndPaddingStart() + offset.positionOffset; | 1540 m_columnPositions[0] = borderAndPaddingStart() + offset.positionOffset; |
1513 for (unsigned i = 0; i < lastLine; ++i) | 1541 for (unsigned i = 0; i < lastLine; ++i) |
1514 m_columnPositions[i + 1] = m_columnPositions[i] + offset.distributionOff set + sizingData.columnTracks[i].baseSize(); | 1542 m_columnPositions[i + 1] = m_columnPositions[i] + offset.distributionOff set + sizingData.columnTracks[i].baseSize() + trackGap; |
1515 m_columnPositions[lastLine] = m_columnPositions[nextToLastLine] + sizingData .columnTracks[nextToLastLine].baseSize(); | 1543 m_columnPositions[lastLine] = m_columnPositions[nextToLastLine] + sizingData .columnTracks[nextToLastLine].baseSize(); |
1516 | 1544 |
1517 numberOfTracks = sizingData.rowTracks.size(); | 1545 numberOfTracks = sizingData.rowTracks.size(); |
1518 numberOfLines = numberOfTracks + 1; | 1546 numberOfLines = numberOfTracks + 1; |
1519 lastLine = numberOfLines - 1; | 1547 lastLine = numberOfLines - 1; |
1520 nextToLastLine = numberOfLines - 2; | 1548 nextToLastLine = numberOfLines - 2; |
1521 offset = computeContentPositionAndDistributionOffset(ForRows, availableSpace ForRows, numberOfTracks); | 1549 offset = computeContentPositionAndDistributionOffset(ForRows, availableSpace ForRows, numberOfTracks); |
1550 trackGap = guttersSize(ForRows, 2); | |
1522 m_rowPositions.resize(numberOfLines); | 1551 m_rowPositions.resize(numberOfLines); |
1523 m_rowPositions[0] = borderAndPaddingBefore() + offset.positionOffset; | 1552 m_rowPositions[0] = borderAndPaddingBefore() + offset.positionOffset; |
1524 for (unsigned i = 0; i < lastLine; ++i) | 1553 for (unsigned i = 0; i < lastLine; ++i) |
1525 m_rowPositions[i + 1] = m_rowPositions[i] + offset.distributionOffset + sizingData.rowTracks[i].baseSize(); | 1554 m_rowPositions[i + 1] = m_rowPositions[i] + offset.distributionOffset + sizingData.rowTracks[i].baseSize() + trackGap; |
1526 m_rowPositions[lastLine] = m_rowPositions[nextToLastLine] + sizingData.rowTr acks[nextToLastLine].baseSize(); | 1555 m_rowPositions[lastLine] = m_rowPositions[nextToLastLine] + sizingData.rowTr acks[nextToLastLine].baseSize(); |
1527 } | 1556 } |
1528 | 1557 |
1529 static LayoutUnit computeOverflowAlignmentOffset(OverflowAlignment overflow, Lay outUnit trackBreadth, LayoutUnit childBreadth) | 1558 static LayoutUnit computeOverflowAlignmentOffset(OverflowAlignment overflow, Lay outUnit trackBreadth, LayoutUnit childBreadth) |
1530 { | 1559 { |
1531 LayoutUnit offset = trackBreadth - childBreadth; | 1560 LayoutUnit offset = trackBreadth - childBreadth; |
1532 switch (overflow) { | 1561 switch (overflow) { |
1533 case OverflowAlignmentSafe: | 1562 case OverflowAlignmentSafe: |
1534 // If overflow is 'safe', we have to make sure we don't overflow the 'st art' | 1563 // If overflow is 'safe', we have to make sure we don't overflow the 'st art' |
1535 // edge (potentially cause some data loss as the overflow is unreachable ). | 1564 // edge (potentially cause some data loss as the overflow is unreachable ). |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1756 { | 1785 { |
1757 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1786 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
1758 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi on.toInt()]; | 1787 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi on.toInt()]; |
1759 LayoutUnit startPosition = startOfRow + marginBeforeForChild(child); | 1788 LayoutUnit startPosition = startOfRow + marginBeforeForChild(child); |
1760 GridAxisPosition axisPosition = columnAxisPositionForChild(child); | 1789 GridAxisPosition axisPosition = columnAxisPositionForChild(child); |
1761 switch (axisPosition) { | 1790 switch (axisPosition) { |
1762 case GridAxisStart: | 1791 case GridAxisStart: |
1763 return startPosition; | 1792 return startPosition; |
1764 case GridAxisEnd: | 1793 case GridAxisEnd: |
1765 case GridAxisCenter: { | 1794 case GridAxisCenter: { |
1766 LayoutUnit endOfRow = m_rowPositions[coordinate.rows.resolvedFinalPositi on.next().toInt()]; | 1795 size_t childEndLine = coordinate.rows.resolvedFinalPosition.next().toInt (); |
1796 LayoutUnit endOfRow = m_rowPositions[childEndLine]; | |
1797 // // m_rowPositions include gutters so we need to substract them to get the actual end position for a given | |
cbiesinger
2015/09/30 15:22:42
remove one of the //
| |
1798 // // row (this does not have to be done for the last track as there are no more m_rowPositions after it) | |
1799 if (childEndLine < m_rowPositions.size() - 1) | |
1800 endOfRow -= guttersSize(ForRows, 2); | |
1767 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(chil d.styleRef().alignSelfOverflowAlignment(), endOfRow - startOfRow, child.logicalH eight() + child.marginLogicalHeight()); | 1801 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(chil d.styleRef().alignSelfOverflowAlignment(), endOfRow - startOfRow, child.logicalH eight() + child.marginLogicalHeight()); |
1768 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos ition : offsetFromStartPosition / 2); | 1802 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos ition : offsetFromStartPosition / 2); |
1769 } | 1803 } |
1770 } | 1804 } |
1771 | 1805 |
1772 ASSERT_NOT_REACHED(); | 1806 ASSERT_NOT_REACHED(); |
1773 return 0; | 1807 return 0; |
1774 } | 1808 } |
1775 | 1809 |
1776 LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child) const | 1810 LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child) const |
1777 { | 1811 { |
1778 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1812 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
1779 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit ialPosition.toInt()]; | 1813 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit ialPosition.toInt()]; |
1780 LayoutUnit startPosition = startOfColumn + marginStartForChild(child); | 1814 LayoutUnit startPosition = startOfColumn + marginStartForChild(child); |
1781 GridAxisPosition axisPosition = rowAxisPositionForChild(child); | 1815 GridAxisPosition axisPosition = rowAxisPositionForChild(child); |
1782 switch (axisPosition) { | 1816 switch (axisPosition) { |
1783 case GridAxisStart: | 1817 case GridAxisStart: |
1784 return startPosition; | 1818 return startPosition; |
1785 case GridAxisEnd: | 1819 case GridAxisEnd: |
1786 case GridAxisCenter: { | 1820 case GridAxisCenter: { |
1787 LayoutUnit endOfColumn = m_columnPositions[coordinate.columns.resolvedFi nalPosition.next().toInt()]; | 1821 size_t childEndLine = coordinate.columns.resolvedFinalPosition.next().to Int(); |
1822 LayoutUnit endOfColumn = m_columnPositions[childEndLine]; | |
1823 // m_columnPositions include gutters so we need to substract them to get the actual end position for a given | |
1824 // column (this does not have to be done for the last track as there are no more m_columnPositions after it) | |
1825 if (childEndLine < m_columnPositions.size() - 1) | |
1826 endOfColumn -= guttersSize(ForRows, 2); | |
1788 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(chil d.styleRef().justifySelfOverflowAlignment(), endOfColumn - startOfColumn, child. logicalWidth() + child.marginLogicalWidth()); | 1827 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(chil d.styleRef().justifySelfOverflowAlignment(), endOfColumn - startOfColumn, child. logicalWidth() + child.marginLogicalWidth()); |
1789 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos ition : offsetFromStartPosition / 2); | 1828 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos ition : offsetFromStartPosition / 2); |
1790 } | 1829 } |
1791 } | 1830 } |
1792 | 1831 |
1793 ASSERT_NOT_REACHED(); | 1832 ASSERT_NOT_REACHED(); |
1794 return 0; | 1833 return 0; |
1795 } | 1834 } |
1796 | 1835 |
1797 ContentPosition static resolveContentDistributionFallback(ContentDistributionTyp e distribution) | 1836 ContentPosition static resolveContentDistributionFallback(ContentDistributionTyp e distribution) |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1920 | 1959 |
1921 return LayoutPoint(rowAxisOffset, columnAxisOffsetForChild(child)); | 1960 return LayoutPoint(rowAxisOffset, columnAxisOffsetForChild(child)); |
1922 } | 1961 } |
1923 | 1962 |
1924 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa intOffset) | 1963 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa intOffset) |
1925 { | 1964 { |
1926 GridPainter(*this).paintChildren(paintInfo, paintOffset); | 1965 GridPainter(*this).paintChildren(paintInfo, paintOffset); |
1927 } | 1966 } |
1928 | 1967 |
1929 } // namespace blink | 1968 } // namespace blink |
OLD | NEW |