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

Unified Diff: third_party/WebKit/Source/core/layout/LayoutGrid.cpp

Issue 2347613003: [css-grid] Refactor intrinsic size computation code (Closed)
Patch Set: Build fix Created 4 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
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutGrid.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 912f7e78af937a143ed0f737bc6f76e9dba991b7..ec13d1934a0da3df498bbfaa44792491e7bfb277 100644
--- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
@@ -405,7 +405,7 @@ LayoutUnit LayoutGrid::computeTrackBasedLogicalHeight(const GridSizingData& sizi
return logicalHeight;
}
-void LayoutGrid::computeTrackSizesForDirection(GridTrackSizingDirection direction, GridSizingData& sizingData, LayoutUnit availableSpace)
+void LayoutGrid::computeTrackSizesForDefiniteSize(GridTrackSizingDirection direction, GridSizingData& sizingData, LayoutUnit availableSpace) const
{
DCHECK(sizingData.isValidTransition(direction));
sizingData.setAvailableSpace(availableSpace);
@@ -431,8 +431,8 @@ void LayoutGrid::repeatTracksSizingIfNeeded(GridSizingData& sizingData, LayoutUn
// cases with orthogonal flows require this extra cycle; we need a more specific
// condition to detect whether child's min-content contribution has changed or not.
if (m_hasAnyOrthogonalChild) {
- computeTrackSizesForDirection(ForColumns, sizingData, availableSpaceForColumns);
- computeTrackSizesForDirection(ForRows, sizingData, availableSpaceForRows);
+ computeTrackSizesForDefiniteSize(ForColumns, sizingData, availableSpaceForColumns);
+ computeTrackSizesForDefiniteSize(ForRows, sizingData, availableSpaceForRows);
}
}
@@ -471,14 +471,17 @@ void LayoutGrid::layoutBlock(bool relayoutChildren)
// paths inside updateLogicalHeight() require a previous call to setLogicalHeight() to resolve
// heights properly (like for positioned items for example).
LayoutUnit availableSpaceForColumns = availableLogicalWidth();
- computeTrackSizesForDirection(ForColumns, sizingData, availableSpaceForColumns);
+ computeTrackSizesForDefiniteSize(ForColumns, sizingData, availableSpaceForColumns);
// 2- Next, the track sizing algorithm resolves the sizes of the grid rows, using the
// grid column sizes calculated in the previous step.
- if (cachedHasDefiniteLogicalHeight())
- computeTrackSizesForDirection(ForRows, sizingData, availableLogicalHeight(ExcludeMarginBorderPadding));
- else
- computeIntrinsicLogicalHeight(sizingData);
+ if (cachedHasDefiniteLogicalHeight()) {
+ computeTrackSizesForDefiniteSize(ForRows, sizingData, availableLogicalHeight(ExcludeMarginBorderPadding));
+ } else {
+ computeTrackSizesForIndefiniteSize(ForRows, sizingData, m_minContentHeight, m_maxContentHeight);
+ sizingData.nextState();
+ sizingData.sizingOperation = TrackSizing;
+ }
setLogicalHeight(computeTrackBasedLogicalHeight(sizingData) + borderAndPaddingLogicalHeight() + scrollbarLogicalHeight());
LayoutUnit oldClientAfterEdge = clientLogicalBottom();
@@ -601,36 +604,30 @@ void LayoutGrid::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layo
const_cast<LayoutGrid*>(this)->placeItemsOnGrid(IntrinsicSizeComputation);
GridSizingData sizingData(gridColumnCount(), gridRowCount());
- sizingData.setAvailableSpace(LayoutUnit());
- sizingData.freeSpace(ForColumns) = LayoutUnit();
- sizingData.sizingOperation = IntrinsicSizeComputation;
- computeUsedBreadthOfGridTracks(ForColumns, sizingData, minLogicalWidth, maxLogicalWidth);
-
- LayoutUnit totalGuttersSize = guttersSize(ForColumns, 0, sizingData.columnTracks.size(), sizingData.sizingOperation);
- minLogicalWidth += totalGuttersSize;
- maxLogicalWidth += totalGuttersSize;
+ computeTrackSizesForIndefiniteSize(ForColumns, sizingData, minLogicalWidth, maxLogicalWidth);
LayoutUnit scrollbarWidth = LayoutUnit(scrollbarLogicalWidth());
minLogicalWidth += scrollbarWidth;
maxLogicalWidth += scrollbarWidth;
}
-void LayoutGrid::computeIntrinsicLogicalHeight(GridSizingData& sizingData)
+void LayoutGrid::computeTrackSizesForIndefiniteSize(GridTrackSizingDirection direction, GridSizingData& sizingData, LayoutUnit& minIntrinsicSize, LayoutUnit& maxIntrinsicSize) const
{
- DCHECK(sizingData.isValidTransition(ForRows));
- ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData));
+ DCHECK(sizingData.isValidTransition(direction));
sizingData.setAvailableSpace(LayoutUnit());
- sizingData.freeSpace(ForRows) = LayoutUnit();
+ sizingData.freeSpace(direction) = LayoutUnit();
sizingData.sizingOperation = IntrinsicSizeComputation;
- computeUsedBreadthOfGridTracks(ForRows, sizingData, m_minContentHeight, m_maxContentHeight);
- LayoutUnit totalGuttersSize = guttersSize(ForRows, 0, gridRowCount(), sizingData.sizingOperation);
- m_minContentHeight += totalGuttersSize;
- m_maxContentHeight += totalGuttersSize;
+ computeUsedBreadthOfGridTracks(direction, sizingData, minIntrinsicSize, maxIntrinsicSize);
- ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData));
- sizingData.nextState();
- sizingData.sizingOperation = TrackSizing;
+ size_t numberOfTracks = direction == ForColumns ? sizingData.columnTracks.size() : sizingData.rowTracks.size();
+ LayoutUnit totalGuttersSize = guttersSize(direction, 0, numberOfTracks, sizingData.sizingOperation);
+ minIntrinsicSize += totalGuttersSize;
+ maxIntrinsicSize += totalGuttersSize;
+
+#if ENABLE(ASSERT)
+ DCHECK(tracksAreWiderThanMinTrackBreadth(direction, sizingData));
+#endif
}
LayoutUnit LayoutGrid::computeIntrinsicLogicalContentHeightUsing(const Length& logicalHeightLength, LayoutUnit intrinsicContentHeight, LayoutUnit borderAndPadding) const
@@ -1404,7 +1401,7 @@ void LayoutGrid::distributeSpaceToTracks(Vector<GridTrack*>& tracks, Vector<Grid
}
#if ENABLE(ASSERT)
-bool LayoutGrid::tracksAreWiderThanMinTrackBreadth(GridTrackSizingDirection direction, GridSizingData& sizingData)
+bool LayoutGrid::tracksAreWiderThanMinTrackBreadth(GridTrackSizingDirection direction, GridSizingData& sizingData) const
{
const Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTracks : sizingData.rowTracks;
LayoutUnit& maxSize = sizingData.freeSpace(direction);
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutGrid.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698