Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Side by Side Diff: Source/core/layout/LayoutGrid.cpp

Issue 1079563002: [CSS Grid Layout] Replace the usage of pointers to functions (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Moved helpers to blink namespace Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/layout/LayoutGrid.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 m_flex = o.m_flex; 132 m_flex = o.m_flex;
133 m_normalizedFlexValue = o.m_normalizedFlexValue; 133 m_normalizedFlexValue = o.m_normalizedFlexValue;
134 return *this; 134 return *this;
135 } 135 }
136 136
137 const GridTrack* m_track; 137 const GridTrack* m_track;
138 double m_flex; 138 double m_flex;
139 LayoutUnit m_normalizedFlexValue; 139 LayoutUnit m_normalizedFlexValue;
140 }; 140 };
141 141
142 enum TrackSizeRestriction {
143 AllowInfinity,
144 ForbidInfinity,
145 };
146
142 class LayoutGrid::GridIterator { 147 class LayoutGrid::GridIterator {
143 WTF_MAKE_NONCOPYABLE(GridIterator); 148 WTF_MAKE_NONCOPYABLE(GridIterator);
144 public: 149 public:
145 // |direction| is the direction that is fixed to |fixedTrackIndex| so e.g 150 // |direction| is the direction that is fixed to |fixedTrackIndex| so e.g
146 // GridIterator(m_grid, ForColumns, 1) will walk over the rows of the 2nd co lumn. 151 // GridIterator(m_grid, ForColumns, 1) will walk over the rows of the 2nd co lumn.
147 GridIterator(const GridRepresentation& grid, GridTrackSizingDirection direct ion, size_t fixedTrackIndex, size_t varyingTrackIndex = 0) 152 GridIterator(const GridRepresentation& grid, GridTrackSizingDirection direct ion, size_t fixedTrackIndex, size_t varyingTrackIndex = 0)
148 : m_grid(grid) 153 : m_grid(grid)
149 , m_direction(direction) 154 , m_direction(direction)
150 , m_rowIndex((direction == ForColumns) ? varyingTrackIndex : fixedTrackI ndex) 155 , m_rowIndex((direction == ForColumns) ? varyingTrackIndex : fixedTrackI ndex)
151 , m_columnIndex((direction == ForColumns) ? fixedTrackIndex : varyingTra ckIndex) 156 , m_columnIndex((direction == ForColumns) ? fixedTrackIndex : varyingTra ckIndex)
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 } 460 }
456 461
457 Vector<GridTrack*> tracksToStretch(sizingData.contentSizedTracksIndex.si ze()); 462 Vector<GridTrack*> tracksToStretch(sizingData.contentSizedTracksIndex.si ze());
458 if (needToStretch) { 463 if (needToStretch) {
459 unsigned i = 0; 464 unsigned i = 0;
460 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { 465 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) {
461 tracksToStretch[i++] = tracks.data() + trackIndex; 466 tracksToStretch[i++] = tracks.data() + trackIndex;
462 } 467 }
463 } 468 }
464 469
465 distributeSpaceToTracks(tracksForDistribution, needToStretch ? &tracksTo Stretch : nullptr, &GridTrack::baseSize, sizingData, freeSpace); 470 distributeSpaceToTracks<MaximizeTracks>(tracksForDistribution, needToStr etch ? &tracksToStretch : nullptr, sizingData, freeSpace);
466 471
467 for (auto* track : tracksForDistribution) 472 for (auto* track : tracksForDistribution)
468 track->growBaseSize(track->m_plannedIncrease); 473 track->growBaseSize(track->m_plannedIncrease);
469 } else { 474 } else {
470 for (auto& track : tracks) 475 for (auto& track : tracks)
471 track.setBaseSize(track.growthLimit()); 476 track.setBaseSize(track.growthLimit());
472 } 477 }
473 478
474 if (flexibleSizedTracksIndex.isEmpty()) 479 if (flexibleSizedTracksIndex.isEmpty())
475 return; 480 return;
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 } 760 }
756 } 761 }
757 } 762 }
758 } 763 }
759 std::sort(sizingData.itemsSortedByIncreasingSpan.begin(), sizingData.itemsSo rtedByIncreasingSpan.end()); 764 std::sort(sizingData.itemsSortedByIncreasingSpan.begin(), sizingData.itemsSo rtedByIncreasingSpan.end());
760 765
761 auto it = sizingData.itemsSortedByIncreasingSpan.begin(); 766 auto it = sizingData.itemsSortedByIncreasingSpan.begin();
762 auto end = sizingData.itemsSortedByIncreasingSpan.end(); 767 auto end = sizingData.itemsSortedByIncreasingSpan.end();
763 while (it != end) { 768 while (it != end) {
764 GridItemsSpanGroupRange spanGroupRange = { it, std::upper_bound(it, end, *it) }; 769 GridItemsSpanGroupRange spanGroupRange = { it, std::upper_bound(it, end, *it) };
765 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, s panGroupRange, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &LayoutGrid::m inContentForChild, &GridTrack::baseSize, &GridTrack::growBaseSize, &GridTrackSiz e::hasMinContentMinTrackBreadthAndMinOrMaxContentMaxTrackBreadth); 770 resolveContentBasedTrackSizingFunctionsForItems<ResolveIntrinsicMinimums >(direction, sizingData, spanGroupRange);
766 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, s panGroupRange, &GridTrackSize::hasMaxContentMinTrackBreadth, &LayoutGrid::maxCon tentForChild, &GridTrack::baseSize, &GridTrack::growBaseSize, &GridTrackSize::ha sMaxContentMinTrackBreadthAndMaxContentMaxTrackBreadth); 771 resolveContentBasedTrackSizingFunctionsForItems<ResolveMaxContentMinimum s>(direction, sizingData, spanGroupRange);
767 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, s panGroupRange, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &LayoutGrid::m inContentForChild, &GridTrack::growthLimitIfNotInfinite, &GridTrack::growGrowthL imit); 772 resolveContentBasedTrackSizingFunctionsForItems<ResolveIntrinsicMaximums >(direction, sizingData, spanGroupRange);
768 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, s panGroupRange, &GridTrackSize::hasMaxContentMaxTrackBreadth, &LayoutGrid::maxCon tentForChild, &GridTrack::growthLimitIfNotInfinite, &GridTrack::growGrowthLimit) ; 773 resolveContentBasedTrackSizingFunctionsForItems<ResolveMaxContentMaximum s>(direction, sizingData, spanGroupRange);
769 it = spanGroupRange.rangeEnd; 774 it = spanGroupRange.rangeEnd;
770 } 775 }
771 776
772 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { 777 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) {
773 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t rackIndex] : sizingData.rowTracks[trackIndex]; 778 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t rackIndex] : sizingData.rowTracks[trackIndex];
774 if (track.growthLimitIsInfinite()) 779 if (track.growthLimitIsInfinite())
775 track.setGrowthLimit(track.baseSize()); 780 track.setGrowthLimit(track.baseSize());
776 } 781 }
777 } 782 }
778 783
779 void LayoutGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems(Grid TrackSizingDirection direction, const GridCoordinate& coordinate, LayoutBox& gri dItem, GridTrack& track, Vector<GridTrack>& columnTracks) 784 void LayoutGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems(Grid TrackSizingDirection direction, const GridCoordinate& coordinate, LayoutBox& gri dItem, GridTrack& track, Vector<GridTrack>& columnTracks)
780 { 785 {
781 const GridResolvedPosition trackPosition = (direction == ForColumns) ? coord inate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPosition; 786 const GridResolvedPosition trackPosition = (direction == ForColumns) ? coord inate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPosition;
782 GridTrackSize trackSize = gridTrackSize(direction, trackPosition.toInt()); 787 GridTrackSize trackSize = gridTrackSize(direction, trackPosition.toInt());
783 788
784 if (trackSize.hasMinContentMinTrackBreadth()) 789 if (trackSize.hasMinContentMinTrackBreadth())
785 track.setBaseSize(std::max(track.baseSize(), minContentForChild(gridItem , direction, columnTracks))); 790 track.setBaseSize(std::max(track.baseSize(), minContentForChild(gridItem , direction, columnTracks)));
786 else if (trackSize.hasMaxContentMinTrackBreadth()) 791 else if (trackSize.hasMaxContentMinTrackBreadth())
787 track.setBaseSize(std::max(track.baseSize(), maxContentForChild(gridItem , direction, columnTracks))); 792 track.setBaseSize(std::max(track.baseSize(), maxContentForChild(gridItem , direction, columnTracks)));
788 793
789 if (trackSize.hasMinContentMaxTrackBreadth()) 794 if (trackSize.hasMinContentMaxTrackBreadth())
790 track.setGrowthLimit(std::max(track.growthLimit(), minContentForChild(gr idItem, direction, columnTracks))); 795 track.setGrowthLimit(std::max(track.growthLimit(), minContentForChild(gr idItem, direction, columnTracks)));
791 else if (trackSize.hasMaxContentMaxTrackBreadth()) 796 else if (trackSize.hasMaxContentMaxTrackBreadth())
792 track.setGrowthLimit(std::max(track.growthLimit(), maxContentForChild(gr idItem, direction, columnTracks))); 797 track.setGrowthLimit(std::max(track.growthLimit(), maxContentForChild(gr idItem, direction, columnTracks)));
793 } 798 }
794 799
795 void LayoutGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizing Direction direction, GridSizingData& sizingData, const GridItemsSpanGroupRange& gridItemsWithSpan, FilterFunction filterFunction, SizingFunction sizingFunction, AccumulatorGetter trackGetter, AccumulatorGrowFunction trackGrowthFunction, Fil terFunction growAboveMaxBreadthFilterFunction) 800 static const LayoutUnit& trackSizeForTrackSizeComputationPhase(TrackSizeComputat ionPhase phase, const GridTrack& track, TrackSizeRestriction restriction)
801 {
802 switch (phase) {
803 case ResolveIntrinsicMinimums:
804 case ResolveMaxContentMinimums:
805 case MaximizeTracks:
806 return track.baseSize();
807 break;
808 case ResolveIntrinsicMaximums:
809 case ResolveMaxContentMaximums:
810 return restriction == AllowInfinity ? track.growthLimit() : track.growth LimitIfNotInfinite();
811 break;
812 }
813
814 ASSERT_NOT_REACHED();
815 return track.baseSize();
816 }
817
818 static bool shouldProcessTrackForTrackSizeComputationPhase(TrackSizeComputationP hase phase, const GridTrackSize& trackSize)
819 {
820 switch (phase) {
821 case ResolveIntrinsicMinimums:
822 return trackSize.hasMinOrMaxContentMinTrackBreadth();
823 case ResolveMaxContentMinimums:
824 return trackSize.hasMaxContentMinTrackBreadth();
825 case ResolveIntrinsicMaximums:
826 return trackSize.hasMinOrMaxContentMaxTrackBreadth();
827 case ResolveMaxContentMaximums:
828 return trackSize.hasMaxContentMaxTrackBreadth();
829 case MaximizeTracks:
830 ASSERT_NOT_REACHED();
831 return false;
832 }
833
834 ASSERT_NOT_REACHED();
835 return false;
836 }
837
838 static bool trackShouldGrowBeyondGrowthLimitsForTrackSizeComputationPhase(TrackS izeComputationPhase phase, const GridTrackSize& trackSize)
839 {
840 switch (phase) {
841 case ResolveIntrinsicMinimums:
842 return trackSize.hasMinContentMinTrackBreadthAndMinOrMaxContentMaxTrackB readth();
843 case ResolveMaxContentMinimums:
844 return trackSize.hasMaxContentMinTrackBreadthAndMaxContentMaxTrackBreadt h();
845 case ResolveIntrinsicMaximums:
846 case ResolveMaxContentMaximums:
847 return true;
848 case MaximizeTracks:
849 ASSERT_NOT_REACHED();
850 return false;
851 }
852
853 ASSERT_NOT_REACHED();
854 return false;
855 }
856
857 static void updateTrackSizeForTrackSizeComputationPhase(TrackSizeComputationPhas e phase, GridTrack& track)
858 {
859 switch (phase) {
860 case ResolveIntrinsicMinimums:
861 case ResolveMaxContentMinimums:
862 track.growBaseSize(track.m_plannedIncrease);
863 return;
864 case ResolveIntrinsicMaximums:
865 case ResolveMaxContentMaximums:
866 track.growGrowthLimit(track.m_plannedIncrease);
867 return;
868 case MaximizeTracks:
869 ASSERT_NOT_REACHED();
870 return;
871 }
872
873 ASSERT_NOT_REACHED();
874 }
875
876 LayoutUnit LayoutGrid::currentItemSizeForTrackSizeComputationPhase(TrackSizeComp utationPhase phase, LayoutBox& gridItem, GridTrackSizingDirection direction, Vec tor<GridTrack>& columnTracks)
877 {
878 switch (phase) {
879 case ResolveIntrinsicMinimums:
880 case ResolveIntrinsicMaximums:
881 return minContentForChild(gridItem, direction, columnTracks);
882 case ResolveMaxContentMinimums:
883 case ResolveMaxContentMaximums:
884 return maxContentForChild(gridItem, direction, columnTracks);
885 case MaximizeTracks:
886 ASSERT_NOT_REACHED();
887 return 0;
888 }
889
890 ASSERT_NOT_REACHED();
891 return 0;
892 }
893
894 template <TrackSizeComputationPhase phase>
895 void LayoutGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizing Direction direction, GridSizingData& sizingData, const GridItemsSpanGroupRange& gridItemsWithSpan)
796 { 896 {
797 Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTra cks : sizingData.rowTracks; 897 Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTra cks : sizingData.rowTracks;
798 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) 898 for (const auto& trackIndex : sizingData.contentSizedTracksIndex)
799 tracks[trackIndex].m_plannedIncrease = 0; 899 tracks[trackIndex].m_plannedIncrease = 0;
800 900
801 for (auto it = gridItemsWithSpan.rangeStart; it != gridItemsWithSpan.rangeEn d; ++it) { 901 for (auto it = gridItemsWithSpan.rangeStart; it != gridItemsWithSpan.rangeEn d; ++it) {
802 GridItemWithSpan& gridItemWithSpan = *it; 902 GridItemWithSpan& gridItemWithSpan = *it;
803 ASSERT(gridItemWithSpan.span() > 1); 903 ASSERT(gridItemWithSpan.span() > 1);
804 const GridCoordinate coordinate = gridItemWithSpan.coordinate(); 904 const GridCoordinate coordinate = gridItemWithSpan.coordinate();
805 const GridSpan& itemSpan = (direction == ForColumns) ? coordinate.column s : coordinate.rows; 905 const GridSpan& itemSpan = (direction == ForColumns) ? coordinate.column s : coordinate.rows;
806 906
807 sizingData.growBeyondGrowthLimitsTracks.shrink(0); 907 sizingData.growBeyondGrowthLimitsTracks.shrink(0);
808 sizingData.filteredTracks.shrink(0); 908 sizingData.filteredTracks.shrink(0);
809 LayoutUnit spanningTracksSize; 909 LayoutUnit spanningTracksSize;
810 for (const auto& trackPosition : itemSpan) { 910 for (const auto& trackPosition : itemSpan) {
811 GridTrackSize trackSize = gridTrackSize(direction, trackPosition.toI nt()); 911 GridTrackSize trackSize = gridTrackSize(direction, trackPosition.toI nt());
812 GridTrack& track = (direction == ForColumns) ? sizingData.columnTrac ks[trackPosition.toInt()] : sizingData.rowTracks[trackPosition.toInt()]; 912 GridTrack& track = (direction == ForColumns) ? sizingData.columnTrac ks[trackPosition.toInt()] : sizingData.rowTracks[trackPosition.toInt()];
813 spanningTracksSize += (track.*trackGetter)(); 913 spanningTracksSize += trackSizeForTrackSizeComputationPhase(phase, t rack, ForbidInfinity);
814 if (!(trackSize.*filterFunction)()) 914 if (!shouldProcessTrackForTrackSizeComputationPhase(phase, trackSize ))
815 continue; 915 continue;
816 916
817 sizingData.filteredTracks.append(&track); 917 sizingData.filteredTracks.append(&track);
818 918
819 if (!growAboveMaxBreadthFilterFunction || (trackSize.*growAboveMaxBr eadthFilterFunction)()) 919 if (trackShouldGrowBeyondGrowthLimitsForTrackSizeComputationPhase(ph ase, trackSize))
820 sizingData.growBeyondGrowthLimitsTracks.append(&track); 920 sizingData.growBeyondGrowthLimitsTracks.append(&track);
821 } 921 }
822 922
823 if (sizingData.filteredTracks.isEmpty()) 923 if (sizingData.filteredTracks.isEmpty())
824 continue; 924 continue;
825 925
826 // Specs mandate to floor extraSpace to 0. Instead we directly avoid the function call in those cases as it will be 926 // Specs mandate to floor extraSpace to 0. Instead we directly avoid the function call in those cases as it will be
827 // a noop in terms of track sizing. 927 // a noop in terms of track sizing.
828 LayoutUnit extraSpace = (this->*sizingFunction)(gridItemWithSpan.gridIte m(), direction, sizingData.columnTracks) - spanningTracksSize; 928 LayoutUnit extraSpace = currentItemSizeForTrackSizeComputationPhase(phas e, gridItemWithSpan.gridItem(), direction, sizingData.columnTracks) - spanningTr acksSize;
829 if (extraSpace > 0) { 929 if (extraSpace > 0) {
830 Vector<GridTrack*>* tracksToGrowBeyondGrowthLimits = sizingData.grow BeyondGrowthLimitsTracks.isEmpty() ? &sizingData.filteredTracks : &sizingData.gr owBeyondGrowthLimitsTracks; 930 Vector<GridTrack*>* tracksToGrowBeyondGrowthLimits = sizingData.grow BeyondGrowthLimitsTracks.isEmpty() ? &sizingData.filteredTracks : &sizingData.gr owBeyondGrowthLimitsTracks;
831 distributeSpaceToTracks(sizingData.filteredTracks, tracksToGrowBeyon dGrowthLimits, trackGetter, sizingData, extraSpace); 931 distributeSpaceToTracks<phase>(sizingData.filteredTracks, tracksToGr owBeyondGrowthLimits, sizingData, extraSpace);
832 } 932 }
833 } 933 }
834 934
835 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) { 935 for (const auto& trackIndex : sizingData.contentSizedTracksIndex) {
836 GridTrack& track = tracks[trackIndex]; 936 GridTrack& track = tracks[trackIndex];
837 if (track.m_plannedIncrease) 937 if (track.m_plannedIncrease)
838 (track.*trackGrowthFunction)(track.m_plannedIncrease); 938 updateTrackSizeForTrackSizeComputationPhase(phase, track);
839 } 939 }
840 } 940 }
841 941
842 static bool sortByGridTrackGrowthPotential(const GridTrack* track1, const GridTr ack* track2) 942 static bool sortByGridTrackGrowthPotential(const GridTrack* track1, const GridTr ack* track2)
843 { 943 {
844 // This check ensures that we respect the irreflexivity property of the stri ct weak ordering required by std::sort 944 // This check ensures that we respect the irreflexivity property of the stri ct weak ordering required by std::sort
845 // (forall x: NOT x < x). 945 // (forall x: NOT x < x).
846 if (track1->growthLimitIsInfinite() && track2->growthLimitIsInfinite()) 946 if (track1->growthLimitIsInfinite() && track2->growthLimitIsInfinite())
847 return false; 947 return false;
848 948
849 if (track1->growthLimitIsInfinite() || track2->growthLimitIsInfinite()) 949 if (track1->growthLimitIsInfinite() || track2->growthLimitIsInfinite())
850 return track2->growthLimitIsInfinite(); 950 return track2->growthLimitIsInfinite();
851 951
852 return (track1->growthLimit() - track1->baseSize()) < (track2->growthLimit() - track2->baseSize()); 952 return (track1->growthLimit() - track1->baseSize()) < (track2->growthLimit() - track2->baseSize());
853 } 953 }
854 954
855 void LayoutGrid::distributeSpaceToTracks(Vector<GridTrack*>& tracks, const Vecto r<GridTrack*>* growBeyondGrowthLimitsTracks, AccumulatorGetter trackGetter, Grid SizingData& sizingData, LayoutUnit& availableLogicalSpace) 955 template <TrackSizeComputationPhase phase>
956 void LayoutGrid::distributeSpaceToTracks(Vector<GridTrack*>& tracks, const Vecto r<GridTrack*>* growBeyondGrowthLimitsTracks, GridSizingData& sizingData, LayoutU nit& availableLogicalSpace)
856 { 957 {
857 ASSERT(availableLogicalSpace > 0); 958 ASSERT(availableLogicalSpace > 0);
858 std::sort(tracks.begin(), tracks.end(), sortByGridTrackGrowthPotential); 959 std::sort(tracks.begin(), tracks.end(), sortByGridTrackGrowthPotential);
859 960
860 size_t tracksSize = tracks.size(); 961 size_t tracksSize = tracks.size();
861 for (size_t i = 0; i < tracksSize; ++i) { 962 for (size_t i = 0; i < tracksSize; ++i) {
862 GridTrack& track = *tracks[i]; 963 GridTrack& track = *tracks[i];
863 LayoutUnit availableLogicalSpaceShare = availableLogicalSpace / (tracksS ize - i); 964 LayoutUnit availableLogicalSpaceShare = availableLogicalSpace / (tracksS ize - i);
864 const LayoutUnit& trackBreadth = (track.*trackGetter)(); 965 const LayoutUnit& trackBreadth = trackSizeForTrackSizeComputationPhase(p hase, track, ForbidInfinity);
865 LayoutUnit growthShare = track.growthLimitIsInfinite() ? availableLogica lSpaceShare : std::min(availableLogicalSpaceShare, track.growthLimit() - trackBr eadth); 966 LayoutUnit growthShare = track.growthLimitIsInfinite() ? availableLogica lSpaceShare : std::min(availableLogicalSpaceShare, track.growthLimit() - trackBr eadth);
866 ASSERT_WITH_MESSAGE(growthShare >= 0, "We must never shrink any grid tra ck or else we can't guarantee we abide by our min-sizing function."); 967 ASSERT_WITH_MESSAGE(growthShare >= 0, "We must never shrink any grid tra ck or else we can't guarantee we abide by our min-sizing function.");
867 track.m_increaseDuringDistribution = growthShare; 968 track.m_increaseDuringDistribution = growthShare;
868 availableLogicalSpace -= growthShare; 969 availableLogicalSpace -= growthShare;
869 } 970 }
870 971
871 if (availableLogicalSpace > 0 && growBeyondGrowthLimitsTracks) { 972 if (availableLogicalSpace > 0 && growBeyondGrowthLimitsTracks) {
872 size_t tracksGrowingAboveMaxBreadthSize = growBeyondGrowthLimitsTracks-> size(); 973 size_t tracksGrowingAboveMaxBreadthSize = growBeyondGrowthLimitsTracks-> size();
873 for (size_t i = 0; i < tracksGrowingAboveMaxBreadthSize; ++i) { 974 for (size_t i = 0; i < tracksGrowingAboveMaxBreadthSize; ++i) {
874 GridTrack* track = growBeyondGrowthLimitsTracks->at(i); 975 GridTrack* track = growBeyondGrowthLimitsTracks->at(i);
(...skipping 958 matching lines...) Expand 10 before | Expand all | Expand 10 after
1833 1934
1834 return LayoutPoint(columnPosition, rowPositionForChild(child)); 1935 return LayoutPoint(columnPosition, rowPositionForChild(child));
1835 } 1936 }
1836 1937
1837 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa intOffset) 1938 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa intOffset)
1838 { 1939 {
1839 GridPainter(*this).paintChildren(paintInfo, paintOffset); 1940 GridPainter(*this).paintChildren(paintInfo, paintOffset);
1840 } 1941 }
1841 1942
1842 } // namespace blink 1943 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/layout/LayoutGrid.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698