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

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

Issue 1583433002: [css-align] New CSS Value 'normal' for Content Alignment (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed layout tests failing. Created 4 years, 10 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
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 690f874d25ab890e1ef13e318d5072320be770b4..353c95c0e17aba9471f917048d380269f5c3554c 100644
--- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
@@ -1363,12 +1363,18 @@ void LayoutGrid::dirtyGrid()
m_gridIsDirty = true;
}
+static const StyleContentAlignmentData& normalValueBehavior()
+{
+ static const StyleContentAlignmentData normalBehavior = {ContentPositionNormal, ContentDistributionStretch};
+ return normalBehavior;
+}
+
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))
+ || (direction == ForColumns && styleRef().resolvedJustifyContentDistribution(normalValueBehavior()) != ContentDistributionStretch)
+ || (direction == ForRows && styleRef().resolvedAlignContentDistribution(normalValueBehavior()) != ContentDistributionStretch))
return;
// Spec defines auto-sized tracks as the ones with an 'auto' max-sizing function.
@@ -1906,7 +1912,7 @@ LayoutUnit LayoutGrid::columnAxisOffsetForChild(const LayoutBox& child) const
endOfRow -= guttersSize(ForRows, 2);
LayoutUnit childBreadth = child.logicalHeight() + child.marginLogicalHeight();
if (childEndLine - childStartLine > 1 && childEndLine < m_rowPositions.size() - 1)
- endOfRow -= offsetBetweenTracks(styleRef().alignContentDistribution(), m_rowPositions, childBreadth);
+ endOfRow -= offsetBetweenTracks(styleRef().resolvedAlignContentDistribution(normalValueBehavior()), m_rowPositions, childBreadth);
OverflowAlignment overflow = child.styleRef().resolvedAlignment(styleRef(), ItemPositionStretch).overflow();
LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(overflow, endOfRow - startOfRow, childBreadth);
return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPosition : offsetFromStartPosition / 2);
@@ -1939,7 +1945,7 @@ LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child) const
endOfColumn -= guttersSize(ForRows, 2);
LayoutUnit childBreadth = child.logicalWidth() + child.marginLogicalWidth();
if (childEndLine - childStartLine > 1 && childEndLine < m_columnPositions.size() - 1)
- endOfColumn -= offsetBetweenTracks(styleRef().justifyContentDistribution(), m_columnPositions, childBreadth);
+ endOfColumn -= offsetBetweenTracks(styleRef().resolvedJustifyContentDistribution(normalValueBehavior()), m_columnPositions, childBreadth);
LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(child.styleRef().justifySelfOverflowAlignment(), endOfColumn - startOfColumn, childBreadth);
return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPosition : offsetFromStartPosition / 2);
}
@@ -1961,27 +1967,16 @@ ContentPosition static resolveContentDistributionFallback(ContentDistributionTyp
case ContentDistributionStretch:
return ContentPositionStart;
case ContentDistributionDefault:
- return ContentPositionAuto;
+ return ContentPositionNormal;
}
ASSERT_NOT_REACHED();
- return ContentPositionAuto;
-}
-
-static inline LayoutUnit offsetToStartEdge(bool isLeftToRight, LayoutUnit availableSpace)
-{
- return isLeftToRight ? LayoutUnit() : availableSpace;
+ return ContentPositionNormal;
}
-static inline LayoutUnit offsetToEndEdge(bool isLeftToRight, LayoutUnit availableSpace)
-{
- return !isLeftToRight ? LayoutUnit() : availableSpace;
-}
-
-
static ContentAlignmentData contentDistributionOffset(const LayoutUnit& availableFreeSpace, ContentPosition& fallbackPosition, ContentDistributionType distribution, unsigned numberOfGridTracks)
{
- if (distribution != ContentDistributionDefault && fallbackPosition == ContentPositionAuto)
+ if (distribution != ContentDistributionDefault && fallbackPosition == ContentPositionNormal)
fallbackPosition = resolveContentDistributionFallback(distribution);
if (availableFreeSpace <= 0)
@@ -2002,7 +1997,6 @@ static ContentAlignmentData contentDistributionOffset(const LayoutUnit& availabl
distributionOffset = availableFreeSpace / (numberOfGridTracks + 1);
return {distributionOffset, distributionOffset};
case ContentDistributionStretch:
- return {LayoutUnit(), LayoutUnit()};
case ContentDistributionDefault:
return {};
}
@@ -2014,8 +2008,8 @@ static ContentAlignmentData contentDistributionOffset(const LayoutUnit& availabl
ContentAlignmentData LayoutGrid::computeContentPositionAndDistributionOffset(GridTrackSizingDirection direction, const LayoutUnit& availableFreeSpace, unsigned numberOfGridTracks) const
{
bool isRowAxis = direction == ForColumns;
- ContentPosition position = isRowAxis ? styleRef().justifyContentPosition() : styleRef().alignContentPosition();
- ContentDistributionType distribution = isRowAxis ? styleRef().justifyContentDistribution() : styleRef().alignContentDistribution();
+ ContentPosition position = isRowAxis ? styleRef().resolvedJustifyContentPosition(normalValueBehavior()) : styleRef().resolvedAlignContentPosition(normalValueBehavior());
+ ContentDistributionType distribution = isRowAxis ? styleRef().resolvedJustifyContentDistribution(normalValueBehavior()) : styleRef().resolvedAlignContentDistribution(normalValueBehavior());
// If <content-distribution> value can't be applied, 'position' will become the associated
// <content-position> fallback value.
ContentAlignmentData contentAlignment = contentDistributionOffset(availableFreeSpace, position, distribution, numberOfGridTracks);
@@ -2040,21 +2034,21 @@ ContentAlignmentData LayoutGrid::computeContentPositionAndDistributionOffset(Gri
case ContentPositionFlexEnd: // Only used in flex layout, for other layout, it's equivalent to 'End'.
case ContentPositionEnd:
if (isRowAxis)
- return {offsetToEndEdge(styleRef().isLeftToRightDirection(), availableFreeSpace), LayoutUnit()};
+ return {styleRef().isLeftToRightDirection() ? availableFreeSpace : LayoutUnit(), LayoutUnit()};
return {availableFreeSpace, LayoutUnit()};
case ContentPositionFlexStart: // Only used in flex layout, for other layout, it's equivalent to 'Start'.
case ContentPositionStart:
if (isRowAxis)
- return {offsetToStartEdge(styleRef().isLeftToRightDirection(), availableFreeSpace), LayoutUnit()};
+ return {styleRef().isLeftToRightDirection() ? LayoutUnit() : availableFreeSpace, LayoutUnit()};
return {LayoutUnit(), LayoutUnit()};
case ContentPositionBaseline:
case ContentPositionLastBaseline:
// FIXME: These two require implementing Baseline Alignment. For now, we always 'start' align the child.
// crbug.com/234191
if (isRowAxis)
- return {offsetToStartEdge(styleRef().isLeftToRightDirection(), availableFreeSpace), LayoutUnit()};
+ return {styleRef().isLeftToRightDirection() ? LayoutUnit() : availableFreeSpace, LayoutUnit()};
return {LayoutUnit(), LayoutUnit()};
- case ContentPositionAuto:
+ case ContentPositionNormal:
break;
}
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp ('k') | third_party/WebKit/Source/core/style/ComputedStyle.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698