Chromium Code Reviews| Index: Source/core/rendering/RenderGrid.cpp |
| diff --git a/Source/core/rendering/RenderGrid.cpp b/Source/core/rendering/RenderGrid.cpp |
| index e5f2e11fe974c9be408d69bfdc7022623bae776f..d2390ff0b012b3be49d34a314d6cfdb71014c508 100644 |
| --- a/Source/core/rendering/RenderGrid.cpp |
| +++ b/Source/core/rendering/RenderGrid.cpp |
| @@ -566,7 +566,6 @@ LayoutUnit RenderGrid::logicalContentHeightForChild(RenderBox* child, Vector<Gri |
| if (child->style()->logicalHeight().isPercent()) |
| layoutScope.setNeedsLayout(child); |
| - child->setOverrideContainingBlockContentLogicalWidth(gridAreaBreadthForChild(child, ForColumns, columnTracks)); |
| // If |child| has a percentage logical height, we shouldn't let it override its intrinsic height, which is |
| // what we are interested in here. Thus we need to set the override logical height to -1 (no possible resolution). |
| child->setOverrideContainingBlockContentLogicalHeight(-1); |
| @@ -615,6 +614,16 @@ void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio |
| for (size_t i = 0; i < sizingData.contentSizedTracksIndex.size(); ++i) { |
| GridIterator iterator(m_grid, direction, sizingData.contentSizedTracksIndex[i]); |
| while (RenderBox* gridItem = iterator.nextGridItem()) { |
| + LayoutUnit oldOverrideContainingBlockContentLogicalWidth = gridItem->hasOverrideContainingBlockLogicalWidth() ? gridItem->overrideContainingBlockContentLogicalWidth() : LayoutUnit(); |
| + LayoutUnit overrideContainingBlockContentLogicalWidth = gridAreaBreadthForChild(gridItem, ForColumns, sizingData.columnTracks); |
| + |
| + SubtreeLayoutScope layoutScope(gridItem); |
| + if ((oldOverrideContainingBlockContentLogicalWidth != overrideContainingBlockContentLogicalWidth) && breathIsFlexOrContentSizedForChild(gridItem, ForColumns)) |
| + layoutScope.setNeedsLayout(gridItem); |
| + |
| + gridItem->setOverrideContainingBlockContentLogicalWidth(overrideContainingBlockContentLogicalWidth); |
| + gridItem->layoutIfNeeded(); |
|
Julien - ping for review
2014/02/07 00:13:57
I think I understand the problem now. The original
|
| + |
| 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); |
| @@ -627,6 +636,19 @@ void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio |
| } |
| } |
| +bool RenderGrid::breathIsFlexOrContentSizedForChild(RenderBox* child, GridTrackSizingDirection direction) const |
|
Julien - ping for review
2014/02/07 00:13:57
If you think of it, this check is unneeded as we o
|
| +{ |
| + const GridCoordinate& coordinate = cachedGridCoordinate(child); |
| + const size_t initial = (direction == ForColumns) ? coordinate.columns.initialPositionIndex : coordinate.rows.initialPositionIndex; |
| + const size_t final = (direction == ForColumns) ? coordinate.columns.finalPositionIndex : coordinate.rows.finalPositionIndex; |
| + for (size_t i = initial; i <= final; i++) { |
| + const GridTrackSize& trackSize = gridTrackSize(direction, i); |
| + if (trackSize.maxTrackBreadth().isFlex() || trackSize.maxTrackBreadth().isContentSized()) |
| + return true; |
| + } |
| + return false; |
| +} |
| + |
| void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizingDirection direction, GridSizingData& sizingData, RenderBox* gridItem, FilterFunction filterFunction, SizingFunction sizingFunction, AccumulatorGetter trackGetter, AccumulatorGrowFunction trackGrowthFunction) |
| { |
| const GridCoordinate coordinate = cachedGridCoordinate(gridItem); |