Chromium Code Reviews| 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 |