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

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

Issue 1342453004: [CSS Grid Layout] Combining Content and Self Alignment with span items (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Added comment. Created 5 years, 2 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/LayoutTests/fast/css-grid-layout/grid-content-alignment-and-self-alignment-expected.txt ('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 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);
}
}
« no previous file with comments | « third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-content-alignment-and-self-alignment-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698