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

Unified Diff: Source/core/rendering/RenderGrid.cpp

Issue 146833018: [CSS Grid Layout] Fix missing layout in flexible and content sized columns (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Move check to RenderGrid::resolveContentBasedTrackSizingFunctions() Created 6 years, 11 months 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: 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);

Powered by Google App Engine
This is Rietveld 408576698