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

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: Rebased patch for landing 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 552 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutGrid.h ('k') | third_party/WebKit/Source/core/style/ComputedStyle.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698