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 784ab711f8449cd0e337ac60d7f8090aba6c38b0..2f0dccccb881997d688f2c3479d3455045263d40 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
@@ -441,10 +441,9 @@ void LayoutGrid::layoutBlock(bool relayoutChildren) |
// TODO(svillar): we won't need to do this once the intrinsic width computation is isolated |
// from the LayoutGrid object state (it should not touch any attribute) (see crbug.com/627812) |
- size_t autoRepeatColumnsCount = computeAutoRepeatTracksCount(ForColumns); |
- if (m_autoRepeatColumns && m_autoRepeatColumns != autoRepeatColumnsCount) |
+ if (m_autoRepeatColumns && m_autoRepeatColumns != computeAutoRepeatTracksCount(ForColumns, TrackSizing)) |
dirtyGrid(); |
- placeItemsOnGrid(autoRepeatColumnsCount); |
+ placeItemsOnGrid(TrackSizing); |
GridSizingData sizingData(gridColumnCount(), gridRowCount()); |
@@ -575,7 +574,7 @@ LayoutUnit LayoutGrid::guttersSize(GridTrackSizingDirection direction, size_t st |
void LayoutGrid::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const |
{ |
- const_cast<LayoutGrid*>(this)->placeItemsOnGrid(styleRef().gridAutoRepeatColumns().size()); |
+ const_cast<LayoutGrid*>(this)->placeItemsOnGrid(IntrinsicSizeComputation); |
GridSizingData sizingData(gridColumnCount(), gridRowCount()); |
sizingData.freeSpaceForDirection(ForColumns) = LayoutUnit(); |
@@ -1384,7 +1383,7 @@ void LayoutGrid::insertItemIntoGrid(LayoutBox& child, const GridArea& area) |
} |
} |
-size_t LayoutGrid::computeAutoRepeatTracksCount(GridTrackSizingDirection direction) const |
+size_t LayoutGrid::computeAutoRepeatTracksCount(GridTrackSizingDirection direction, SizingOperation sizingOperation) const |
{ |
bool isRowAxis = direction == ForColumns; |
const auto& autoRepeatTracks = isRowAxis ? styleRef().gridAutoRepeatColumns() : styleRef().gridAutoRepeatRows(); |
@@ -1393,18 +1392,23 @@ size_t LayoutGrid::computeAutoRepeatTracksCount(GridTrackSizingDirection directi |
if (!autoRepeatTrackListLength) |
return 0; |
- LayoutUnit availableSize = isRowAxis ? availableLogicalWidth() : computeContentLogicalHeight(MainOrPreferredSize, styleRef().logicalHeight(), LayoutUnit(-1)); |
- if (availableSize == -1) { |
- const Length& maxLength = isRowAxis ? styleRef().logicalMaxWidth() : styleRef().logicalMaxHeight(); |
- if (!maxLength.isMaxSizeNone()) { |
- availableSize = isRowAxis |
- ? computeLogicalWidthUsing(MaxSize, maxLength, containingBlockLogicalWidthForContent(), containingBlock()) |
jfernandez
2016/08/22 14:44:48
Where is this case defined in the new logic ? Is i
svillar
2016/08/22 16:01:52
You can see it defined for rows in the else block
jfernandez
2016/08/22 16:20:20
got it now, thanks.
|
- : computeContentLogicalHeight(MaxSize, maxLength, LayoutUnit(-1)); |
+ LayoutUnit availableSize(-1); |
Manuel Rego
2016/08/23 07:43:03
Mmm, this means that for columns during intrinsic
svillar
2016/08/25 09:33:10
There is no intrinsic size computation with fixed
Manuel Rego
2016/08/25 09:59:35
Thanks for the explanations I knew I was missing s
|
+ // Widths are always definite except during intrinsic size computation. For heights we need to |
+ // check whether the computed logical height is -1 or not to determine it. |
+ if (sizingOperation != IntrinsicSizeComputation || !isRowAxis) { |
+ if (isRowAxis) { |
Manuel Rego
2016/08/23 07:43:03
Just in case I was wrong in my previous comment,
I
svillar
2016/08/25 09:33:10
Acknowledged.
|
+ DCHECK_NE(sizingOperation, IntrinsicSizeComputation); |
jfernandez
2016/08/22 14:44:48
Wouldn't be clearer if we define the DCHECK like i
svillar
2016/08/22 16:01:52
I really don't get what you mean. Could you rephra
jfernandez
2016/08/22 16:20:20
I was mistaken, forget about this suggestion.
|
+ availableSize = availableLogicalWidth(); |
+ } else { |
+ availableSize = computeContentLogicalHeight(MainOrPreferredSize, styleRef().logicalHeight(), LayoutUnit(-1)); |
+ if (availableSize == -1) { |
+ const Length& maxLength = styleRef().logicalMaxHeight(); |
+ if (!maxLength.isMaxSizeNone()) |
+ availableSize = computeContentLogicalHeight(MaxSize, maxLength, LayoutUnit(-1)); |
+ } else { |
+ availableSize = constrainLogicalHeightByMinMax(availableSize, LayoutUnit(-1)); |
+ } |
} |
- } else { |
- availableSize = isRowAxis |
- ? constrainLogicalWidthByMinMax(availableSize, availableLogicalWidth(), containingBlock()) |
- : constrainLogicalHeightByMinMax(availableSize, LayoutUnit(-1)); |
} |
bool needsToFulfillMinimumSize = false; |
@@ -1491,15 +1495,19 @@ std::unique_ptr<LayoutGrid::OrderedTrackIndexSet> LayoutGrid::computeEmptyTracks |
return emptyTrackIndexes; |
} |
-void LayoutGrid::placeItemsOnGrid(size_t autoRepeatColumnsCount) |
+void LayoutGrid::placeItemsOnGrid(SizingOperation sizingOperation) |
{ |
if (!m_gridIsDirty) |
return; |
- ASSERT(m_gridItemArea.isEmpty()); |
+ DCHECK(m_gridItemArea.isEmpty()); |
+ DCHECK(m_gridItemsIndexesMap.isEmpty()); |
- m_autoRepeatColumns = autoRepeatColumnsCount; |
- m_autoRepeatRows = computeAutoRepeatTracksCount(ForRows); |
+ if (sizingOperation == IntrinsicSizeComputation) |
+ m_autoRepeatColumns = styleRef().gridAutoRepeatColumns().size(); |
+ else |
+ m_autoRepeatColumns = computeAutoRepeatTracksCount(ForColumns, sizingOperation); |
+ m_autoRepeatRows = computeAutoRepeatTracksCount(ForRows, sizingOperation); |
populateExplicitGridAndOrderIterator(); |