Commit 8ccb563f authored by svillar's avatar svillar Committed by Commit bot

[css-grid] Refactor intrinsic size computation code

The code which computes the intrinsic logical width of the grid container
and the rows sizes with indefinite height is exactly the same but operating
in different axis. Refactored so that we don't have to write the
initialization and tear down code twice.

Review-Url: https://codereview.chromium.org/2347613003
Cr-Commit-Position: refs/heads/master@{#419158}
parent 3e538da7
...@@ -405,7 +405,7 @@ LayoutUnit LayoutGrid::computeTrackBasedLogicalHeight(const GridSizingData& sizi ...@@ -405,7 +405,7 @@ LayoutUnit LayoutGrid::computeTrackBasedLogicalHeight(const GridSizingData& sizi
return logicalHeight; 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)); DCHECK(sizingData.isValidTransition(direction));
sizingData.setAvailableSpace(availableSpace); sizingData.setAvailableSpace(availableSpace);
...@@ -431,8 +431,8 @@ void LayoutGrid::repeatTracksSizingIfNeeded(GridSizingData& sizingData, LayoutUn ...@@ -431,8 +431,8 @@ void LayoutGrid::repeatTracksSizingIfNeeded(GridSizingData& sizingData, LayoutUn
// cases with orthogonal flows require this extra cycle; we need a more specific // 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. // condition to detect whether child's min-content contribution has changed or not.
if (m_hasAnyOrthogonalChild) { if (m_hasAnyOrthogonalChild) {
computeTrackSizesForDirection(ForColumns, sizingData, availableSpaceForColumns); computeTrackSizesForDefiniteSize(ForColumns, sizingData, availableSpaceForColumns);
computeTrackSizesForDirection(ForRows, sizingData, availableSpaceForRows); computeTrackSizesForDefiniteSize(ForRows, sizingData, availableSpaceForRows);
} }
} }
...@@ -471,14 +471,17 @@ void LayoutGrid::layoutBlock(bool relayoutChildren) ...@@ -471,14 +471,17 @@ void LayoutGrid::layoutBlock(bool relayoutChildren)
// paths inside updateLogicalHeight() require a previous call to setLogicalHeight() to resolve // paths inside updateLogicalHeight() require a previous call to setLogicalHeight() to resolve
// heights properly (like for positioned items for example). // heights properly (like for positioned items for example).
LayoutUnit availableSpaceForColumns = availableLogicalWidth(); 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 // 2- Next, the track sizing algorithm resolves the sizes of the grid rows, using the
// grid column sizes calculated in the previous step. // grid column sizes calculated in the previous step.
if (cachedHasDefiniteLogicalHeight()) if (cachedHasDefiniteLogicalHeight()) {
computeTrackSizesForDirection(ForRows, sizingData, availableLogicalHeight(ExcludeMarginBorderPadding)); computeTrackSizesForDefiniteSize(ForRows, sizingData, availableLogicalHeight(ExcludeMarginBorderPadding));
else } else {
computeIntrinsicLogicalHeight(sizingData); computeTrackSizesForIndefiniteSize(ForRows, sizingData, m_minContentHeight, m_maxContentHeight);
sizingData.nextState();
sizingData.sizingOperation = TrackSizing;
}
setLogicalHeight(computeTrackBasedLogicalHeight(sizingData) + borderAndPaddingLogicalHeight() + scrollbarLogicalHeight()); setLogicalHeight(computeTrackBasedLogicalHeight(sizingData) + borderAndPaddingLogicalHeight() + scrollbarLogicalHeight());
LayoutUnit oldClientAfterEdge = clientLogicalBottom(); LayoutUnit oldClientAfterEdge = clientLogicalBottom();
...@@ -601,36 +604,30 @@ void LayoutGrid::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layo ...@@ -601,36 +604,30 @@ void LayoutGrid::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layo
const_cast<LayoutGrid*>(this)->placeItemsOnGrid(IntrinsicSizeComputation); const_cast<LayoutGrid*>(this)->placeItemsOnGrid(IntrinsicSizeComputation);
GridSizingData sizingData(gridColumnCount(), gridRowCount()); GridSizingData sizingData(gridColumnCount(), gridRowCount());
sizingData.setAvailableSpace(LayoutUnit()); computeTrackSizesForIndefiniteSize(ForColumns, sizingData, minLogicalWidth, maxLogicalWidth);
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;
LayoutUnit scrollbarWidth = LayoutUnit(scrollbarLogicalWidth()); LayoutUnit scrollbarWidth = LayoutUnit(scrollbarLogicalWidth());
minLogicalWidth += scrollbarWidth; minLogicalWidth += scrollbarWidth;
maxLogicalWidth += scrollbarWidth; maxLogicalWidth += scrollbarWidth;
} }
void LayoutGrid::computeIntrinsicLogicalHeight(GridSizingData& sizingData) void LayoutGrid::computeTrackSizesForIndefiniteSize(GridTrackSizingDirection direction, GridSizingData& sizingData, LayoutUnit& minIntrinsicSize, LayoutUnit& maxIntrinsicSize) const
{ {
DCHECK(sizingData.isValidTransition(ForRows)); DCHECK(sizingData.isValidTransition(direction));
ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData));
sizingData.setAvailableSpace(LayoutUnit()); sizingData.setAvailableSpace(LayoutUnit());
sizingData.freeSpace(ForRows) = LayoutUnit(); sizingData.freeSpace(direction) = LayoutUnit();
sizingData.sizingOperation = IntrinsicSizeComputation; sizingData.sizingOperation = IntrinsicSizeComputation;
computeUsedBreadthOfGridTracks(ForRows, sizingData, m_minContentHeight, m_maxContentHeight);
LayoutUnit totalGuttersSize = guttersSize(ForRows, 0, gridRowCount(), sizingData.sizingOperation); computeUsedBreadthOfGridTracks(direction, sizingData, minIntrinsicSize, maxIntrinsicSize);
m_minContentHeight += totalGuttersSize;
m_maxContentHeight += totalGuttersSize;
ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData)); size_t numberOfTracks = direction == ForColumns ? sizingData.columnTracks.size() : sizingData.rowTracks.size();
sizingData.nextState(); LayoutUnit totalGuttersSize = guttersSize(direction, 0, numberOfTracks, sizingData.sizingOperation);
sizingData.sizingOperation = TrackSizing; minIntrinsicSize += totalGuttersSize;
maxIntrinsicSize += totalGuttersSize;
#if ENABLE(ASSERT)
DCHECK(tracksAreWiderThanMinTrackBreadth(direction, sizingData));
#endif
} }
LayoutUnit LayoutGrid::computeIntrinsicLogicalContentHeightUsing(const Length& logicalHeightLength, LayoutUnit intrinsicContentHeight, LayoutUnit borderAndPadding) const LayoutUnit LayoutGrid::computeIntrinsicLogicalContentHeightUsing(const Length& logicalHeightLength, LayoutUnit intrinsicContentHeight, LayoutUnit borderAndPadding) const
...@@ -1404,7 +1401,7 @@ void LayoutGrid::distributeSpaceToTracks(Vector<GridTrack*>& tracks, Vector<Grid ...@@ -1404,7 +1401,7 @@ void LayoutGrid::distributeSpaceToTracks(Vector<GridTrack*>& tracks, Vector<Grid
} }
#if ENABLE(ASSERT) #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; const Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTracks : sizingData.rowTracks;
LayoutUnit& maxSize = sizingData.freeSpace(direction); LayoutUnit& maxSize = sizingData.freeSpace(direction);
......
...@@ -142,9 +142,9 @@ private: ...@@ -142,9 +142,9 @@ private:
GridTrackSizingDirection autoPlacementMajorAxisDirection() const; GridTrackSizingDirection autoPlacementMajorAxisDirection() const;
GridTrackSizingDirection autoPlacementMinorAxisDirection() const; GridTrackSizingDirection autoPlacementMinorAxisDirection() const;
void computeIntrinsicLogicalHeight(GridSizingData&); void computeTrackSizesForIndefiniteSize(GridTrackSizingDirection, GridSizingData&, LayoutUnit& minIntrinsicSize, LayoutUnit& maxIntrinsicSize) const;
LayoutUnit computeTrackBasedLogicalHeight(const GridSizingData&) const; LayoutUnit computeTrackBasedLogicalHeight(const GridSizingData&) const;
void computeTrackSizesForDirection(GridTrackSizingDirection, GridSizingData&, LayoutUnit freeSpace); void computeTrackSizesForDefiniteSize(GridTrackSizingDirection, GridSizingData&, LayoutUnit freeSpace) const;
void repeatTracksSizingIfNeeded(GridSizingData&, LayoutUnit availableSpaceForColumns, LayoutUnit availableSpaceForRows); void repeatTracksSizingIfNeeded(GridSizingData&, LayoutUnit availableSpaceForColumns, LayoutUnit availableSpaceForRows);
...@@ -205,7 +205,7 @@ private: ...@@ -205,7 +205,7 @@ private:
void updateAutoMarginsInRowAxisIfNeeded(LayoutBox&); void updateAutoMarginsInRowAxisIfNeeded(LayoutBox&);
#if ENABLE(ASSERT) #if ENABLE(ASSERT)
bool tracksAreWiderThanMinTrackBreadth(GridTrackSizingDirection, GridSizingData&); bool tracksAreWiderThanMinTrackBreadth(GridTrackSizingDirection, GridSizingData&) const;
#endif #endif
LayoutUnit gridGapForDirection(GridTrackSizingDirection, SizingOperation) const; LayoutUnit gridGapForDirection(GridTrackSizingDirection, SizingOperation) const;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment