| 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 ea88af2bb3a676f3f5f48e4f8fc7b7d10fbe8d93..d091cc586c04ce095de9becd8d11bf3104d2df4d 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
|
| @@ -1793,10 +1793,17 @@ GridAxisPosition LayoutGrid::rowAxisPositionForChild(const LayoutBox& child) con
|
| return GridAxisStart;
|
| }
|
|
|
| +static inline LayoutUnit offsetBetweenTracks(ContentDistributionType distribution, const Vector<LayoutUnit>& trackPositions, const LayoutUnit& childBreadth)
|
| +{
|
| + return (distribution == ContentDistributionStretch || ContentDistributionStretch == ContentDistributionDefault) ? LayoutUnit() : trackPositions[1] - trackPositions[0] - childBreadth;
|
| +
|
| +}
|
| +
|
| LayoutUnit LayoutGrid::columnAxisOffsetForChild(const LayoutBox& child) const
|
| {
|
| const GridCoordinate& coordinate = cachedGridCoordinate(child);
|
| - LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPosition.toInt()];
|
| + size_t childStartLine = coordinate.rows.resolvedInitialPosition.toInt();
|
| + LayoutUnit startOfRow = m_rowPositions[childStartLine];
|
| LayoutUnit startPosition = startOfRow + marginBeforeForChild(child);
|
| if (hasAutoMarginsInColumnAxis(child))
|
| return startPosition;
|
| @@ -1806,8 +1813,12 @@ LayoutUnit LayoutGrid::columnAxisOffsetForChild(const LayoutBox& child) const
|
| return startPosition;
|
| case GridAxisEnd:
|
| case GridAxisCenter: {
|
| - LayoutUnit endOfRow = m_rowPositions[coordinate.rows.resolvedFinalPosition.next().toInt()];
|
| - LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(child.styleRef().alignSelfOverflowAlignment(), endOfRow - startOfRow, child.logicalHeight() + child.marginLogicalHeight());
|
| + size_t childEndLine = coordinate.rows.resolvedFinalPosition.next().toInt();
|
| + LayoutUnit endOfRow = m_rowPositions[childEndLine];
|
| + LayoutUnit childBreadth = child.logicalHeight() + child.marginLogicalHeight();
|
| + if (childEndLine - childStartLine > 1 && childEndLine < m_rowPositions.size() - 1)
|
| + endOfRow -= offsetBetweenTracks(styleRef().alignContentDistribution(), m_rowPositions, childBreadth);
|
| + LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(child.styleRef().alignSelfOverflowAlignment(), endOfRow - startOfRow, childBreadth);
|
| return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPosition : offsetFromStartPosition / 2);
|
| }
|
| }
|
| @@ -1819,7 +1830,8 @@ LayoutUnit LayoutGrid::columnAxisOffsetForChild(const LayoutBox& child) const
|
| LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child) const
|
| {
|
| const GridCoordinate& coordinate = cachedGridCoordinate(child);
|
| - LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInitialPosition.toInt()];
|
| + size_t childStartLine = coordinate.columns.resolvedInitialPosition.toInt();
|
| + LayoutUnit startOfColumn = m_columnPositions[childStartLine];
|
| LayoutUnit startPosition = startOfColumn + marginStartForChild(child);
|
| if (hasAutoMarginsInRowAxis(child))
|
| return startPosition;
|
| @@ -1829,8 +1841,12 @@ LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child) const
|
| return startPosition;
|
| case GridAxisEnd:
|
| case GridAxisCenter: {
|
| - LayoutUnit endOfColumn = m_columnPositions[coordinate.columns.resolvedFinalPosition.next().toInt()];
|
| - LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(child.styleRef().justifySelfOverflowAlignment(), endOfColumn - startOfColumn, child.logicalWidth() + child.marginLogicalWidth());
|
| + size_t childEndLine = coordinate.columns.resolvedFinalPosition.next().toInt();
|
| + LayoutUnit endOfColumn = m_columnPositions[childEndLine];
|
| + LayoutUnit childBreadth = child.logicalWidth() + child.marginLogicalWidth();
|
| + if (childEndLine - childStartLine > 1 && childEndLine < m_columnPositions.size() - 1)
|
| + endOfColumn -= offsetBetweenTracks(styleRef().justifyContentDistribution(), m_columnPositions, childBreadth);
|
| + LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(child.styleRef().justifySelfOverflowAlignment(), endOfColumn - startOfColumn, childBreadth);
|
| return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPosition : offsetFromStartPosition / 2);
|
| }
|
| }
|
|
|