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 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |