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

Unified Diff: third_party/WebKit/Source/core/layout/LayoutGrid.cpp

Issue 1451883002: [css-grid] Store lines instead of tracks in GridResolvedPosition (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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)

Powered by Google App Engine
This is Rietveld 408576698