Chromium Code Reviews| Index: Source/core/rendering/RenderGrid.cpp |
| diff --git a/Source/core/rendering/RenderGrid.cpp b/Source/core/rendering/RenderGrid.cpp |
| index 2550717785c3938577fe2e03984e08f7e720f2bb..4b272b74e82ce2cb555e24a715623b7f7088f672 100644 |
| --- a/Source/core/rendering/RenderGrid.cpp |
| +++ b/Source/core/rendering/RenderGrid.cpp |
| @@ -662,8 +662,6 @@ size_t RenderGrid::gridItemSpan(const RenderBox* child, GridTrackSizingDirection |
| return childSpan.resolvedFinalPosition.toInt() - childSpan.resolvedInitialPosition.toInt() + 1; |
| } |
| -typedef std::pair<RenderBox*, size_t> GridItemWithSpan; |
| - |
| // This function sorts by span (.second in the pair) but also places pointers (.first in the pair) to the same object in |
| // consecutive positions so duplicates could be easily removed with std::unique() for example. |
| static bool gridItemWithSpanSorter(const GridItemWithSpan& item1, const GridItemWithSpan& item2) |
| @@ -694,11 +692,10 @@ void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio |
| Vector<GridItemWithSpan>::iterator end = std::unique(itemsSortedByIncreasingSpan.begin(), itemsSortedByIncreasingSpan.end(), uniquePointerInPair); |
| for (Vector<GridItemWithSpan>::iterator it = itemsSortedByIncreasingSpan.begin(); it != end; ++it) { |
| - RenderBox* gridItem = it->first; |
| - resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, gridItem, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &RenderGrid::minContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); |
| - resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, gridItem, &GridTrackSize::hasMaxContentMinTrackBreadth, &RenderGrid::maxContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); |
| - resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, gridItem, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &RenderGrid::minContentForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth); |
| - resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, gridItem, &GridTrackSize::hasMaxContentMaxTrackBreadth, &RenderGrid::maxContentForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth); |
| + resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, *it, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &RenderGrid::minContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); |
| + resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, *it, &GridTrackSize::hasMaxContentMinTrackBreadth, &RenderGrid::maxContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); |
| + resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, *it, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &RenderGrid::minContentForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth); |
| + resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, *it, &GridTrackSize::hasMaxContentMaxTrackBreadth, &RenderGrid::maxContentForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth); |
| } |
| GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[trackIndex] : sizingData.rowTracks[trackIndex]; |
| @@ -707,15 +704,21 @@ void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio |
| } |
| } |
| -void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizingDirection direction, GridSizingData& sizingData, RenderBox* gridItem, FilterFunction filterFunction, SizingFunction sizingFunction, AccumulatorGetter trackGetter, AccumulatorGrowFunction trackGrowthFunction) |
| +void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizingDirection direction, GridSizingData& sizingData, GridItemWithSpan& gridItemWithSpan, FilterFunction filterFunction, SizingFunction sizingFunction, AccumulatorGetter trackGetter, AccumulatorGrowFunction trackGrowthFunction) |
| { |
| + RenderBox* gridItem = gridItemWithSpan.first; |
| const GridCoordinate coordinate = cachedGridCoordinate(gridItem); |
| const GridResolvedPosition initialTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPosition; |
| const GridResolvedPosition finalTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedFinalPosition : coordinate.rows.resolvedFinalPosition; |
| sizingData.filteredTracks.shrink(0); |
| + size_t gridItemSpan = gridItemWithSpan.second; |
| for (GridResolvedPosition trackPosition = initialTrackPosition; trackPosition <= finalTrackPosition; ++trackPosition) { |
| const GridTrackSize& trackSize = gridTrackSize(direction, trackPosition.toInt()); |
| + // We should not consider items spanning more than one track that span tracks with flexible sizing functions. |
| + if (gridItemSpan > 1 && (trackSize.minTrackBreadth().isFlex() || trackSize.maxTrackBreadth().isFlex())) |
|
Julien - ping for review
2014/10/10 18:09:16
While this will work and remove any grid item span
svillar
2014/10/13 06:52:32
That's true.
svillar
2014/10/13 14:38:44
BTW doing this would involve an extra hash lookup
Julien - ping for review
2014/10/13 19:43:48
I would go with incremental changes for that as it
Julien - ping for review
2014/10/13 19:43:48
Another argument for the class, I am officially ov
svillar
2014/10/14 06:29:13
Yeah but note that this step was already present i
Julien - ping for review
2014/10/15 16:04:58
100% agreed! I was just mentioning that as it may
|
| + return; |
| + |
| if (!(trackSize.*filterFunction)()) |
| continue; |