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 644 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 655 } | 655 } |
| 656 | 656 |
| 657 size_t RenderGrid::gridItemSpan(const RenderBox* child, GridTrackSizingDirection direction) | 657 size_t RenderGrid::gridItemSpan(const RenderBox* child, GridTrackSizingDirection direction) |
| 658 { | 658 { |
| 659 GridCoordinate childCoordinate = cachedGridCoordinate(child); | 659 GridCoordinate childCoordinate = cachedGridCoordinate(child); |
| 660 GridSpan childSpan = (direction == ForRows) ? childCoordinate.rows : childCo ordinate.columns; | 660 GridSpan childSpan = (direction == ForRows) ? childCoordinate.rows : childCo ordinate.columns; |
| 661 | 661 |
| 662 return childSpan.resolvedFinalPosition.toInt() - childSpan.resolvedInitialPo sition.toInt() + 1; | 662 return childSpan.resolvedFinalPosition.toInt() - childSpan.resolvedInitialPo sition.toInt() + 1; |
| 663 } | 663 } |
| 664 | 664 |
| 665 typedef std::pair<RenderBox*, size_t> GridItemWithSpan; | |
| 666 | |
| 667 // This function sorts by span (.second in the pair) but also places pointers (. first in the pair) to the same object in | 665 // This function sorts by span (.second in the pair) but also places pointers (. first in the pair) to the same object in |
| 668 // consecutive positions so duplicates could be easily removed with std::unique( ) for example. | 666 // consecutive positions so duplicates could be easily removed with std::unique( ) for example. |
| 669 static bool gridItemWithSpanSorter(const GridItemWithSpan& item1, const GridItem WithSpan& item2) | 667 static bool gridItemWithSpanSorter(const GridItemWithSpan& item1, const GridItem WithSpan& item2) |
| 670 { | 668 { |
| 671 if (item1.second != item2.second) | 669 if (item1.second != item2.second) |
| 672 return item1.second < item2.second; | 670 return item1.second < item2.second; |
| 673 | 671 |
| 674 return item1.first < item2.first; | 672 return item1.first < item2.first; |
| 675 } | 673 } |
| 676 | 674 |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 687 size_t trackIndex = sizingData.contentSizedTracksIndex[i]; | 685 size_t trackIndex = sizingData.contentSizedTracksIndex[i]; |
| 688 GridIterator iterator(m_grid, direction, trackIndex); | 686 GridIterator iterator(m_grid, direction, trackIndex); |
| 689 Vector<GridItemWithSpan> itemsSortedByIncreasingSpan; | 687 Vector<GridItemWithSpan> itemsSortedByIncreasingSpan; |
| 690 | 688 |
| 691 while (RenderBox* gridItem = iterator.nextGridItem()) | 689 while (RenderBox* gridItem = iterator.nextGridItem()) |
| 692 itemsSortedByIncreasingSpan.append(std::make_pair(gridItem, gridItem Span(gridItem, direction))); | 690 itemsSortedByIncreasingSpan.append(std::make_pair(gridItem, gridItem Span(gridItem, direction))); |
| 693 std::stable_sort(itemsSortedByIncreasingSpan.begin(), itemsSortedByIncre asingSpan.end(), gridItemWithSpanSorter); | 691 std::stable_sort(itemsSortedByIncreasingSpan.begin(), itemsSortedByIncre asingSpan.end(), gridItemWithSpanSorter); |
| 694 Vector<GridItemWithSpan>::iterator end = std::unique(itemsSortedByIncrea singSpan.begin(), itemsSortedByIncreasingSpan.end(), uniquePointerInPair); | 692 Vector<GridItemWithSpan>::iterator end = std::unique(itemsSortedByIncrea singSpan.begin(), itemsSortedByIncreasingSpan.end(), uniquePointerInPair); |
| 695 | 693 |
| 696 for (Vector<GridItemWithSpan>::iterator it = itemsSortedByIncreasingSpan .begin(); it != end; ++it) { | 694 for (Vector<GridItemWithSpan>::iterator it = itemsSortedByIncreasingSpan .begin(); it != end; ++it) { |
| 697 RenderBox* gridItem = it->first; | 695 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, *it, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &RenderGrid::minConte ntForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); |
| 698 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, gridItem, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &RenderGrid::min ContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); | 696 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, *it, &GridTrackSize::hasMaxContentMinTrackBreadth, &RenderGrid::maxContentFor Child, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); |
| 699 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, gridItem, &GridTrackSize::hasMaxContentMinTrackBreadth, &RenderGrid::maxConte ntForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); | 697 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, *it, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &RenderGrid::minConte ntForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth); |
| 700 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, gridItem, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &RenderGrid::min ContentForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth ); | 698 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, *it, &GridTrackSize::hasMaxContentMaxTrackBreadth, &RenderGrid::maxContentFor Child, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth); |
| 701 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, gridItem, &GridTrackSize::hasMaxContentMaxTrackBreadth, &RenderGrid::maxConte ntForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth); | |
| 702 } | 699 } |
| 703 | 700 |
| 704 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t rackIndex] : sizingData.rowTracks[trackIndex]; | 701 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t rackIndex] : sizingData.rowTracks[trackIndex]; |
| 705 if (track.m_maxBreadth == infinity) | 702 if (track.m_maxBreadth == infinity) |
| 706 track.m_maxBreadth = track.m_usedBreadth; | 703 track.m_maxBreadth = track.m_usedBreadth; |
| 707 } | 704 } |
| 708 } | 705 } |
| 709 | 706 |
| 710 void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizing Direction direction, GridSizingData& sizingData, RenderBox* gridItem, FilterFunc tion filterFunction, SizingFunction sizingFunction, AccumulatorGetter trackGette r, AccumulatorGrowFunction trackGrowthFunction) | 707 void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizing Direction direction, GridSizingData& sizingData, GridItemWithSpan& gridItemWithS pan, FilterFunction filterFunction, SizingFunction sizingFunction, AccumulatorGe tter trackGetter, AccumulatorGrowFunction trackGrowthFunction) |
| 711 { | 708 { |
| 709 RenderBox* gridItem = gridItemWithSpan.first; | |
| 712 const GridCoordinate coordinate = cachedGridCoordinate(gridItem); | 710 const GridCoordinate coordinate = cachedGridCoordinate(gridItem); |
| 713 const GridResolvedPosition initialTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPo sition; | 711 const GridResolvedPosition initialTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPo sition; |
| 714 const GridResolvedPosition finalTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedFinalPosition : coordinate.rows.resolvedFinalPosition ; | 712 const GridResolvedPosition finalTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedFinalPosition : coordinate.rows.resolvedFinalPosition ; |
| 715 | 713 |
| 716 sizingData.filteredTracks.shrink(0); | 714 sizingData.filteredTracks.shrink(0); |
| 715 size_t gridItemSpan = gridItemWithSpan.second; | |
| 717 for (GridResolvedPosition trackPosition = initialTrackPosition; trackPositio n <= finalTrackPosition; ++trackPosition) { | 716 for (GridResolvedPosition trackPosition = initialTrackPosition; trackPositio n <= finalTrackPosition; ++trackPosition) { |
| 718 const GridTrackSize& trackSize = gridTrackSize(direction, trackPosition. toInt()); | 717 const GridTrackSize& trackSize = gridTrackSize(direction, trackPosition. toInt()); |
| 718 // We should not consider items spanning more than one track that span t racks with flexible sizing functions. | |
| 719 if (gridItemSpan > 1 && (trackSize.minTrackBreadth().isFlex() || trackSi ze.maxTrackBreadth().isFlex())) | |
|
Julien - ping for review
2014/10/10 18:09:16
While this will work and remove any grid item span
svillar
2014/10/13 06:52:32
That's true.
svillar
2014/10/13 14:38:44
BTW doing this would involve an extra hash lookup
Julien - ping for review
2014/10/13 19:43:48
I would go with incremental changes for that as it
Julien - ping for review
2014/10/13 19:43:48
Another argument for the class, I am officially ov
svillar
2014/10/14 06:29:13
Yeah but note that this step was already present i
Julien - ping for review
2014/10/15 16:04:58
100% agreed! I was just mentioning that as it may
| |
| 720 return; | |
| 721 | |
| 719 if (!(trackSize.*filterFunction)()) | 722 if (!(trackSize.*filterFunction)()) |
| 720 continue; | 723 continue; |
| 721 | 724 |
| 722 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t rackPosition.toInt()] : sizingData.rowTracks[trackPosition.toInt()]; | 725 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t rackPosition.toInt()] : sizingData.rowTracks[trackPosition.toInt()]; |
| 723 sizingData.filteredTracks.append(&track); | 726 sizingData.filteredTracks.append(&track); |
| 724 } | 727 } |
| 725 | 728 |
| 726 if (sizingData.filteredTracks.isEmpty()) | 729 if (sizingData.filteredTracks.isEmpty()) |
| 727 return; | 730 return; |
| 728 | 731 |
| (...skipping 694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1423 if (isOutOfFlowPositioned()) | 1426 if (isOutOfFlowPositioned()) |
| 1424 return "RenderGrid (positioned)"; | 1427 return "RenderGrid (positioned)"; |
| 1425 if (isAnonymous()) | 1428 if (isAnonymous()) |
| 1426 return "RenderGrid (generated)"; | 1429 return "RenderGrid (generated)"; |
| 1427 if (isRelPositioned()) | 1430 if (isRelPositioned()) |
| 1428 return "RenderGrid (relative positioned)"; | 1431 return "RenderGrid (relative positioned)"; |
| 1429 return "RenderGrid"; | 1432 return "RenderGrid"; |
| 1430 } | 1433 } |
| 1431 | 1434 |
| 1432 } // namespace blink | 1435 } // namespace blink |
| OLD | NEW |