Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
| diff --git a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
| index 948e0979690fbfb46c15e127e52b07b46b72190d..945be2acc763292ab46d36869d7de60417ad9846 100644 |
| --- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
| +++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
| @@ -209,7 +209,7 @@ public: |
| const size_t endOfVaryingTrackIndex = (m_direction == ForColumns) ? m_grid.size() : m_grid[0].size(); |
| for (; varyingTrackIndex < endOfVaryingTrackIndex; ++varyingTrackIndex) { |
| if (checkEmptyCells(rowSpan, columnSpan)) { |
| - OwnPtr<GridCoordinate> result = adoptPtr(new GridCoordinate(GridSpan(m_rowIndex, m_rowIndex + rowSpan - 1), GridSpan(m_columnIndex, m_columnIndex + columnSpan - 1))); |
| + OwnPtr<GridCoordinate> result = adoptPtr(new GridCoordinate(GridSpan(m_rowIndex, m_rowIndex + rowSpan), GridSpan(m_columnIndex, m_columnIndex + columnSpan))); |
| // Advance the iterator to avoid an infinite loop where we would return the same grid area over and over. |
| ++varyingTrackIndex; |
| return result.release(); |
| @@ -539,7 +539,7 @@ void LayoutGrid::computeUsedBreadthOfGridTracks(GridTrackSizingDirection directi |
| // 4. Grow all Grid tracks having a fraction as the MaxTrackSizingFunction. |
| double flexFraction = 0; |
| if (hasDefiniteFreeSpace) { |
| - flexFraction = findFlexFactorUnitSize(tracks, GridSpan(0, tracks.size() - 1), direction, initialFreeSpace); |
| + flexFraction = findFlexFactorUnitSize(tracks, GridSpan(0, tracks.size()), direction, initialFreeSpace); |
| } else { |
| for (const auto& trackIndex : flexibleSizedTracksIndex) |
| flexFraction = std::max(flexFraction, normalizedFlexFraction(tracks[trackIndex], gridTrackSize(direction, trackIndex).maxTrackBreadth().flex())); |
| @@ -790,7 +790,7 @@ bool LayoutGrid::spanningItemCrossesFlexibleSizedTracks(const GridSpan& span, Gr |
| const GridResolvedPosition initialTrackPosition = span.resolvedInitialPosition; |
| const GridResolvedPosition finalTrackPosition = span.resolvedFinalPosition; |
| - for (GridResolvedPosition trackPosition = initialTrackPosition; trackPosition <= finalTrackPosition; ++trackPosition) { |
| + for (GridResolvedPosition trackPosition = initialTrackPosition; trackPosition < finalTrackPosition; ++trackPosition) { |
|
svillar
2015/11/17 11:37:05
Hmm I think GridSpan already has iterator support,
Manuel Rego
2015/11/17 14:30:49
Yes, this is unrelated to the change but we can do
|
| const GridTrackSize& trackSize = gridTrackSize(direction, trackPosition.toInt()); |
| if (trackSize.minTrackBreadth().isFlex() || trackSize.maxTrackBreadth().isFlex()) |
| return true; |
| @@ -1094,18 +1094,18 @@ bool LayoutGrid::tracksAreWiderThanMinTrackBreadth(GridTrackSizingDirection dire |
| } |
| #endif |
| -void LayoutGrid::ensureGridSize(size_t maximumRowIndex, size_t maximumColumnIndex) |
| +void LayoutGrid::ensureGridSize(size_t maximumRowSize, size_t maximumColumnSize) |
| { |
| const size_t oldRowSize = gridRowCount(); |
| - if (maximumRowIndex >= oldRowSize) { |
| - m_grid.grow(maximumRowIndex + 1); |
| + if (maximumRowSize > oldRowSize) { |
| + m_grid.grow(maximumRowSize); |
| for (size_t row = oldRowSize; row < gridRowCount(); ++row) |
| m_grid[row].grow(gridColumnCount()); |
| } |
| - if (maximumColumnIndex >= gridColumnCount()) { |
| + if (maximumColumnSize > gridColumnCount()) { |
| for (size_t row = 0; row < gridRowCount(); ++row) |
| - m_grid[row].grow(maximumColumnIndex + 1); |
| + m_grid[row].grow(maximumColumnSize); |
| } |
| } |
| @@ -1184,19 +1184,19 @@ void LayoutGrid::populateExplicitGridAndOrderIterator() |
| // |positions| is 0 if we need to run the auto-placement algorithm. |
| if (rowPositions) { |
| - maximumRowIndex = std::max<size_t>(maximumRowIndex, rowPositions->resolvedFinalPosition.next().toInt()); |
| + maximumRowIndex = std::max<size_t>(maximumRowIndex, rowPositions->resolvedFinalPosition.toInt()); |
| } else { |
| // Grow the grid for items with a definite row span, getting the largest such span. |
| GridSpan positions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(*style(), *child, ForRows, GridResolvedPosition(0)); |
| - maximumRowIndex = std::max<size_t>(maximumRowIndex, positions.resolvedFinalPosition.next().toInt()); |
| + maximumRowIndex = std::max<size_t>(maximumRowIndex, positions.resolvedFinalPosition.toInt()); |
| } |
| if (columnPositions) { |
| - maximumColumnIndex = std::max<size_t>(maximumColumnIndex, columnPositions->resolvedFinalPosition.next().toInt()); |
| + maximumColumnIndex = std::max<size_t>(maximumColumnIndex, columnPositions->resolvedFinalPosition.toInt()); |
| } else { |
| // Grow the grid for items with a definite column span, getting the largest such span. |
| GridSpan positions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(*style(), *child, ForColumns, GridResolvedPosition(0)); |
| - maximumColumnIndex = std::max<size_t>(maximumColumnIndex, positions.resolvedFinalPosition.next().toInt()); |
| + maximumColumnIndex = std::max<size_t>(maximumColumnIndex, positions.resolvedFinalPosition.toInt()); |
| } |
| } |
| @@ -1289,7 +1289,7 @@ void LayoutGrid::placeAutoMajorAxisItemOnGrid(LayoutBox& gridItem, std::pair<siz |
| // Check that it fits in the minor axis direction, as we shouldn't grow in that direction here (it was already managed in populateExplicitGridAndOrderIterator()). |
| GridResolvedPosition minorAxisFinalPositionIndex = autoPlacementMinorAxisDirection() == ForColumns ? emptyGridArea->columns.resolvedFinalPosition : emptyGridArea->rows.resolvedFinalPosition; |
| const size_t endOfMinorAxis = autoPlacementMinorAxisDirection() == ForColumns ? gridColumnCount() : gridRowCount(); |
| - if (minorAxisFinalPositionIndex.toInt() < endOfMinorAxis) |
| + if (minorAxisFinalPositionIndex.toInt() <= endOfMinorAxis) |
| break; |
| // Discard empty grid area as it does not fit in the minor axis direction. |
| @@ -1484,12 +1484,12 @@ void LayoutGrid::offsetAndBreadthForPositionedChild(const LayoutBox& child, Grid |
| || (positions->resolvedInitialPosition.toInt() > lastTrackIndex); |
| bool endIsAuto = endPosition.isAuto() |
| || (endPosition.isNamedGridArea() && !GridResolvedPosition::isValidNamedLineOrArea(endPosition.namedGridLine(), styleRef(), GridResolvedPosition::finalPositionSide(direction))) |
| - || (positions->resolvedFinalPosition.toInt() > lastTrackIndex); |
| + || (positions->resolvedFinalPosition.prev().toInt() > lastTrackIndex); |
|
svillar
2015/11/17 11:37:05
could we write this as
resolvedFinalPosition.toIn
Manuel Rego
2015/11/17 14:30:49
I don't think so, otherwise this will be TRUE in m
|
| GridResolvedPosition firstPosition = GridResolvedPosition(0); |
| GridResolvedPosition initialPosition = startIsAuto ? firstPosition : positions->resolvedInitialPosition; |
| GridResolvedPosition lastPosition = GridResolvedPosition(lastTrackIndex); |
| - GridResolvedPosition finalPosition = endIsAuto ? lastPosition : positions->resolvedFinalPosition; |
| + GridResolvedPosition finalPosition = endIsAuto ? lastPosition : positions->resolvedFinalPosition.prev(); |
| // Positioned children do not grow the grid, so we need to clamp the positions to avoid ending up outside of it. |
| initialPosition = std::min<GridResolvedPosition>(initialPosition, lastPosition); |
| @@ -1554,9 +1554,9 @@ LayoutUnit LayoutGrid::gridAreaBreadthForChildIncludingAlignmentOffsets(const La |
| const GridSpan& span = cachedGridSpan(child, direction); |
| const Vector<LayoutUnit>& linePositions = (direction == ForColumns) ? m_columnPositions : m_rowPositions; |
| LayoutUnit initialTrackPosition = linePositions[span.resolvedInitialPosition.toInt()]; |
| - LayoutUnit finalTrackPosition = linePositions[span.resolvedFinalPosition.toInt()]; |
| + LayoutUnit finalTrackPosition = linePositions[span.resolvedFinalPosition.prev().toInt()]; |
| // Track Positions vector stores the 'start' grid line of each track, so w have to add last track's baseSize. |
| - return finalTrackPosition - initialTrackPosition + tracks[span.resolvedFinalPosition.toInt()].baseSize(); |
| + return finalTrackPosition - initialTrackPosition + tracks[span.resolvedFinalPosition.prev().toInt()].baseSize(); |
| } |
| void LayoutGrid::populateGridPositions(GridSizingData& sizingData) |
| @@ -1874,7 +1874,7 @@ LayoutUnit LayoutGrid::columnAxisOffsetForChild(const LayoutBox& child) const |
| return startPosition; |
| case GridAxisEnd: |
| case GridAxisCenter: { |
| - size_t childEndLine = rowsSpan.resolvedFinalPosition.next().toInt(); |
| + size_t childEndLine = rowsSpan.resolvedFinalPosition.toInt(); |
| LayoutUnit endOfRow = m_rowPositions[childEndLine]; |
| // m_rowPositions include gutters so we need to substract them to get the actual end position for a given |
| // row (this does not have to be done for the last track as there are no more m_rowPositions after it) |
| @@ -1906,7 +1906,7 @@ LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child) const |
| return startPosition; |
| case GridAxisEnd: |
| case GridAxisCenter: { |
| - size_t childEndLine = columnsSpan.resolvedFinalPosition.next().toInt(); |
| + size_t childEndLine = columnsSpan.resolvedFinalPosition.toInt(); |
| LayoutUnit endOfColumn = m_columnPositions[childEndLine]; |
| // m_columnPositions include gutters so we need to substract them to get the actual end position for a given |
| // column (this does not have to be done for the last track as there are no more m_columnPositions after it) |