Chromium Code Reviews| 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 |