Chromium Code Reviews| Index: Source/core/layout/LayoutGrid.cpp |
| diff --git a/Source/core/layout/LayoutGrid.cpp b/Source/core/layout/LayoutGrid.cpp |
| index 56826d06c9350e129bc8fc841290ceabc90320d6..b93e33b48afd9e83efcb5ab33d6956835e2c9d24 100644 |
| --- a/Source/core/layout/LayoutGrid.cpp |
| +++ b/Source/core/layout/LayoutGrid.cpp |
| @@ -1755,10 +1755,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(0) : trackPositions[1] - trackPositions[0] - childBreadth; |
|
cbiesinger
2015/09/30 15:09:10
Use LayoutUnit() instead of specifying the explici
|
| + |
| +} |
| + |
| 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); |
| GridAxisPosition axisPosition = columnAxisPositionForChild(child); |
| switch (axisPosition) { |
| @@ -1766,8 +1773,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); |
| } |
| } |
| @@ -1779,7 +1790,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); |
| GridAxisPosition axisPosition = rowAxisPositionForChild(child); |
| switch (axisPosition) { |
| @@ -1787,8 +1799,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); |
| } |
| } |