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 750 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
761 { | 761 { |
762 return (direction == ForRows) ? coordinate.rows.integerSpan() : coordinate.c olumns.integerSpan(); | 762 return (direction == ForRows) ? coordinate.rows.integerSpan() : coordinate.c olumns.integerSpan(); |
763 } | 763 } |
764 | 764 |
765 void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio n direction, GridSizingData& sizingData, LayoutUnit& availableLogicalSpace) | 765 void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio n direction, GridSizingData& sizingData, LayoutUnit& availableLogicalSpace) |
766 { | 766 { |
767 sizingData.itemsSortedByIncreasingSpan.shrink(0); | 767 sizingData.itemsSortedByIncreasingSpan.shrink(0); |
768 HashSet<RenderBox*> itemsSet; | 768 HashSet<RenderBox*> itemsSet; |
769 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { | 769 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { |
770 GridIterator iterator(m_grid, direction, trackIndex); | 770 GridIterator iterator(m_grid, direction, trackIndex); |
771 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t rackIndex] : sizingData.rowTracks[trackIndex]; | |
771 while (RenderBox* gridItem = iterator.nextGridItem()) { | 772 while (RenderBox* gridItem = iterator.nextGridItem()) { |
772 if (itemsSet.add(gridItem).isNewEntry) { | 773 if (itemsSet.add(gridItem).isNewEntry) { |
773 const GridCoordinate& coordinate = cachedGridCoordinate(*gridIte m); | 774 const GridCoordinate& coordinate = cachedGridCoordinate(*gridIte m); |
774 // We should not include items spanning more than one track that span tracks with flexible sizing functions. | 775 if (integerSpanForDirection(coordinate, direction) == 1) { |
775 if (integerSpanForDirection(coordinate, direction) == 1 || !span ningItemCrossesFlexibleSizedTracks(coordinate, direction)) | 776 resolveContentBasedTrackSizingFunctionsForNonSpanningItems(d irection, coordinate, *gridItem, track, sizingData.columnTracks); |
777 } else if (!spanningItemCrossesFlexibleSizedTracks(coordinate, d irection)) { | |
776 sizingData.itemsSortedByIncreasingSpan.append(GridItemWithSp an(*gridItem, coordinate, direction)); | 778 sizingData.itemsSortedByIncreasingSpan.append(GridItemWithSp an(*gridItem, coordinate, direction)); |
779 } | |
777 } | 780 } |
778 } | 781 } |
779 } | 782 } |
780 std::sort(sizingData.itemsSortedByIncreasingSpan.begin(), sizingData.itemsSo rtedByIncreasingSpan.end()); | 783 std::sort(sizingData.itemsSortedByIncreasingSpan.begin(), sizingData.itemsSo rtedByIncreasingSpan.end()); |
781 | 784 |
782 Vector<GridItemWithSpan>::iterator end = sizingData.itemsSortedByIncreasingS pan.end(); | 785 Vector<GridItemWithSpan>::iterator end = sizingData.itemsSortedByIncreasingS pan.end(); |
783 for (Vector<GridItemWithSpan>::iterator it = sizingData.itemsSortedByIncreas ingSpan.begin(); it != end; ++it) { | 786 for (Vector<GridItemWithSpan>::iterator it = sizingData.itemsSortedByIncreas ingSpan.begin(); it != end; ++it) { |
784 GridItemWithSpan itemWithSpan = *it; | 787 GridItemWithSpan itemWithSpan = *it; |
785 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &RenderGrid::min ContentForChild, &GridTrack::baseSize, &GridTrack::growBaseSize, &GridTrackSize: :hasMinContentMinTrackBreadthAndMinOrMaxContentMaxTrackBreadth); | 788 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &RenderGrid::min ContentForChild, &GridTrack::baseSize, &GridTrack::growBaseSize, &GridTrackSize: :hasMinContentMinTrackBreadthAndMinOrMaxContentMaxTrackBreadth); |
786 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMaxContentMinTrackBreadth, &RenderGrid::maxConte ntForChild, &GridTrack::baseSize, &GridTrack::growBaseSize, &GridTrackSize::hasM axContentMinTrackBreadthAndMaxContentMaxTrackBreadth); | 789 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMaxContentMinTrackBreadth, &RenderGrid::maxConte ntForChild, &GridTrack::baseSize, &GridTrack::growBaseSize, &GridTrackSize::hasM axContentMinTrackBreadthAndMaxContentMaxTrackBreadth); |
787 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &RenderGrid::min ContentForChild, &GridTrack::growthLimitIfNotInfinite, &GridTrack::growGrowthLim it); | 790 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &RenderGrid::min ContentForChild, &GridTrack::growthLimitIfNotInfinite, &GridTrack::growGrowthLim it); |
788 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMaxContentMaxTrackBreadth, &RenderGrid::maxConte ntForChild, &GridTrack::growthLimitIfNotInfinite, &GridTrack::growGrowthLimit); | 791 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMaxContentMaxTrackBreadth, &RenderGrid::maxConte ntForChild, &GridTrack::growthLimitIfNotInfinite, &GridTrack::growGrowthLimit); |
789 } | 792 } |
790 | 793 |
791 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { | 794 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { |
792 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t rackIndex] : sizingData.rowTracks[trackIndex]; | 795 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t rackIndex] : sizingData.rowTracks[trackIndex]; |
793 if (track.growthLimitIsInfinite()) | 796 if (track.growthLimitIsInfinite()) |
794 track.setGrowthLimit(track.baseSize()); | 797 track.setGrowthLimit(track.baseSize()); |
795 } | 798 } |
796 } | 799 } |
797 | 800 |
801 void RenderGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems(Grid TrackSizingDirection direction, const GridCoordinate& coordinate, RenderBox& gri dItem, GridTrack& track, Vector<GridTrack>& columnTracks) | |
802 { | |
803 const GridResolvedPosition trackPosition = (direction == ForColumns) ? coord inate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPosition; | |
804 GridTrackSize trackSize = gridTrackSize(direction, trackPosition.toInt()); | |
805 | |
806 if (trackSize.hasMinContentMinTrackBreadth()) | |
807 track.setBaseSize(std::max(track.baseSize(), minContentForChild(gridItem , direction, columnTracks))); | |
808 else if (trackSize.hasMaxContentMinTrackBreadth()) | |
809 track.setBaseSize(std::max(track.baseSize(), maxContentForChild(gridItem , direction, columnTracks))); | |
810 | |
811 if (trackSize.hasMinContentMaxTrackBreadth()) | |
812 track.setGrowthLimit(std::max(track.growthLimit(), minContentForChild(gr idItem, direction, columnTracks))); | |
813 else if (trackSize.hasMaxContentMaxTrackBreadth()) | |
814 track.setGrowthLimit(std::max(track.growthLimit(), maxContentForChild(gr idItem, direction, columnTracks))); | |
815 } | |
816 | |
798 void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizing Direction direction, GridSizingData& sizingData, GridItemWithSpan& gridItemWithS pan, FilterFunction filterFunction, SizingFunction sizingFunction, AccumulatorGe tter trackGetter, AccumulatorGrowFunction trackGrowthFunction, FilterFunction gr owAboveMaxBreadthFilterFunction) | 817 void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizing Direction direction, GridSizingData& sizingData, GridItemWithSpan& gridItemWithS pan, FilterFunction filterFunction, SizingFunction sizingFunction, AccumulatorGe tter trackGetter, AccumulatorGrowFunction trackGrowthFunction, FilterFunction gr owAboveMaxBreadthFilterFunction) |
799 { | 818 { |
800 const GridCoordinate coordinate = gridItemWithSpan.coordinate(); | 819 const GridCoordinate coordinate = gridItemWithSpan.coordinate(); |
Julien - ping for review
2015/01/14 09:59:28
Shouldn't we put an ASSERT that no item spanning a
svillar
2015/01/14 10:11:56
Acknowledged.
| |
801 const GridResolvedPosition initialTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPo sition; | 820 const GridResolvedPosition initialTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPo sition; |
802 const GridResolvedPosition finalTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedFinalPosition : coordinate.rows.resolvedFinalPosition ; | 821 const GridResolvedPosition finalTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedFinalPosition : coordinate.rows.resolvedFinalPosition ; |
803 | 822 |
804 sizingData.growAboveMaxBreadthTrackIndexes.shrink(0); | 823 sizingData.growAboveMaxBreadthTrackIndexes.shrink(0); |
805 sizingData.filteredTracks.shrink(0); | 824 sizingData.filteredTracks.shrink(0); |
806 for (GridResolvedPosition trackPosition = initialTrackPosition; trackPositio n <= finalTrackPosition; ++trackPosition) { | 825 for (GridResolvedPosition trackPosition = initialTrackPosition; trackPositio n <= finalTrackPosition; ++trackPosition) { |
807 GridTrackSize trackSize = gridTrackSize(direction, trackPosition.toInt() ); | 826 GridTrackSize trackSize = gridTrackSize(direction, trackPosition.toInt() ); |
808 if (!(trackSize.*filterFunction)()) | 827 if (!(trackSize.*filterFunction)()) |
809 continue; | 828 continue; |
810 | 829 |
(...skipping 904 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1715 if (isOutOfFlowPositioned()) | 1734 if (isOutOfFlowPositioned()) |
1716 return "RenderGrid (positioned)"; | 1735 return "RenderGrid (positioned)"; |
1717 if (isAnonymous()) | 1736 if (isAnonymous()) |
1718 return "RenderGrid (generated)"; | 1737 return "RenderGrid (generated)"; |
1719 if (isRelPositioned()) | 1738 if (isRelPositioned()) |
1720 return "RenderGrid (relative positioned)"; | 1739 return "RenderGrid (relative positioned)"; |
1721 return "RenderGrid"; | 1740 return "RenderGrid"; |
1722 } | 1741 } |
1723 | 1742 |
1724 } // namespace blink | 1743 } // namespace blink |
OLD | NEW |