Skip to content

Commit

Permalink
[css-grid] Include freeSpace in GridSizingData struct
Browse files Browse the repository at this point in the history
During the layout process we keep the free space for rows and columns in two
variables that are passed to a few methods along with the GridSizingData
struct.  Clearly those two variables should be part of GridSizingData as
they're temporary values used just for the sake of the layout.

Review URL: https://codereview.chromium.org/1387063003

Cr-Commit-Position: refs/heads/master@{#353035}
  • Loading branch information
svillar authored and Commit bot committed Oct 8, 2015
1 parent ff92275 commit bb66edc
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 21 deletions.
44 changes: 27 additions & 17 deletions third_party/WebKit/Source/core/layout/LayoutGrid.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -230,9 +230,11 @@ struct LayoutGrid::GridSizingData {
WTF_MAKE_NONCOPYABLE(GridSizingData);
STACK_ALLOCATED();
public:
GridSizingData(size_t gridColumnCount, size_t gridRowCount)
GridSizingData(size_t gridColumnCount, size_t gridRowCount, const LayoutUnit& freeSpaceForColumns, const LayoutUnit& freeSpaceForRows)
: columnTracks(gridColumnCount)
, rowTracks(gridRowCount)
, freeSpaceForColumns(freeSpaceForColumns)
, freeSpaceForRows(freeSpaceForRows)
{
}

Expand All @@ -244,6 +246,12 @@ struct LayoutGrid::GridSizingData {
Vector<GridTrack*> filteredTracks;
Vector<GridItemWithSpan> itemsSortedByIncreasingSpan;
Vector<GridTrack*> growBeyondGrowthLimitsTracks;

LayoutUnit& freeSpaceForDirection(GridTrackSizingDirection direction) { return direction == ForColumns ? freeSpaceForColumns : freeSpaceForRows; }

private:
LayoutUnit freeSpaceForColumns;
LayoutUnit freeSpaceForRows;
};

struct GridItemsSpanGroupRange {
Expand Down Expand Up @@ -363,9 +371,8 @@ void LayoutGrid::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layo
{
const_cast<LayoutGrid*>(this)->placeItemsOnGrid();

GridSizingData sizingData(gridColumnCount(), gridRowCount());
LayoutUnit availableLogicalSpace = 0;
const_cast<LayoutGrid*>(this)->computeUsedBreadthOfGridTracks(ForColumns, sizingData, availableLogicalSpace);
GridSizingData sizingData(gridColumnCount(), gridRowCount(), 0, 0);
const_cast<LayoutGrid*>(this)->computeUsedBreadthOfGridTracks(ForColumns, sizingData);

for (const auto& column : sizingData.columnTracks) {
const LayoutUnit& minTrackBreadth = column.baseSize();
Expand Down Expand Up @@ -394,8 +401,9 @@ static inline double normalizedFlexFraction(const GridTrack& track, double flexF
return track.baseSize() / std::max<double>(1, flexFactor);
}

void LayoutGrid::computeUsedBreadthOfGridTracks(GridTrackSizingDirection direction, GridSizingData& sizingData, LayoutUnit& freeSpace)
void LayoutGrid::computeUsedBreadthOfGridTracks(GridTrackSizingDirection direction, GridSizingData& sizingData)
{
LayoutUnit& freeSpace = sizingData.freeSpaceForDirection(direction);
const LayoutUnit initialFreeSpace = freeSpace;
Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTracks : sizingData.rowTracks;
Vector<size_t> flexibleSizedTracksIndex;
Expand Down Expand Up @@ -1275,8 +1283,9 @@ void LayoutGrid::dirtyGrid()
m_gridIsDirty = true;
}

void LayoutGrid::applyStretchAlignmentToTracksIfNeeded(GridTrackSizingDirection direction, GridSizingData& sizingData, LayoutUnit availableSpace)
void LayoutGrid::applyStretchAlignmentToTracksIfNeeded(GridTrackSizingDirection direction, GridSizingData& sizingData)
{
LayoutUnit& availableSpace = sizingData.freeSpaceForDirection(direction);
if (availableSpace <= 0
|| (direction == ForColumns && styleRef().justifyContentDistribution() != ContentDistributionStretch)
|| (direction == ForRows && styleRef().alignContentDistribution() != ContentDistributionStretch))
Expand All @@ -1303,6 +1312,7 @@ void LayoutGrid::applyStretchAlignmentToTracksIfNeeded(GridTrackSizingDirection
LayoutUnit baseSize = track->baseSize() + sizeToIncrease;
track->setBaseSize(baseSize);
}
availableSpace = 0;
}

void LayoutGrid::layoutGridItems()
Expand All @@ -1316,16 +1326,16 @@ void LayoutGrid::layoutGridItems()
availableSpaceForColumns -= guttersSize(ForColumns, gridColumnCount());
availableSpaceForRows -= guttersSize(ForRows, gridRowCount());

GridSizingData sizingData(gridColumnCount(), gridRowCount());
computeUsedBreadthOfGridTracks(ForColumns, sizingData, availableSpaceForColumns);
GridSizingData sizingData(gridColumnCount(), gridRowCount(), availableSpaceForColumns, availableSpaceForRows);
computeUsedBreadthOfGridTracks(ForColumns, sizingData);
ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData.columnTracks));
computeUsedBreadthOfGridTracks(ForRows, sizingData, availableSpaceForRows);
computeUsedBreadthOfGridTracks(ForRows, sizingData);
ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData.rowTracks));

applyStretchAlignmentToTracksIfNeeded(ForColumns, sizingData, availableSpaceForColumns);
applyStretchAlignmentToTracksIfNeeded(ForRows, sizingData, availableSpaceForRows);
applyStretchAlignmentToTracksIfNeeded(ForColumns, sizingData);
applyStretchAlignmentToTracksIfNeeded(ForRows, sizingData);

populateGridPositions(sizingData, availableSpaceForColumns, availableSpaceForRows);
populateGridPositions(sizingData);
m_gridItemsOverflowingGridArea.resize(0);

for (LayoutBox* child = firstChildBox(); child; child = child->nextSiblingBox()) {
Expand Down Expand Up @@ -1518,7 +1528,7 @@ LayoutUnit LayoutGrid::gridAreaBreadthForChildIncludingAlignmentOffsets(const La
return finalTrackPosition - initialTrackPosition + tracks[span.resolvedFinalPosition.toInt()].baseSize();
}

void LayoutGrid::populateGridPositions(GridSizingData& sizingData, LayoutUnit availableSpaceForColumns, LayoutUnit availableSpaceForRows)
void LayoutGrid::populateGridPositions(GridSizingData& sizingData)
{
// Since we add alignment offsets and track gutters, grid lines are not always adjacent. Hence we will have to
// assume from now on that we just store positions of the initial grid lines of each track,
Expand All @@ -1530,7 +1540,7 @@ void LayoutGrid::populateGridPositions(GridSizingData& sizingData, LayoutUnit av
unsigned numberOfLines = numberOfTracks + 1;
unsigned lastLine = numberOfLines - 1;
unsigned nextToLastLine = numberOfLines - 2;
ContentAlignmentData offset = computeContentPositionAndDistributionOffset(ForColumns, availableSpaceForColumns, numberOfTracks);
ContentAlignmentData offset = computeContentPositionAndDistributionOffset(ForColumns, sizingData.freeSpaceForDirection(ForColumns), numberOfTracks);
LayoutUnit trackGap = guttersSize(ForColumns, 2);
m_columnPositions.resize(numberOfLines);
m_columnPositions[0] = borderAndPaddingStart() + offset.positionOffset;
Expand All @@ -1542,7 +1552,7 @@ void LayoutGrid::populateGridPositions(GridSizingData& sizingData, LayoutUnit av
numberOfLines = numberOfTracks + 1;
lastLine = numberOfLines - 1;
nextToLastLine = numberOfLines - 2;
offset = computeContentPositionAndDistributionOffset(ForRows, availableSpaceForRows, numberOfTracks);
offset = computeContentPositionAndDistributionOffset(ForRows, sizingData.freeSpaceForDirection(ForRows), numberOfTracks);
trackGap = guttersSize(ForRows, 2);
m_rowPositions.resize(numberOfLines);
m_rowPositions[0] = borderAndPaddingBefore() + offset.positionOffset;
Expand Down Expand Up @@ -1930,7 +1940,7 @@ static inline LayoutUnit offsetToEndEdge(bool isLeftToRight, LayoutUnit availabl
}


static ContentAlignmentData contentDistributionOffset(LayoutUnit availableFreeSpace, ContentPosition& fallbackPosition, ContentDistributionType distribution, unsigned numberOfGridTracks)
static ContentAlignmentData contentDistributionOffset(const LayoutUnit& availableFreeSpace, ContentPosition& fallbackPosition, ContentDistributionType distribution, unsigned numberOfGridTracks)
{
if (distribution != ContentDistributionDefault && fallbackPosition == ContentPositionAuto)
fallbackPosition = resolveContentDistributionFallback(distribution);
Expand Down Expand Up @@ -1962,7 +1972,7 @@ static ContentAlignmentData contentDistributionOffset(LayoutUnit availableFreeSp
return {};
}

ContentAlignmentData LayoutGrid::computeContentPositionAndDistributionOffset(GridTrackSizingDirection direction, LayoutUnit availableFreeSpace, unsigned numberOfGridTracks) const
ContentAlignmentData LayoutGrid::computeContentPositionAndDistributionOffset(GridTrackSizingDirection direction, const LayoutUnit& availableFreeSpace, unsigned numberOfGridTracks) const
{
bool isRowAxis = direction == ForColumns;
ContentPosition position = isRowAxis ? styleRef().justifyContentPosition() : styleRef().alignContentPosition();
Expand Down
8 changes: 4 additions & 4 deletions third_party/WebKit/Source/core/layout/LayoutGrid.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ class LayoutGrid final : public LayoutBlock {
class GridIterator;
struct GridSizingData;
bool gridElementIsShrinkToFit();
void computeUsedBreadthOfGridTracks(GridTrackSizingDirection, GridSizingData&, LayoutUnit& availableLogicalSpace);
void computeUsedBreadthOfGridTracks(GridTrackSizingDirection, GridSizingData&);
LayoutUnit computeUsedBreadthOfMinLength(GridTrackSizingDirection, const GridLength&) const;
LayoutUnit computeUsedBreadthOfMaxLength(GridTrackSizingDirection, const GridLength&, LayoutUnit usedBreadth) const;
LayoutUnit computeUsedBreadthOfSpecifiedLength(GridTrackSizingDirection, const Length&) const;
Expand All @@ -129,7 +129,7 @@ class LayoutGrid final : public LayoutBlock {
void prepareChildForPositionedLayout(LayoutBox&);
void layoutPositionedObjects(bool relayoutChildren, PositionedLayoutBehavior = DefaultLayout);
void offsetAndBreadthForPositionedChild(const LayoutBox&, GridTrackSizingDirection, LayoutUnit& offset, LayoutUnit& breadth);
void populateGridPositions(GridSizingData&, LayoutUnit availableSpaceForColumns, LayoutUnit availableSpaceForRows);
void populateGridPositions(GridSizingData&);

typedef struct GridItemsSpanGroupRange GridItemsSpanGroupRange;
LayoutUnit currentItemSizeForTrackSizeComputationPhase(TrackSizeComputationPhase, LayoutBox&, GridTrackSizingDirection, Vector<GridTrack>& columnTracks);
Expand All @@ -151,14 +151,14 @@ class LayoutGrid final : public LayoutBlock {
GridAxisPosition rowAxisPositionForChild(const LayoutBox&) const;
LayoutUnit rowAxisOffsetForChild(const LayoutBox&) const;
LayoutUnit columnAxisOffsetForChild(const LayoutBox&) const;
ContentAlignmentData computeContentPositionAndDistributionOffset(GridTrackSizingDirection, LayoutUnit availableFreeSpace, unsigned numberOfGridTracks) const;
ContentAlignmentData computeContentPositionAndDistributionOffset(GridTrackSizingDirection, const LayoutUnit& availableFreeSpace, unsigned numberOfGridTracks) const;
LayoutPoint findChildLogicalPosition(const LayoutBox&, GridSizingData&) const;
GridCoordinate cachedGridCoordinate(const LayoutBox&) const;

LayoutUnit gridAreaBreadthForChild(const LayoutBox& child, GridTrackSizingDirection, const Vector<GridTrack>&) const;
LayoutUnit gridAreaBreadthForChildIncludingAlignmentOffsets(const LayoutBox&, GridTrackSizingDirection, const GridSizingData&) const;

void applyStretchAlignmentToTracksIfNeeded(GridTrackSizingDirection, GridSizingData&, LayoutUnit availableSpace);
void applyStretchAlignmentToTracksIfNeeded(GridTrackSizingDirection, GridSizingData&);

void paintChildren(const PaintInfo&, const LayoutPoint&) const override;

Expand Down

0 comments on commit bb66edc

Please sign in to comment.