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

Side by Side Diff: Source/core/rendering/RenderGrid.cpp

Issue 448993002: [CSSGridLayout] Skip items spanning flex tracks in track sizing algo (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Patch for landing Created 6 years, 2 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/rendering/RenderGrid.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 664 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 GridItemWithSpan(RenderBox& gridItem, const GridCoordinate& coordinate, Grid TrackSizingDirection direction) 675 GridItemWithSpan(RenderBox& gridItem, const GridCoordinate& coordinate, Grid TrackSizingDirection direction)
676 : m_gridItem(gridItem) 676 : m_gridItem(gridItem)
677 , m_coordinate(coordinate) 677 , m_coordinate(coordinate)
678 { 678 {
679 const GridSpan& span = (direction == ForRows) ? coordinate.rows : coordi nate.columns; 679 const GridSpan& span = (direction == ForRows) ? coordinate.rows : coordi nate.columns;
680 m_span = span.resolvedFinalPosition.toInt() - span.resolvedInitialPositi on.toInt() + 1; 680 m_span = span.resolvedFinalPosition.toInt() - span.resolvedInitialPositi on.toInt() + 1;
681 } 681 }
682 682
683 RenderBox& gridItem() const { return *m_gridItem; } 683 RenderBox& gridItem() const { return *m_gridItem; }
684 GridCoordinate coordinate() const { return m_coordinate; } 684 GridCoordinate coordinate() const { return m_coordinate; }
685 bool spansMultipleTracks() const { return m_span > 1; }
685 686
686 bool operator<(const GridItemWithSpan other) const { return m_span < other.m _span; } 687 bool operator<(const GridItemWithSpan other) const { return m_span < other.m _span; }
687 688
688 void trace(Visitor* visitor) 689 void trace(Visitor* visitor)
689 { 690 {
690 visitor->trace(m_gridItem); 691 visitor->trace(m_gridItem);
691 } 692 }
692 693
693 private: 694 private:
694 RawPtrWillBeMember<RenderBox> m_gridItem; 695 RawPtrWillBeMember<RenderBox> m_gridItem;
(...skipping 10 matching lines...) Expand all
705 // needsDestruction is by default defined in terms of IsPod<>, but as 706 // needsDestruction is by default defined in terms of IsPod<>, but as
706 // it doesn't handle embedded structs/enums (e.g., GridCoordinate), 707 // it doesn't handle embedded structs/enums (e.g., GridCoordinate),
707 // override it here. 708 // override it here.
708 static const bool needsDestruction = false; 709 static const bool needsDestruction = false;
709 }; 710 };
710 711
711 } // namespace WTF 712 } // namespace WTF
712 713
713 namespace blink { 714 namespace blink {
714 715
716 bool RenderGrid::itemSpansFlexibleSizedTracks(const GridItemWithSpan& gridItemWi thSpan, GridTrackSizingDirection direction) const
717 {
718 const GridCoordinate coordinate = gridItemWithSpan.coordinate();
719 const GridResolvedPosition initialTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPo sition;
720 const GridResolvedPosition finalTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedFinalPosition : coordinate.rows.resolvedFinalPosition ;
721
722 for (GridResolvedPosition trackPosition = initialTrackPosition; trackPositio n <= finalTrackPosition; ++trackPosition) {
723 const GridTrackSize& trackSize = gridTrackSize(direction, trackPosition. toInt());
Julien - ping for review 2014/10/15 16:04:58 Too bad we have this call, else we could have move
svillar 2014/10/16 06:36:30 Acknowledged.
724 if (trackSize.minTrackBreadth().isFlex() || trackSize.maxTrackBreadth(). isFlex())
725 return true;
726 }
727
728 return false;
729 }
730
715 void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio n direction, GridSizingData& sizingData, LayoutUnit& availableLogicalSpace) 731 void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio n direction, GridSizingData& sizingData, LayoutUnit& availableLogicalSpace)
716 { 732 {
717 sizingData.itemsSortedByIncreasingSpan.shrink(0); 733 sizingData.itemsSortedByIncreasingSpan.shrink(0);
718 HashSet<RenderBox*> itemsSet; 734 HashSet<RenderBox*> itemsSet;
719 size_t contentSizedTracksCount = sizingData.contentSizedTracksIndex.size(); 735 size_t contentSizedTracksCount = sizingData.contentSizedTracksIndex.size();
720 for (size_t i = 0; i < contentSizedTracksCount; ++i) { 736 for (size_t i = 0; i < contentSizedTracksCount; ++i) {
721 GridIterator iterator(m_grid, direction, sizingData.contentSizedTracksIn dex[i]); 737 GridIterator iterator(m_grid, direction, sizingData.contentSizedTracksIn dex[i]);
722 while (RenderBox* gridItem = iterator.nextGridItem()) { 738 while (RenderBox* gridItem = iterator.nextGridItem()) {
723 if (itemsSet.add(gridItem).isNewEntry) 739 if (itemsSet.add(gridItem).isNewEntry)
724 sizingData.itemsSortedByIncreasingSpan.append(GridItemWithSpan(* gridItem, cachedGridCoordinate(*gridItem), direction)); 740 sizingData.itemsSortedByIncreasingSpan.append(GridItemWithSpan(* gridItem, cachedGridCoordinate(*gridItem), direction));
725 } 741 }
726 } 742 }
727 std::sort(sizingData.itemsSortedByIncreasingSpan.begin(), sizingData.itemsSo rtedByIncreasingSpan.end()); 743 std::sort(sizingData.itemsSortedByIncreasingSpan.begin(), sizingData.itemsSo rtedByIncreasingSpan.end());
728 744
729 Vector<GridItemWithSpan>::iterator end = sizingData.itemsSortedByIncreasingS pan.end(); 745 Vector<GridItemWithSpan>::iterator end = sizingData.itemsSortedByIncreasingS pan.end();
730 for (Vector<GridItemWithSpan>::iterator it = sizingData.itemsSortedByIncreas ingSpan.begin(); it != end; ++it) { 746 for (Vector<GridItemWithSpan>::iterator it = sizingData.itemsSortedByIncreas ingSpan.begin(); it != end; ++it) {
731 // FIXME: do not consider items with a span > 1 that span a track with a flexible sizing function.
732 GridItemWithSpan itemWithSpan = *it; 747 GridItemWithSpan itemWithSpan = *it;
748 // We should not consider items spanning more than one track that span t racks with flexible sizing functions.
749 if (itemWithSpan.spansMultipleTracks() && itemSpansFlexibleSizedTracks(i temWithSpan, direction))
750 continue;
751
733 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &RenderGrid::min ContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); 752 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &RenderGrid::min ContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth);
734 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMaxContentMinTrackBreadth, &RenderGrid::maxConte ntForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); 753 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMaxContentMinTrackBreadth, &RenderGrid::maxConte ntForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth);
735 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &RenderGrid::min ContentForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth ); 754 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &RenderGrid::min ContentForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth );
736 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMaxContentMaxTrackBreadth, &RenderGrid::maxConte ntForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth); 755 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, i temWithSpan, &GridTrackSize::hasMaxContentMaxTrackBreadth, &RenderGrid::maxConte ntForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth);
737 } 756 }
738 757
739 for (size_t i = 0; i < contentSizedTracksCount; ++i) { 758 for (size_t i = 0; i < contentSizedTracksCount; ++i) {
740 size_t trackIndex = sizingData.contentSizedTracksIndex[i]; 759 size_t trackIndex = sizingData.contentSizedTracksIndex[i];
741 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t rackIndex] : sizingData.rowTracks[trackIndex]; 760 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t rackIndex] : sizingData.rowTracks[trackIndex];
742 if (track.m_maxBreadth == infinity) 761 if (track.m_maxBreadth == infinity)
(...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after
1418 if (isOutOfFlowPositioned()) 1437 if (isOutOfFlowPositioned())
1419 return "RenderGrid (positioned)"; 1438 return "RenderGrid (positioned)";
1420 if (isAnonymous()) 1439 if (isAnonymous())
1421 return "RenderGrid (generated)"; 1440 return "RenderGrid (generated)";
1422 if (isRelPositioned()) 1441 if (isRelPositioned())
1423 return "RenderGrid (relative positioned)"; 1442 return "RenderGrid (relative positioned)";
1424 return "RenderGrid"; 1443 return "RenderGrid";
1425 } 1444 }
1426 1445
1427 } // namespace blink 1446 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderGrid.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698