| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 718 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 729 { | 729 { |
| 730 return (direction == ForRows) ? coordinate.rows.integerSpan() : coordinate.c
olumns.integerSpan(); | 730 return (direction == ForRows) ? coordinate.rows.integerSpan() : coordinate.c
olumns.integerSpan(); |
| 731 } | 731 } |
| 732 | 732 |
| 733 void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio
n direction, GridSizingData& sizingData, LayoutUnit& availableLogicalSpace) | 733 void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio
n direction, GridSizingData& sizingData, LayoutUnit& availableLogicalSpace) |
| 734 { | 734 { |
| 735 sizingData.itemsSortedByIncreasingSpan.shrink(0); | 735 sizingData.itemsSortedByIncreasingSpan.shrink(0); |
| 736 HashSet<RenderBox*> itemsSet; | 736 HashSet<RenderBox*> itemsSet; |
| 737 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { | 737 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { |
| 738 GridIterator iterator(m_grid, direction, trackIndex); | 738 GridIterator iterator(m_grid, direction, trackIndex); |
| 739 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t
rackIndex] : sizingData.rowTracks[trackIndex]; |
| 739 while (RenderBox* gridItem = iterator.nextGridItem()) { | 740 while (RenderBox* gridItem = iterator.nextGridItem()) { |
| 740 if (itemsSet.add(gridItem).isNewEntry) { | 741 if (itemsSet.add(gridItem).isNewEntry) { |
| 741 const GridCoordinate& coordinate = cachedGridCoordinate(*gridIte
m); | 742 const GridCoordinate& coordinate = cachedGridCoordinate(*gridIte
m); |
| 742 // We should not include items spanning more than one track that
span tracks with flexible sizing functions. | 743 if (integerSpanForDirection(coordinate, direction) == 1) { |
| 743 if (integerSpanForDirection(coordinate, direction) == 1 || !span
ningItemCrossesFlexibleSizedTracks(coordinate, direction)) | 744 resolveContentBasedTrackSizingFunctionsForNonSpanningItems(d
irection, coordinate, *gridItem, track, sizingData.columnTracks); |
| 745 } else if (!spanningItemCrossesFlexibleSizedTracks(coordinate, d
irection)) { |
| 744 sizingData.itemsSortedByIncreasingSpan.append(GridItemWithSp
an(*gridItem, coordinate, direction)); | 746 sizingData.itemsSortedByIncreasingSpan.append(GridItemWithSp
an(*gridItem, coordinate, direction)); |
| 747 } |
| 745 } | 748 } |
| 746 } | 749 } |
| 747 } | 750 } |
| 748 std::sort(sizingData.itemsSortedByIncreasingSpan.begin(), sizingData.itemsSo
rtedByIncreasingSpan.end()); | 751 std::sort(sizingData.itemsSortedByIncreasingSpan.begin(), sizingData.itemsSo
rtedByIncreasingSpan.end()); |
| 749 | 752 |
| 750 Vector<GridItemWithSpan>::iterator end = sizingData.itemsSortedByIncreasingS
pan.end(); | 753 Vector<GridItemWithSpan>::iterator end = sizingData.itemsSortedByIncreasingS
pan.end(); |
| 751 for (Vector<GridItemWithSpan>::iterator it = sizingData.itemsSortedByIncreas
ingSpan.begin(); it != end; ++it) { | 754 for (Vector<GridItemWithSpan>::iterator it = sizingData.itemsSortedByIncreas
ingSpan.begin(); it != end; ++it) { |
| 752 GridItemWithSpan itemWithSpan = *it; | 755 GridItemWithSpan itemWithSpan = *it; |
| 753 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i
temWithSpan, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &RenderGrid::min
ContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth, &GridTrac
kSize::hasMinContentMinTrackBreadthAndMinOrMaxContentMaxTrackBreadth); | 756 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i
temWithSpan, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &RenderGrid::min
ContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth, &GridTrac
kSize::hasMinContentMinTrackBreadthAndMinOrMaxContentMaxTrackBreadth); |
| 754 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i
temWithSpan, &GridTrackSize::hasMaxContentMinTrackBreadth, &RenderGrid::maxConte
ntForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth, &GridTrackSize
::hasMaxContentMinTrackBreadthAndMaxContentMaxTrackBreadth); | 757 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i
temWithSpan, &GridTrackSize::hasMaxContentMinTrackBreadth, &RenderGrid::maxConte
ntForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth, &GridTrackSize
::hasMaxContentMinTrackBreadthAndMaxContentMaxTrackBreadth); |
| 755 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i
temWithSpan, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &RenderGrid::min
ContentForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth
); | 758 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i
temWithSpan, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &RenderGrid::min
ContentForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth
); |
| 756 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i
temWithSpan, &GridTrackSize::hasMaxContentMaxTrackBreadth, &RenderGrid::maxConte
ntForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth); | 759 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i
temWithSpan, &GridTrackSize::hasMaxContentMaxTrackBreadth, &RenderGrid::maxConte
ntForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth); |
| 757 } | 760 } |
| 758 | 761 |
| 759 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { | 762 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { |
| 760 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t
rackIndex] : sizingData.rowTracks[trackIndex]; | 763 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t
rackIndex] : sizingData.rowTracks[trackIndex]; |
| 761 if (track.m_maxBreadth == infinity) | 764 if (track.m_maxBreadth == infinity) |
| 762 track.m_maxBreadth = track.m_usedBreadth; | 765 track.m_maxBreadth = track.m_usedBreadth; |
| 763 } | 766 } |
| 764 } | 767 } |
| 765 | 768 |
| 769 void RenderGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems(Grid
TrackSizingDirection direction, const GridCoordinate& coordinate, RenderBox& gri
dItem, GridTrack& track, Vector<GridTrack>& columnTracks) |
| 770 { |
| 771 const GridResolvedPosition trackPosition = (direction == ForColumns) ? coord
inate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPosition; |
| 772 GridTrackSize trackSize = gridTrackSize(direction, trackPosition.toInt()); |
| 773 |
| 774 if (trackSize.hasMinContentMinTrackBreadth()) |
| 775 track.m_usedBreadth = std::max(track.m_usedBreadth, minContentForChild(g
ridItem, direction, columnTracks)); |
| 776 else if (trackSize.hasMaxContentMinTrackBreadth()) |
| 777 track.m_usedBreadth = std::max(track.m_usedBreadth, maxContentForChild(g
ridItem, direction, columnTracks)); |
| 778 |
| 779 if (trackSize.hasMinContentMaxTrackBreadth()) |
| 780 track.m_maxBreadth = std::max(track.m_maxBreadth, minContentForChild(gri
dItem, direction, columnTracks)); |
| 781 else if (trackSize.hasMaxContentMaxTrackBreadth()) |
| 782 track.m_maxBreadth = std::max(track.m_maxBreadth, maxContentForChild(gri
dItem, direction, columnTracks)); |
| 783 } |
| 784 |
| 766 void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizing
Direction direction, GridSizingData& sizingData, GridItemWithSpan& gridItemWithS
pan, FilterFunction filterFunction, SizingFunction sizingFunction, AccumulatorGe
tter trackGetter, AccumulatorGrowFunction trackGrowthFunction, FilterFunction gr
owAboveMaxBreadthFilterFunction) | 785 void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizing
Direction direction, GridSizingData& sizingData, GridItemWithSpan& gridItemWithS
pan, FilterFunction filterFunction, SizingFunction sizingFunction, AccumulatorGe
tter trackGetter, AccumulatorGrowFunction trackGrowthFunction, FilterFunction gr
owAboveMaxBreadthFilterFunction) |
| 767 { | 786 { |
| 768 const GridCoordinate coordinate = gridItemWithSpan.coordinate(); | 787 const GridCoordinate coordinate = gridItemWithSpan.coordinate(); |
| 769 const GridResolvedPosition initialTrackPosition = (direction == ForColumns)
? coordinate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPo
sition; | 788 const GridResolvedPosition initialTrackPosition = (direction == ForColumns)
? coordinate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPo
sition; |
| 770 const GridResolvedPosition finalTrackPosition = (direction == ForColumns) ?
coordinate.columns.resolvedFinalPosition : coordinate.rows.resolvedFinalPosition
; | 789 const GridResolvedPosition finalTrackPosition = (direction == ForColumns) ?
coordinate.columns.resolvedFinalPosition : coordinate.rows.resolvedFinalPosition
; |
| 771 | 790 |
| 772 sizingData.growAboveMaxBreadthTrackIndexes.shrink(0); | 791 sizingData.growAboveMaxBreadthTrackIndexes.shrink(0); |
| 773 sizingData.filteredTracks.shrink(0); | 792 sizingData.filteredTracks.shrink(0); |
| 774 for (GridResolvedPosition trackPosition = initialTrackPosition; trackPositio
n <= finalTrackPosition; ++trackPosition) { | 793 for (GridResolvedPosition trackPosition = initialTrackPosition; trackPositio
n <= finalTrackPosition; ++trackPosition) { |
| 775 GridTrackSize trackSize = gridTrackSize(direction, trackPosition.toInt()
); | 794 GridTrackSize trackSize = gridTrackSize(direction, trackPosition.toInt()
); |
| (...skipping 902 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1678 if (isOutOfFlowPositioned()) | 1697 if (isOutOfFlowPositioned()) |
| 1679 return "RenderGrid (positioned)"; | 1698 return "RenderGrid (positioned)"; |
| 1680 if (isAnonymous()) | 1699 if (isAnonymous()) |
| 1681 return "RenderGrid (generated)"; | 1700 return "RenderGrid (generated)"; |
| 1682 if (isRelPositioned()) | 1701 if (isRelPositioned()) |
| 1683 return "RenderGrid (relative positioned)"; | 1702 return "RenderGrid (relative positioned)"; |
| 1684 return "RenderGrid"; | 1703 return "RenderGrid"; |
| 1685 } | 1704 } |
| 1686 | 1705 |
| 1687 } // namespace blink | 1706 } // namespace blink |
| OLD | NEW |