Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutGrid.cpp

Issue 1309513008: [css-grid] Implement grid gutters (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Patch for landing v3 Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
1285 track->setBaseSize(baseSize); 1302 track->setBaseSize(baseSize);
1286 } 1303 }
1287 } 1304 }
1288 1305
1289 void LayoutGrid::layoutGridItems() 1306 void LayoutGrid::layoutGridItems()
1290 { 1307 {
1291 placeItemsOnGrid(); 1308 placeItemsOnGrid();
1292 1309
1293 LayoutUnit availableSpaceForColumns = availableLogicalWidth(); 1310 LayoutUnit availableSpaceForColumns = availableLogicalWidth();
1294 LayoutUnit availableSpaceForRows = availableLogicalHeight(IncludeMarginBorde rPadding); 1311 LayoutUnit availableSpaceForRows = availableLogicalHeight(IncludeMarginBorde rPadding);
1312
1313 // Remove space consumed by gutters from the available logical space.
1314 availableSpaceForColumns -= guttersSize(ForColumns, gridColumnCount());
1315 availableSpaceForRows -= guttersSize(ForRows, gridRowCount());
1316
1295 GridSizingData sizingData(gridColumnCount(), gridRowCount()); 1317 GridSizingData sizingData(gridColumnCount(), gridRowCount());
1296 computeUsedBreadthOfGridTracks(ForColumns, sizingData, availableSpaceForColu mns); 1318 computeUsedBreadthOfGridTracks(ForColumns, sizingData, availableSpaceForColu mns);
1297 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData.columnTracks )); 1319 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData.columnTracks ));
1298 computeUsedBreadthOfGridTracks(ForRows, sizingData, availableSpaceForRows); 1320 computeUsedBreadthOfGridTracks(ForRows, sizingData, availableSpaceForRows);
1299 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData.rowTracks)); 1321 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData.rowTracks));
1300 1322
1301 applyStretchAlignmentToTracksIfNeeded(ForColumns, sizingData, availableSpace ForColumns); 1323 applyStretchAlignmentToTracksIfNeeded(ForColumns, sizingData, availableSpace ForColumns);
1302 applyStretchAlignmentToTracksIfNeeded(ForRows, sizingData, availableSpaceFor Rows); 1324 applyStretchAlignmentToTracksIfNeeded(ForRows, sizingData, availableSpaceFor Rows);
1303 1325
1304 populateGridPositions(sizingData, availableSpaceForColumns, availableSpaceFo rRows); 1326 populateGridPositions(sizingData, availableSpaceForColumns, availableSpaceFo rRows);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1343 #endif 1365 #endif
1344 child->setLogicalLocation(findChildLogicalPosition(*child, sizingData)); 1366 child->setLogicalLocation(findChildLogicalPosition(*child, sizingData));
1345 1367
1346 // Keep track of children overflowing their grid area as we might need t o paint them even if the grid-area is 1368 // Keep track of children overflowing their grid area as we might need t o paint them even if the grid-area is
1347 // not visible 1369 // not visible
1348 if (child->logicalHeight() > overrideContainingBlockContentLogicalHeight 1370 if (child->logicalHeight() > overrideContainingBlockContentLogicalHeight
1349 || child->logicalWidth() > overrideContainingBlockContentLogicalWidt h) 1371 || child->logicalWidth() > overrideContainingBlockContentLogicalWidt h)
1350 m_gridItemsOverflowingGridArea.append(child); 1372 m_gridItemsOverflowingGridArea.append(child);
1351 } 1373 }
1352 1374
1375 LayoutUnit height = borderAndPaddingLogicalHeight() + scrollbarLogicalHeight ();
1353 for (const auto& row : sizingData.rowTracks) 1376 for (const auto& row : sizingData.rowTracks)
1354 setLogicalHeight(logicalHeight() + row.baseSize()); 1377 height += row.baseSize();
1355 1378
1356 LayoutUnit height = logicalHeight() + borderAndPaddingLogicalHeight() + scro llbarLogicalHeight(); 1379 height += guttersSize(ForRows, sizingData.rowTracks.size());
1380
1357 if (hasLineIfEmpty()) 1381 if (hasLineIfEmpty())
1358 height = std::max(height, minimumLogicalHeightForEmptyLine()); 1382 height = std::max(height, minimumLogicalHeightForEmptyLine());
1359 1383
1360 // Min / max logical height is handled by the call to updateLogicalHeight in layoutBlock. 1384 // Min / max logical height is handled by the call to updateLogicalHeight in layoutBlock.
1361 setLogicalHeight(height); 1385 setLogicalHeight(height);
1362 } 1386 }
1363 1387
1364 void LayoutGrid::prepareChildForPositionedLayout(LayoutBox& child) 1388 void LayoutGrid::prepareChildForPositionedLayout(LayoutBox& child)
1365 { 1389 {
1366 ASSERT(child.isOutOfFlowPositioned()); 1390 ASSERT(child.isOutOfFlowPositioned());
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1459 return m_gridItemCoordinate.get(&gridItem); 1483 return m_gridItemCoordinate.get(&gridItem);
1460 } 1484 }
1461 1485
1462 LayoutUnit LayoutGrid::gridAreaBreadthForChild(const LayoutBox& child, GridTrack SizingDirection direction, const Vector<GridTrack>& tracks) const 1486 LayoutUnit LayoutGrid::gridAreaBreadthForChild(const LayoutBox& child, GridTrack SizingDirection direction, const Vector<GridTrack>& tracks) const
1463 { 1487 {
1464 const GridCoordinate& coordinate = cachedGridCoordinate(child); 1488 const GridCoordinate& coordinate = cachedGridCoordinate(child);
1465 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor dinate.rows; 1489 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor dinate.rows;
1466 LayoutUnit gridAreaBreadth = 0; 1490 LayoutUnit gridAreaBreadth = 0;
1467 for (GridSpan::iterator trackPosition = span.begin(); trackPosition != span. end(); ++trackPosition) 1491 for (GridSpan::iterator trackPosition = span.begin(); trackPosition != span. end(); ++trackPosition)
1468 gridAreaBreadth += tracks[trackPosition.toInt()].baseSize(); 1492 gridAreaBreadth += tracks[trackPosition.toInt()].baseSize();
1493
1494 gridAreaBreadth += guttersSize(direction, span.integerSpan());
1495
1469 return gridAreaBreadth; 1496 return gridAreaBreadth;
1470 } 1497 }
1471 1498
1472 LayoutUnit LayoutGrid::gridAreaBreadthForChildIncludingAlignmentOffsets(const La youtBox& child, GridTrackSizingDirection direction, const GridSizingData& sizing Data) const 1499 LayoutUnit LayoutGrid::gridAreaBreadthForChildIncludingAlignmentOffsets(const La youtBox& child, GridTrackSizingDirection direction, const GridSizingData& sizing Data) const
1473 { 1500 {
1474 // We need the cached value when available because Content Distribution alig nment properties 1501 // We need the cached value when available because Content Distribution alig nment properties
1475 // may have some influence in the final grid area breadth. 1502 // may have some influence in the final grid area breadth.
1476 const Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.col umnTracks : sizingData.rowTracks; 1503 const Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.col umnTracks : sizingData.rowTracks;
1477 const GridCoordinate& coordinate = cachedGridCoordinate(child); 1504 const GridCoordinate& coordinate = cachedGridCoordinate(child);
1478 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor dinate.rows; 1505 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor dinate.rows;
1479 const Vector<LayoutUnit>& linePositions = (direction == ForColumns) ? m_colu mnPositions : m_rowPositions; 1506 const Vector<LayoutUnit>& linePositions = (direction == ForColumns) ? m_colu mnPositions : m_rowPositions;
1480 LayoutUnit initialTrackPosition = linePositions[span.resolvedInitialPosition .toInt()]; 1507 LayoutUnit initialTrackPosition = linePositions[span.resolvedInitialPosition .toInt()];
1481 LayoutUnit finalTrackPosition = linePositions[span.resolvedFinalPosition.toI nt()]; 1508 LayoutUnit finalTrackPosition = linePositions[span.resolvedFinalPosition.toI nt()];
1482 // Track Positions vector stores the 'start' grid line of each track, so w h ave to add last track's baseSize. 1509 // Track Positions vector stores the 'start' grid line of each track, so w h ave to add last track's baseSize.
1483 return finalTrackPosition - initialTrackPosition + tracks[span.resolvedFinal Position.toInt()].baseSize(); 1510 return finalTrackPosition - initialTrackPosition + tracks[span.resolvedFinal Position.toInt()].baseSize();
1484 } 1511 }
1485 1512
1486 void LayoutGrid::populateGridPositions(GridSizingData& sizingData, LayoutUnit av ailableSpaceForColumns, LayoutUnit availableSpaceForRows) 1513 void LayoutGrid::populateGridPositions(GridSizingData& sizingData, LayoutUnit av ailableSpaceForColumns, LayoutUnit availableSpaceForRows)
1487 { 1514 {
1488 // Since we add alignment offsets, grid lines are not always adjacent. Hence we will have to 1515 // Since we add alignment offsets and track gutters, grid lines are not alwa ys adjacent. Hence we will have to
1489 // assume from now on that we just store positions of the initial grid lines of each track, 1516 // assume from now on that we just store positions of the initial grid lines of each track,
1490 // except the last one, which is the only one considered as a final grid lin e of a track. 1517 // except the last one, which is the only one considered as a final grid lin e of a track.
1491 // FIXME: This will affect the computed style value of grid tracks size, sin ce we are 1518 // FIXME: This will affect the computed style value of grid tracks size, sin ce we are
1492 // using these positions to compute them. 1519 // using these positions to compute them.
1493 1520
1494 unsigned numberOfTracks = sizingData.columnTracks.size(); 1521 unsigned numberOfTracks = sizingData.columnTracks.size();
1495 unsigned numberOfLines = numberOfTracks + 1; 1522 unsigned numberOfLines = numberOfTracks + 1;
1496 unsigned lastLine = numberOfLines - 1; 1523 unsigned lastLine = numberOfLines - 1;
1497 unsigned nextToLastLine = numberOfLines - 2; 1524 unsigned nextToLastLine = numberOfLines - 2;
1498 ContentAlignmentData offset = computeContentPositionAndDistributionOffset(Fo rColumns, availableSpaceForColumns, numberOfTracks); 1525 ContentAlignmentData offset = computeContentPositionAndDistributionOffset(Fo rColumns, availableSpaceForColumns, numberOfTracks);
1526 LayoutUnit trackGap = guttersSize(ForColumns, 2);
1499 m_columnPositions.resize(numberOfLines); 1527 m_columnPositions.resize(numberOfLines);
1500 m_columnPositions[0] = borderAndPaddingStart() + offset.positionOffset; 1528 m_columnPositions[0] = borderAndPaddingStart() + offset.positionOffset;
1501 for (unsigned i = 0; i < lastLine; ++i) 1529 for (unsigned i = 0; i < lastLine; ++i)
1502 m_columnPositions[i + 1] = m_columnPositions[i] + offset.distributionOff set + sizingData.columnTracks[i].baseSize(); 1530 m_columnPositions[i + 1] = m_columnPositions[i] + offset.distributionOff set + sizingData.columnTracks[i].baseSize() + trackGap;
1503 m_columnPositions[lastLine] = m_columnPositions[nextToLastLine] + sizingData .columnTracks[nextToLastLine].baseSize(); 1531 m_columnPositions[lastLine] = m_columnPositions[nextToLastLine] + sizingData .columnTracks[nextToLastLine].baseSize();
1504 1532
1505 numberOfTracks = sizingData.rowTracks.size(); 1533 numberOfTracks = sizingData.rowTracks.size();
1506 numberOfLines = numberOfTracks + 1; 1534 numberOfLines = numberOfTracks + 1;
1507 lastLine = numberOfLines - 1; 1535 lastLine = numberOfLines - 1;
1508 nextToLastLine = numberOfLines - 2; 1536 nextToLastLine = numberOfLines - 2;
1509 offset = computeContentPositionAndDistributionOffset(ForRows, availableSpace ForRows, numberOfTracks); 1537 offset = computeContentPositionAndDistributionOffset(ForRows, availableSpace ForRows, numberOfTracks);
1538 trackGap = guttersSize(ForRows, 2);
1510 m_rowPositions.resize(numberOfLines); 1539 m_rowPositions.resize(numberOfLines);
1511 m_rowPositions[0] = borderAndPaddingBefore() + offset.positionOffset; 1540 m_rowPositions[0] = borderAndPaddingBefore() + offset.positionOffset;
1512 for (unsigned i = 0; i < lastLine; ++i) 1541 for (unsigned i = 0; i < lastLine; ++i)
1513 m_rowPositions[i + 1] = m_rowPositions[i] + offset.distributionOffset + sizingData.rowTracks[i].baseSize(); 1542 m_rowPositions[i + 1] = m_rowPositions[i] + offset.distributionOffset + sizingData.rowTracks[i].baseSize() + trackGap;
1514 m_rowPositions[lastLine] = m_rowPositions[nextToLastLine] + sizingData.rowTr acks[nextToLastLine].baseSize(); 1543 m_rowPositions[lastLine] = m_rowPositions[nextToLastLine] + sizingData.rowTr acks[nextToLastLine].baseSize();
1515 } 1544 }
1516 1545
1517 static LayoutUnit computeOverflowAlignmentOffset(OverflowAlignment overflow, Lay outUnit trackBreadth, LayoutUnit childBreadth) 1546 static LayoutUnit computeOverflowAlignmentOffset(OverflowAlignment overflow, Lay outUnit trackBreadth, LayoutUnit childBreadth)
1518 { 1547 {
1519 LayoutUnit offset = trackBreadth - childBreadth; 1548 LayoutUnit offset = trackBreadth - childBreadth;
1520 switch (overflow) { 1549 switch (overflow) {
1521 case OverflowAlignmentSafe: 1550 case OverflowAlignmentSafe:
1522 // If overflow is 'safe', we have to make sure we don't overflow the 'st art' 1551 // If overflow is 'safe', we have to make sure we don't overflow the 'st art'
1523 // edge (potentially cause some data loss as the overflow is unreachable ). 1552 // edge (potentially cause some data loss as the overflow is unreachable ).
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
1799 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi on.toInt()]; 1828 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi on.toInt()];
1800 LayoutUnit startPosition = startOfRow + marginBeforeForChild(child); 1829 LayoutUnit startPosition = startOfRow + marginBeforeForChild(child);
1801 if (hasAutoMarginsInColumnAxis(child)) 1830 if (hasAutoMarginsInColumnAxis(child))
1802 return startPosition; 1831 return startPosition;
1803 GridAxisPosition axisPosition = columnAxisPositionForChild(child); 1832 GridAxisPosition axisPosition = columnAxisPositionForChild(child);
1804 switch (axisPosition) { 1833 switch (axisPosition) {
1805 case GridAxisStart: 1834 case GridAxisStart:
1806 return startPosition; 1835 return startPosition;
1807 case GridAxisEnd: 1836 case GridAxisEnd:
1808 case GridAxisCenter: { 1837 case GridAxisCenter: {
1809 LayoutUnit endOfRow = m_rowPositions[coordinate.rows.resolvedFinalPositi on.next().toInt()]; 1838 size_t childEndLine = coordinate.rows.resolvedFinalPosition.next().toInt ();
1839 LayoutUnit endOfRow = m_rowPositions[childEndLine];
1840 // m_rowPositions include gutters so we need to substract them to get th e actual end position for a given
1841 // row (this does not have to be done for the last track as there are no more m_rowPositions after it)
1842 if (childEndLine < m_rowPositions.size() - 1)
1843 endOfRow -= guttersSize(ForRows, 2);
1810 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(chil d.styleRef().alignSelfOverflowAlignment(), endOfRow - startOfRow, child.logicalH eight() + child.marginLogicalHeight()); 1844 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(chil d.styleRef().alignSelfOverflowAlignment(), endOfRow - startOfRow, child.logicalH eight() + child.marginLogicalHeight());
1811 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos ition : offsetFromStartPosition / 2); 1845 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos ition : offsetFromStartPosition / 2);
1812 } 1846 }
1813 } 1847 }
1814 1848
1815 ASSERT_NOT_REACHED(); 1849 ASSERT_NOT_REACHED();
1816 return 0; 1850 return 0;
1817 } 1851 }
1818 1852
1819 LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child) const 1853 LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child) const
1820 { 1854 {
1821 const GridCoordinate& coordinate = cachedGridCoordinate(child); 1855 const GridCoordinate& coordinate = cachedGridCoordinate(child);
1822 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit ialPosition.toInt()]; 1856 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit ialPosition.toInt()];
1823 LayoutUnit startPosition = startOfColumn + marginStartForChild(child); 1857 LayoutUnit startPosition = startOfColumn + marginStartForChild(child);
1824 if (hasAutoMarginsInRowAxis(child)) 1858 if (hasAutoMarginsInRowAxis(child))
1825 return startPosition; 1859 return startPosition;
1826 GridAxisPosition axisPosition = rowAxisPositionForChild(child); 1860 GridAxisPosition axisPosition = rowAxisPositionForChild(child);
1827 switch (axisPosition) { 1861 switch (axisPosition) {
1828 case GridAxisStart: 1862 case GridAxisStart:
1829 return startPosition; 1863 return startPosition;
1830 case GridAxisEnd: 1864 case GridAxisEnd:
1831 case GridAxisCenter: { 1865 case GridAxisCenter: {
1832 LayoutUnit endOfColumn = m_columnPositions[coordinate.columns.resolvedFi nalPosition.next().toInt()]; 1866 size_t childEndLine = coordinate.columns.resolvedFinalPosition.next().to Int();
1867 LayoutUnit endOfColumn = m_columnPositions[childEndLine];
1868 // m_columnPositions include gutters so we need to substract them to get the actual end position for a given
1869 // column (this does not have to be done for the last track as there are no more m_columnPositions after it)
1870 if (childEndLine < m_columnPositions.size() - 1)
1871 endOfColumn -= guttersSize(ForRows, 2);
1833 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(chil d.styleRef().justifySelfOverflowAlignment(), endOfColumn - startOfColumn, child. logicalWidth() + child.marginLogicalWidth()); 1872 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(chil d.styleRef().justifySelfOverflowAlignment(), endOfColumn - startOfColumn, child. logicalWidth() + child.marginLogicalWidth());
1834 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos ition : offsetFromStartPosition / 2); 1873 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos ition : offsetFromStartPosition / 2);
1835 } 1874 }
1836 } 1875 }
1837 1876
1838 ASSERT_NOT_REACHED(); 1877 ASSERT_NOT_REACHED();
1839 return 0; 1878 return 0;
1840 } 1879 }
1841 1880
1842 ContentPosition static resolveContentDistributionFallback(ContentDistributionTyp e distribution) 1881 ContentPosition static resolveContentDistributionFallback(ContentDistributionTyp e distribution)
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1965 2004
1966 return LayoutPoint(rowAxisOffset, columnAxisOffsetForChild(child)); 2005 return LayoutPoint(rowAxisOffset, columnAxisOffsetForChild(child));
1967 } 2006 }
1968 2007
1969 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa intOffset) const 2008 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa intOffset) const
1970 { 2009 {
1971 GridPainter(*this).paintChildren(paintInfo, paintOffset); 2010 GridPainter(*this).paintChildren(paintInfo, paintOffset);
1972 } 2011 }
1973 2012
1974 } // namespace blink 2013 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698