|
Lines 736-744
void GridTrackSizingAlgorithm::computeGridContainerIntrinsicSizes()
a/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp_sec1
|
| 736 |
|
736 |
|
| 737 |
Vector<GridTrack>& allTracks = tracks(m_direction); |
737 |
Vector<GridTrack>& allTracks = tracks(m_direction); |
| 738 |
for (auto& track : allTracks) { |
738 |
for (auto& track : allTracks) { |
| 739 |
ASSERT(!track.infiniteGrowthPotential()); |
739 |
ASSERT(m_strategy->isComputingSizeContainment() || !track.infiniteGrowthPotential()); |
| 740 |
m_minContentSize += track.baseSize(); |
740 |
m_minContentSize += track.baseSize(); |
| 741 |
m_maxContentSize += track.growthLimit(); |
741 |
m_maxContentSize += track.growthLimitIsInfinite() ? track.baseSize() : track.growthLimit(); |
| 742 |
// The growth limit caps must be cleared now in order to properly sort |
742 |
// The growth limit caps must be cleared now in order to properly sort |
| 743 |
// tracks by growth potential on an eventual "Maximize Tracks". |
743 |
// tracks by growth potential on an eventual "Maximize Tracks". |
| 744 |
track.setGrowthLimitCap(WTF::nullopt); |
744 |
track.setGrowthLimitCap(WTF::nullopt); |
|
Lines 932-937
private:
a/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp_sec2
|
| 932 |
double findUsedFlexFraction(Vector<unsigned>& flexibleSizedTracksIndex, GridTrackSizingDirection, Optional<LayoutUnit> freeSpace) const override; |
932 |
double findUsedFlexFraction(Vector<unsigned>& flexibleSizedTracksIndex, GridTrackSizingDirection, Optional<LayoutUnit> freeSpace) const override; |
| 933 |
bool recomputeUsedFlexFractionIfNeeded(double& flexFraction, LayoutUnit& totalGrowth) const override; |
933 |
bool recomputeUsedFlexFractionIfNeeded(double& flexFraction, LayoutUnit& totalGrowth) const override; |
| 934 |
LayoutUnit freeSpaceForStretchAutoTracksStep() const override; |
934 |
LayoutUnit freeSpaceForStretchAutoTracksStep() const override; |
|
|
935 |
bool isComputingSizeContainment() const override { return renderGrid()->shouldApplySizeContainment(); } |
| 935 |
}; |
936 |
}; |
| 936 |
|
937 |
|
| 937 |
void IndefiniteSizeStrategy::layoutGridItemForMinSizeComputation(RenderBox& child, bool overrideSizeHasChanged) const |
938 |
void IndefiniteSizeStrategy::layoutGridItemForMinSizeComputation(RenderBox& child, bool overrideSizeHasChanged) const |
|
Lines 1030-1035
private:
a/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp_sec3
|
| 1030 |
LayoutUnit freeSpaceForStretchAutoTracksStep() const override; |
1031 |
LayoutUnit freeSpaceForStretchAutoTracksStep() const override; |
| 1031 |
LayoutUnit minContentForChild(RenderBox&) const override; |
1032 |
LayoutUnit minContentForChild(RenderBox&) const override; |
| 1032 |
LayoutUnit minLogicalSizeForChild(RenderBox&, const Length& childMinSize, Optional<LayoutUnit> availableSize) const override; |
1033 |
LayoutUnit minLogicalSizeForChild(RenderBox&, const Length& childMinSize, Optional<LayoutUnit> availableSize) const override; |
|
|
1034 |
bool isComputingSizeContainment() const override { return false; } |
| 1033 |
}; |
1035 |
}; |
| 1034 |
|
1036 |
|
| 1035 |
LayoutUnit IndefiniteSizeStrategy::freeSpaceForStretchAutoTracksStep() const |
1037 |
LayoutUnit IndefiniteSizeStrategy::freeSpaceForStretchAutoTracksStep() const |
|
Lines 1146-1182
void GridTrackSizingAlgorithm::initializeTrackSizes()
a/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp_sec4
|
| 1146 |
|
1148 |
|
| 1147 |
void GridTrackSizingAlgorithm::resolveIntrinsicTrackSizes() |
1149 |
void GridTrackSizingAlgorithm::resolveIntrinsicTrackSizes() |
| 1148 |
{ |
1150 |
{ |
| 1149 |
Vector<GridItemWithSpan> itemsSortedByIncreasingSpan; |
|
|
| 1150 |
HashSet<RenderBox*> itemsSet; |
| 1151 |
Vector<GridTrack>& allTracks = tracks(m_direction); |
1151 |
Vector<GridTrack>& allTracks = tracks(m_direction); |
| 1152 |
if (m_grid.hasGridItems()) { |
1152 |
if (!m_strategy->isComputingSizeContainment()) { |
| 1153 |
for (auto trackIndex : m_contentSizedTracksIndex) { |
1153 |
Vector<GridItemWithSpan> itemsSortedByIncreasingSpan; |
| 1154 |
GridIterator iterator(m_grid, m_direction, trackIndex); |
1154 |
HashSet<RenderBox*> itemsSet; |
| 1155 |
GridTrack& track = allTracks[trackIndex]; |
1155 |
if (m_grid.hasGridItems()) { |
| 1156 |
|
1156 |
for (auto trackIndex : m_contentSizedTracksIndex) { |
| 1157 |
while (auto* gridItem = iterator.nextGridItem()) { |
1157 |
GridIterator iterator(m_grid, m_direction, trackIndex); |
| 1158 |
if (itemsSet.add(gridItem).isNewEntry) { |
1158 |
GridTrack& track = allTracks[trackIndex]; |
| 1159 |
const GridSpan& span = m_grid.gridItemSpan(*gridItem, m_direction); |
1159 |
|
| 1160 |
if (span.integerSpan() == 1) |
1160 |
while (auto* gridItem = iterator.nextGridItem()) { |
| 1161 |
sizeTrackToFitNonSpanningItem(span, *gridItem, track); |
1161 |
if (itemsSet.add(gridItem).isNewEntry) { |
| 1162 |
else if (!spanningItemCrossesFlexibleSizedTracks(span)) |
1162 |
const GridSpan& span = m_grid.gridItemSpan(*gridItem, m_direction); |
| 1163 |
itemsSortedByIncreasingSpan.append(GridItemWithSpan(*gridItem, span)); |
1163 |
if (span.integerSpan() == 1) |
|
|
1164 |
sizeTrackToFitNonSpanningItem(span, *gridItem, track); |
| 1165 |
else if (!spanningItemCrossesFlexibleSizedTracks(span)) |
| 1166 |
itemsSortedByIncreasingSpan.append(GridItemWithSpan(*gridItem, span)); |
| 1167 |
} |
| 1164 |
} |
1168 |
} |
| 1165 |
} |
1169 |
} |
|
|
1170 |
std::sort(itemsSortedByIncreasingSpan.begin(), itemsSortedByIncreasingSpan.end()); |
| 1166 |
} |
1171 |
} |
| 1167 |
std::sort(itemsSortedByIncreasingSpan.begin(), itemsSortedByIncreasingSpan.end()); |
|
|
| 1168 |
} |
| 1169 |
|
1172 |
|
| 1170 |
auto it = itemsSortedByIncreasingSpan.begin(); |
1173 |
auto it = itemsSortedByIncreasingSpan.begin(); |
| 1171 |
auto end = itemsSortedByIncreasingSpan.end(); |
1174 |
auto end = itemsSortedByIncreasingSpan.end(); |
| 1172 |
while (it != end) { |
1175 |
while (it != end) { |
| 1173 |
GridItemsSpanGroupRange spanGroupRange = { it, std::upper_bound(it, end, *it) }; |
1176 |
GridItemsSpanGroupRange spanGroupRange = { it, std::upper_bound(it, end, *it) }; |
| 1174 |
increaseSizesToAccommodateSpanningItems<ResolveIntrinsicMinimums>(spanGroupRange); |
1177 |
increaseSizesToAccommodateSpanningItems<ResolveIntrinsicMinimums>(spanGroupRange); |
| 1175 |
increaseSizesToAccommodateSpanningItems<ResolveContentBasedMinimums>(spanGroupRange); |
1178 |
increaseSizesToAccommodateSpanningItems<ResolveContentBasedMinimums>(spanGroupRange); |
| 1176 |
increaseSizesToAccommodateSpanningItems<ResolveMaxContentMinimums>(spanGroupRange); |
1179 |
increaseSizesToAccommodateSpanningItems<ResolveMaxContentMinimums>(spanGroupRange); |
| 1177 |
increaseSizesToAccommodateSpanningItems<ResolveIntrinsicMaximums>(spanGroupRange); |
1180 |
increaseSizesToAccommodateSpanningItems<ResolveIntrinsicMaximums>(spanGroupRange); |
| 1178 |
increaseSizesToAccommodateSpanningItems<ResolveMaxContentMaximums>(spanGroupRange); |
1181 |
increaseSizesToAccommodateSpanningItems<ResolveMaxContentMaximums>(spanGroupRange); |
| 1179 |
it = spanGroupRange.rangeEnd; |
1182 |
it = spanGroupRange.rangeEnd; |
|
|
1183 |
} |
| 1180 |
} |
1184 |
} |
| 1181 |
|
1185 |
|
| 1182 |
for (auto trackIndex : m_contentSizedTracksIndex) { |
1186 |
for (auto trackIndex : m_contentSizedTracksIndex) { |
|
Lines 1239-1245
void GridTrackSizingAlgorithm::advanceNextState()
a/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp_sec5
|
| 1239 |
m_sizingState = RowSizingFirstIteration; |
1243 |
m_sizingState = RowSizingFirstIteration; |
| 1240 |
return; |
1244 |
return; |
| 1241 |
case RowSizingFirstIteration: |
1245 |
case RowSizingFirstIteration: |
| 1242 |
m_sizingState = ColumnSizingSecondIteration; |
1246 |
if (!m_strategy->isComputingSizeContainment()) |
|
|
1247 |
m_sizingState = ColumnSizingSecondIteration; |
| 1243 |
return; |
1248 |
return; |
| 1244 |
case ColumnSizingSecondIteration: |
1249 |
case ColumnSizingSecondIteration: |
| 1245 |
m_sizingState = RowSizingSecondIteration; |
1250 |
m_sizingState = RowSizingSecondIteration; |
|
Lines 1346-1351
void GridTrackSizingAlgorithm::run()
a/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp_sec6
|
| 1346 |
|
1351 |
|
| 1347 |
// Step 3. |
1352 |
// Step 3. |
| 1348 |
m_strategy->maximizeTracks(tracks(m_direction), m_direction == ForColumns ? m_freeSpaceColumns : m_freeSpaceRows); |
1353 |
m_strategy->maximizeTracks(tracks(m_direction), m_direction == ForColumns ? m_freeSpaceColumns : m_freeSpaceRows); |
|
|
1354 |
if (m_strategy->isComputingSizeContainment()) |
| 1355 |
return; |
| 1349 |
|
1356 |
|
| 1350 |
// Step 4. |
1357 |
// Step 4. |
| 1351 |
stretchFlexibleTracks(initialFreeSpace); |
1358 |
stretchFlexibleTracks(initialFreeSpace); |