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 5a654f7d154e8c0c7485edef1363b2fd1cf8ef16..92235ddd3cb8a11918615bac50957d897fb02420 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
@@ -547,7 +547,7 @@ void LayoutGrid::computeUsedBreadthOfGridTracks(GridTrackSizingDirection directi |
const GridSpan span = cachedGridSpan(*gridItem, direction); |
// Do not include already processed items. |
- if (i > 0 && span.resolvedInitialPosition().toInt() <= flexibleSizedTracksIndex[i - 1]) |
+ if (i > 0 && span.resolvedInitialPosition() <= flexibleSizedTracksIndex[i - 1]) |
continue; |
flexFraction = std::max(flexFraction, findFlexFactorUnitSize(tracks, span, direction, maxContentForChild(*gridItem, direction, sizingData.columnTracks))); |
@@ -631,8 +631,7 @@ double LayoutGrid::findFlexFactorUnitSize(const Vector<GridTrack>& tracks, const |
double flexFactorSum = 0; |
Vector<size_t, 8> flexibleTracksIndexes; |
- for (const auto& resolvedPosition : tracksSpan) { |
- size_t trackIndex = resolvedPosition.toInt(); |
+ for (const auto& trackIndex : tracksSpan) { |
GridTrackSize trackSize = gridTrackSize(direction, trackIndex); |
if (!trackSize.maxTrackBreadth().isFlex()) { |
leftOverSpace -= tracks[trackIndex].baseSize(); |
@@ -785,7 +784,7 @@ private: |
bool LayoutGrid::spanningItemCrossesFlexibleSizedTracks(const GridSpan& span, GridTrackSizingDirection direction) const |
{ |
for (const auto& trackPosition : span) { |
- const GridTrackSize& trackSize = gridTrackSize(direction, trackPosition.toInt()); |
+ const GridTrackSize& trackSize = gridTrackSize(direction, trackPosition); |
if (trackSize.minTrackBreadth().isFlex() || trackSize.maxTrackBreadth().isFlex()) |
return true; |
} |
@@ -834,8 +833,8 @@ void LayoutGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio |
void LayoutGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems(GridTrackSizingDirection direction, const GridSpan& span, LayoutBox& gridItem, GridTrack& track, Vector<GridTrack>& columnTracks) |
{ |
- const GridResolvedPosition trackPosition = span.resolvedInitialPosition(); |
- GridTrackSize trackSize = gridTrackSize(direction, trackPosition.toInt()); |
+ const size_t trackPosition = span.resolvedInitialPosition(); |
+ GridTrackSize trackSize = gridTrackSize(direction, trackPosition); |
if (trackSize.hasMinContentMinTrackBreadth()) |
track.setBaseSize(std::max(track.baseSize(), minContentForChild(gridItem, direction, columnTracks))); |
@@ -993,8 +992,8 @@ void LayoutGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizing |
sizingData.filteredTracks.shrink(0); |
LayoutUnit spanningTracksSize; |
for (const auto& trackPosition : itemSpan) { |
- GridTrackSize trackSize = gridTrackSize(direction, trackPosition.toInt()); |
- GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[trackPosition.toInt()] : sizingData.rowTracks[trackPosition.toInt()]; |
+ GridTrackSize trackSize = gridTrackSize(direction, trackPosition); |
+ GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[trackPosition] : sizingData.rowTracks[trackPosition]; |
spanningTracksSize += trackSizeForTrackSizeComputationPhase(phase, track, ForbidInfinity); |
if (!shouldProcessTrackForTrackSizeComputationPhase(phase, trackSize)) |
continue; |
@@ -1106,11 +1105,11 @@ void LayoutGrid::ensureGridSize(size_t maximumRowSize, size_t maximumColumnSize) |
void LayoutGrid::insertItemIntoGrid(LayoutBox& child, const GridCoordinate& coordinate) |
{ |
RELEASE_ASSERT(coordinate.rows.isDefinite() && coordinate.columns.isDefinite()); |
- ensureGridSize(coordinate.rows.resolvedFinalPosition().toInt(), coordinate.columns.resolvedFinalPosition().toInt()); |
+ ensureGridSize(coordinate.rows.resolvedFinalPosition(), coordinate.columns.resolvedFinalPosition()); |
- for (GridSpan::iterator row = coordinate.rows.begin(); row != coordinate.rows.end(); ++row) { |
- for (GridSpan::iterator column = coordinate.columns.begin(); column != coordinate.columns.end(); ++column) |
- m_grid[row.toInt()][column.toInt()].append(&child); |
+ for (const auto& row : coordinate.rows) { |
+ for (const auto& column: coordinate.columns) |
+ m_grid[row][column].append(&child); |
} |
} |
@@ -1186,19 +1185,19 @@ void LayoutGrid::populateExplicitGridAndOrderIterator() |
// |positions| is 0 if we need to run the auto-placement algorithm. |
if (rowPositions.isDefinite()) { |
- maximumRowIndex = std::max<size_t>(maximumRowIndex, rowPositions.resolvedFinalPosition().toInt()); |
+ maximumRowIndex = std::max<size_t>(maximumRowIndex, rowPositions.resolvedFinalPosition()); |
} 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().toInt()); |
+ GridSpan positions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(*style(), *child, ForRows, 0); |
+ maximumRowIndex = std::max<size_t>(maximumRowIndex, positions.resolvedFinalPosition()); |
} |
if (columnPositions.isDefinite()) { |
- maximumColumnIndex = std::max<size_t>(maximumColumnIndex, columnPositions.resolvedFinalPosition().toInt()); |
+ maximumColumnIndex = std::max<size_t>(maximumColumnIndex, columnPositions.resolvedFinalPosition()); |
} 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().toInt()); |
+ GridSpan positions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(*style(), *child, ForColumns, 0); |
+ maximumColumnIndex = std::max<size_t>(maximumColumnIndex, positions.resolvedFinalPosition()); |
} |
} |
@@ -1211,7 +1210,7 @@ PassOwnPtr<GridCoordinate> LayoutGrid::createEmptyGridAreaAtSpecifiedPositionsOu |
{ |
GridTrackSizingDirection crossDirection = specifiedDirection == ForColumns ? ForRows : ForColumns; |
const size_t endOfCrossDirection = crossDirection == ForColumns ? gridColumnCount() : gridRowCount(); |
- GridSpan crossDirectionPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(*style(), gridItem, crossDirection, GridResolvedPosition(endOfCrossDirection)); |
+ GridSpan crossDirectionPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(*style(), gridItem, crossDirection, endOfCrossDirection); |
return adoptPtr(new GridCoordinate(specifiedDirection == ForColumns ? crossDirectionPositions : specifiedPositions, specifiedDirection == ForColumns ? specifiedPositions : crossDirectionPositions)); |
} |
@@ -1229,10 +1228,10 @@ void LayoutGrid::placeSpecifiedMajorAxisItemsOnGrid(const Vector<LayoutBox*>& au |
GridSpan majorAxisPositions = cachedGridSpan(*autoGridItem, autoPlacementMajorAxisDirection()); |
ASSERT(majorAxisPositions.isDefinite()); |
ASSERT(!cachedGridSpan(*autoGridItem, autoPlacementMinorAxisDirection()).isDefinite()); |
- GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(*style(), *autoGridItem, autoPlacementMinorAxisDirection(), GridResolvedPosition(0)); |
- unsigned majorAxisInitialPosition = majorAxisPositions.resolvedInitialPosition().toInt(); |
+ GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(*style(), *autoGridItem, autoPlacementMinorAxisDirection(), 0); |
+ unsigned majorAxisInitialPosition = majorAxisPositions.resolvedInitialPosition(); |
- GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), majorAxisPositions.resolvedInitialPosition().toInt(), isGridAutoFlowDense ? 0 : minorAxisCursors.get(majorAxisInitialPosition)); |
+ GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), majorAxisPositions.resolvedInitialPosition(), isGridAutoFlowDense ? 0 : minorAxisCursors.get(majorAxisInitialPosition)); |
OwnPtr<GridCoordinate> emptyGridArea = iterator.nextEmptyGridArea(majorAxisPositions.integerSpan(), minorAxisPositions.integerSpan()); |
if (!emptyGridArea) |
emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(*autoGridItem, autoPlacementMajorAxisDirection(), majorAxisPositions); |
@@ -1241,7 +1240,7 @@ void LayoutGrid::placeSpecifiedMajorAxisItemsOnGrid(const Vector<LayoutBox*>& au |
insertItemIntoGrid(*autoGridItem, *emptyGridArea); |
if (!isGridAutoFlowDense) |
- minorAxisCursors.set(majorAxisInitialPosition, isForColumns ? emptyGridArea->rows.resolvedInitialPosition().toInt() : emptyGridArea->columns.resolvedInitialPosition().toInt()); |
+ minorAxisCursors.set(majorAxisInitialPosition, isForColumns ? emptyGridArea->rows.resolvedInitialPosition() : emptyGridArea->columns.resolvedInitialPosition()); |
} |
} |
@@ -1265,7 +1264,7 @@ void LayoutGrid::placeAutoMajorAxisItemOnGrid(LayoutBox& gridItem, std::pair<siz |
{ |
GridSpan minorAxisPositions = cachedGridSpan(gridItem, autoPlacementMinorAxisDirection()); |
ASSERT(!cachedGridSpan(gridItem, autoPlacementMajorAxisDirection()).isDefinite()); |
- GridSpan majorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(*style(), gridItem, autoPlacementMajorAxisDirection(), GridResolvedPosition(0)); |
+ GridSpan majorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(*style(), gridItem, autoPlacementMajorAxisDirection(), 0); |
const size_t endOfMajorAxis = (autoPlacementMajorAxisDirection() == ForColumns) ? gridColumnCount() : gridRowCount(); |
size_t majorAxisAutoPlacementCursor = autoPlacementMajorAxisDirection() == ForColumns ? autoPlacementCursor.second : autoPlacementCursor.first; |
@@ -1274,18 +1273,18 @@ void LayoutGrid::placeAutoMajorAxisItemOnGrid(LayoutBox& gridItem, std::pair<siz |
OwnPtr<GridCoordinate> emptyGridArea; |
if (minorAxisPositions.isDefinite()) { |
// Move to the next track in major axis if initial position in minor axis is before auto-placement cursor. |
- if (minorAxisPositions.resolvedInitialPosition().toInt() < minorAxisAutoPlacementCursor) |
+ if (minorAxisPositions.resolvedInitialPosition() < minorAxisAutoPlacementCursor) |
majorAxisAutoPlacementCursor++; |
if (majorAxisAutoPlacementCursor < endOfMajorAxis) { |
- GridIterator iterator(m_grid, autoPlacementMinorAxisDirection(), minorAxisPositions.resolvedInitialPosition().toInt(), majorAxisAutoPlacementCursor); |
+ GridIterator iterator(m_grid, autoPlacementMinorAxisDirection(), minorAxisPositions.resolvedInitialPosition(), majorAxisAutoPlacementCursor); |
emptyGridArea = iterator.nextEmptyGridArea(minorAxisPositions.integerSpan(), majorAxisPositions.integerSpan()); |
} |
if (!emptyGridArea) |
emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(gridItem, autoPlacementMinorAxisDirection(), minorAxisPositions); |
} else { |
- GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(*style(), gridItem, autoPlacementMinorAxisDirection(), GridResolvedPosition(0)); |
+ GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(*style(), gridItem, autoPlacementMinorAxisDirection(), 0); |
for (size_t majorAxisIndex = majorAxisAutoPlacementCursor; majorAxisIndex < endOfMajorAxis; ++majorAxisIndex) { |
GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), majorAxisIndex, minorAxisAutoPlacementCursor); |
@@ -1293,9 +1292,9 @@ void LayoutGrid::placeAutoMajorAxisItemOnGrid(LayoutBox& gridItem, std::pair<siz |
if (emptyGridArea) { |
// 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(); |
+ size_t minorAxisFinalPositionIndex = autoPlacementMinorAxisDirection() == ForColumns ? emptyGridArea->columns.resolvedFinalPosition() : emptyGridArea->rows.resolvedFinalPosition(); |
const size_t endOfMinorAxis = autoPlacementMinorAxisDirection() == ForColumns ? gridColumnCount() : gridRowCount(); |
- if (minorAxisFinalPositionIndex.toInt() <= endOfMinorAxis) |
+ if (minorAxisFinalPositionIndex <= endOfMinorAxis) |
break; |
// Discard empty grid area as it does not fit in the minor axis direction. |
@@ -1314,8 +1313,8 @@ void LayoutGrid::placeAutoMajorAxisItemOnGrid(LayoutBox& gridItem, std::pair<siz |
m_gridItemCoordinate.set(&gridItem, *emptyGridArea); |
insertItemIntoGrid(gridItem, *emptyGridArea); |
// Move auto-placement cursor to the new position. |
- autoPlacementCursor.first = emptyGridArea->rows.resolvedInitialPosition().toInt(); |
- autoPlacementCursor.second = emptyGridArea->columns.resolvedInitialPosition().toInt(); |
+ autoPlacementCursor.first = emptyGridArea->rows.resolvedInitialPosition(); |
+ autoPlacementCursor.second = emptyGridArea->columns.resolvedInitialPosition(); |
} |
GridTrackSizingDirection LayoutGrid::autoPlacementMajorAxisDirection() const |
@@ -1418,8 +1417,8 @@ void LayoutGrid::layoutGridItems(GridSizingData& sizingData) |
#if ENABLE(ASSERT) |
const GridCoordinate& coordinate = cachedGridCoordinate(*child); |
- ASSERT(coordinate.columns.resolvedInitialPosition().toInt() < sizingData.columnTracks.size()); |
- ASSERT(coordinate.rows.resolvedInitialPosition().toInt() < sizingData.rowTracks.size()); |
+ ASSERT(coordinate.columns.resolvedInitialPosition() < sizingData.columnTracks.size()); |
+ ASSERT(coordinate.rows.resolvedInitialPosition() < sizingData.rowTracks.size()); |
#endif |
child->setLogicalLocation(findChildLogicalPosition(*child, sizingData)); |
@@ -1488,22 +1487,22 @@ void LayoutGrid::offsetAndBreadthForPositionedChild(const LayoutBox& child, Grid |
bool startIsAuto = startPosition.isAuto() |
|| (startPosition.isNamedGridArea() && !GridResolvedPosition::isValidNamedLineOrArea(startPosition.namedGridLine(), styleRef(), GridResolvedPosition::initialPositionSide(direction))) |
- || (positions.resolvedInitialPosition().toInt() > lastTrackIndex); |
+ || (positions.resolvedInitialPosition() > lastTrackIndex); |
bool endIsAuto = endPosition.isAuto() |
|| (endPosition.isNamedGridArea() && !GridResolvedPosition::isValidNamedLineOrArea(endPosition.namedGridLine(), styleRef(), GridResolvedPosition::finalPositionSide(direction))) |
- || (positions.resolvedFinalPosition().prev().toInt() > lastTrackIndex); |
+ || (positions.resolvedFinalPosition() - 1 > lastTrackIndex); |
- GridResolvedPosition firstPosition = GridResolvedPosition(0); |
- GridResolvedPosition initialPosition = startIsAuto ? firstPosition : positions.resolvedInitialPosition(); |
- GridResolvedPosition lastPosition = GridResolvedPosition(lastTrackIndex); |
- GridResolvedPosition finalPosition = endIsAuto ? lastPosition : positions.resolvedFinalPosition().prev(); |
+ size_t firstPosition = 0; |
+ size_t initialPosition = startIsAuto ? firstPosition : positions.resolvedInitialPosition(); |
+ size_t lastPosition = lastTrackIndex; |
+ size_t finalPosition = endIsAuto ? lastPosition : positions.resolvedFinalPosition() - 1; |
// 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); |
- finalPosition = std::min<GridResolvedPosition>(finalPosition, lastPosition); |
+ initialPosition = std::min(initialPosition, lastPosition); |
+ finalPosition = std::min(finalPosition, lastPosition); |
- LayoutUnit start = startIsAuto ? LayoutUnit() : (direction == ForColumns) ? m_columnPositions[initialPosition.toInt()] : m_rowPositions[initialPosition.toInt()]; |
- LayoutUnit end = endIsAuto ? (direction == ForColumns) ? logicalWidth() : logicalHeight() : (direction == ForColumns) ? m_columnPositions[finalPosition.next().toInt()] : m_rowPositions[finalPosition.next().toInt()]; |
+ LayoutUnit start = startIsAuto ? LayoutUnit() : (direction == ForColumns) ? m_columnPositions[initialPosition] : m_rowPositions[initialPosition]; |
+ LayoutUnit end = endIsAuto ? (direction == ForColumns) ? logicalWidth() : logicalHeight() : (direction == ForColumns) ? m_columnPositions[finalPosition + 1] : m_rowPositions[finalPosition + 1]; |
breadth = end - start; |
@@ -1545,8 +1544,8 @@ LayoutUnit LayoutGrid::gridAreaBreadthForChild(const LayoutBox& child, GridTrack |
{ |
const GridSpan& span = cachedGridSpan(child, direction); |
LayoutUnit gridAreaBreadth = 0; |
- for (GridSpan::iterator trackPosition = span.begin(); trackPosition != span.end(); ++trackPosition) |
- gridAreaBreadth += tracks[trackPosition.toInt()].baseSize(); |
+ for (const auto& trackPosition : span) |
+ gridAreaBreadth += tracks[trackPosition].baseSize(); |
gridAreaBreadth += guttersSize(direction, span.integerSpan()); |
@@ -1560,10 +1559,10 @@ LayoutUnit LayoutGrid::gridAreaBreadthForChildIncludingAlignmentOffsets(const La |
const Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTracks : sizingData.rowTracks; |
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().prev().toInt()]; |
+ LayoutUnit initialTrackPosition = linePositions[span.resolvedInitialPosition()]; |
+ LayoutUnit finalTrackPosition = linePositions[span.resolvedFinalPosition() - 1]; |
// 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().prev().toInt()].baseSize(); |
+ return finalTrackPosition - initialTrackPosition + tracks[span.resolvedFinalPosition() - 1].baseSize(); |
} |
void LayoutGrid::populateGridPositions(GridSizingData& sizingData) |
@@ -1870,7 +1869,7 @@ static inline LayoutUnit offsetBetweenTracks(ContentDistributionType distributio |
LayoutUnit LayoutGrid::columnAxisOffsetForChild(const LayoutBox& child) const |
{ |
const GridSpan& rowsSpan = cachedGridSpan(child, ForRows); |
- size_t childStartLine = rowsSpan.resolvedInitialPosition().toInt(); |
+ size_t childStartLine = rowsSpan.resolvedInitialPosition(); |
LayoutUnit startOfRow = m_rowPositions[childStartLine]; |
LayoutUnit startPosition = startOfRow + marginBeforeForChild(child); |
if (hasAutoMarginsInColumnAxis(child)) |
@@ -1881,7 +1880,7 @@ LayoutUnit LayoutGrid::columnAxisOffsetForChild(const LayoutBox& child) const |
return startPosition; |
case GridAxisEnd: |
case GridAxisCenter: { |
- size_t childEndLine = rowsSpan.resolvedFinalPosition().toInt(); |
+ size_t childEndLine = rowsSpan.resolvedFinalPosition(); |
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) |
@@ -1902,7 +1901,7 @@ LayoutUnit LayoutGrid::columnAxisOffsetForChild(const LayoutBox& child) const |
LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child) const |
{ |
const GridSpan& columnsSpan = cachedGridSpan(child, ForColumns); |
- size_t childStartLine = columnsSpan.resolvedInitialPosition().toInt(); |
+ size_t childStartLine = columnsSpan.resolvedInitialPosition(); |
LayoutUnit startOfColumn = m_columnPositions[childStartLine]; |
LayoutUnit startPosition = startOfColumn + marginStartForChild(child); |
if (hasAutoMarginsInRowAxis(child)) |
@@ -1913,7 +1912,7 @@ LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child) const |
return startPosition; |
case GridAxisEnd: |
case GridAxisCenter: { |
- size_t childEndLine = columnsSpan.resolvedFinalPosition().toInt(); |
+ size_t childEndLine = columnsSpan.resolvedFinalPosition(); |
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) |