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

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

Issue 613273002: [CSS Grid Layout] Stretch value for align and justify properties. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Added specific layout test. Created 6 years, 3 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 40f2d1e2ac51956f535803cef84a2da8f2d36154..9d6ac85d4667436b34cb5ccd3337ccd87e8a9c84 100644
--- a/Source/core/rendering/RenderGrid.cpp
+++ b/Source/core/rendering/RenderGrid.cpp
@@ -616,6 +616,8 @@ GridTrackSize RenderGrid::gridTrackSize(GridTrackSizingDirection direction, size
LayoutUnit RenderGrid::logicalHeightForChild(RenderBox& child, Vector<GridTrack>& columnTracks)
{
+ child.clearOverrideLogicalContentHeight();
Julien - ping for review 2014/10/08 15:21:47 I don't understand the need for this as we do the
jfernandez 2014/10/12 22:40:27 Well, if I understood it correctly, OverrideContai
Julien - ping for review 2014/10/21 00:43:12 You're right, I misread. RenderGrid needs to prete
jfernandez 2014/10/22 09:31:37 Done.
+
SubtreeLayoutScope layoutScope(child);
LayoutUnit oldOverrideContainingBlockContentLogicalWidth = child.hasOverrideContainingBlockLogicalWidth() ? child.overrideContainingBlockContentLogicalWidth() : LayoutUnit();
LayoutUnit overrideContainingBlockContentLogicalWidth = gridAreaBreadthForChild(child, ForColumns, columnTracks);
@@ -1073,6 +1075,8 @@ void RenderGrid::layoutGridItems()
// FIXME: Grid items should stretch to fill their cells. Once we
// implement grid-{column,row}-align, we can also shrink to fit. For
// now, just size as if we were a regular child.
+ applyStretchAlignmentToChildIfNeeded(*child, overrideContainingBlockContentLogicalHeight);
+
child->layoutIfNeeded();
#if ENABLE(ASSERT)
@@ -1103,6 +1107,22 @@ GridCoordinate RenderGrid::cachedGridCoordinate(const RenderBox& gridItem) const
return m_gridItemCoordinate.get(&gridItem);
}
+// FIXME: We should move this logic to the StyleAdjuster or the StyleBuilder.
+static ItemPosition resolveAlignment(const RenderStyle* parentStyle, const RenderStyle* childStyle)
+{
+ ItemPosition align = childStyle->alignSelf();
+ // The auto keyword computes to the parent's align-items computed value, or to "stretch", if not set or "auto".
+ if (align == ItemPositionAuto)
+ align = (parentStyle->alignItems() == ItemPositionAuto) ? ItemPositionStretch : parentStyle->alignItems();
+ return align;
+}
+
+void RenderGrid::applyStretchAlignmentToChildIfNeeded(RenderBox& child, LayoutUnit overrideLogicalContentHeight)
+{
+ if (child.style()->logicalHeight().isAuto() && resolveAlignment(style(), child.style()) == ItemPositionStretch)
+ child.setOverrideLogicalContentHeight(overrideLogicalContentHeight);
Julien - ping for review 2014/10/08 15:21:47 This is good for a first pass but it's not totally
jfernandez 2014/10/12 22:40:27 Acknowledged.
+}
+
LayoutUnit RenderGrid::gridAreaBreadthForChild(const RenderBox& child, GridTrackSizingDirection direction, const Vector<GridTrack>& tracks) const
{
const GridCoordinate& coordinate = cachedGridCoordinate(child);
@@ -1246,6 +1266,7 @@ LayoutUnit RenderGrid::columnPositionForChild(const RenderBox& child) const
case ItemPositionAuto:
break;
case ItemPositionStretch:
+ return startOfColumnForChild(child);
case ItemPositionBaseline:
case ItemPositionLastBaseline:
// FIXME: Implement the previous values. For now, we always start align the child.
@@ -1293,16 +1314,6 @@ LayoutUnit RenderGrid::centeredRowPositionForChild(const RenderBox& child) const
return startOfRow + std::max<LayoutUnit>(0, endOfRow - startOfRow - child.logicalHeight()) / 2;
}
-// FIXME: We should move this logic to the StyleAdjuster or the StyleBuilder.
-static ItemPosition resolveAlignment(const RenderStyle* parentStyle, const RenderStyle* childStyle)
-{
- ItemPosition align = childStyle->alignSelf();
- // The auto keyword computes to the parent's align-items computed value, or to "stretch", if not set or "auto".
- if (align == ItemPositionAuto)
- align = (parentStyle->alignItems() == ItemPositionAuto) ? ItemPositionStretch : parentStyle->alignItems();
- return align;
-}
-
Julien - ping for review 2014/10/08 15:21:47 Instead of moving this code, can we just move appl
LayoutUnit RenderGrid::rowPositionForChild(const RenderBox& child) const
{
bool hasOrthogonalWritingMode = child.isHorizontalWritingMode() != isHorizontalWritingMode();
@@ -1361,7 +1372,6 @@ LayoutUnit RenderGrid::rowPositionForChild(const RenderBox& child) const
case ItemPositionEnd:
return endOfRowForChild(child);
case ItemPositionStretch:
- // FIXME: Implement the Stretch value. For now, we always start align the child.
return startOfRowForChild(child);
case ItemPositionBaseline:
case ItemPositionLastBaseline:

Powered by Google App Engine
This is Rietveld 408576698