Index: Source/core/rendering/RenderGrid.cpp |
diff --git a/Source/core/rendering/RenderGrid.cpp b/Source/core/rendering/RenderGrid.cpp |
index a459c51506629a0765ae64109fd4ab4de0e1b92e..886d6d4f15e954804fd43d5c303b74b015ff1518 100644 |
--- a/Source/core/rendering/RenderGrid.cpp |
+++ b/Source/core/rendering/RenderGrid.cpp |
@@ -682,6 +682,7 @@ public: |
RenderBox& gridItem() const { return *m_gridItem; } |
GridCoordinate coordinate() const { return m_coordinate; } |
+ bool spansMultipleTracks() const { return m_span > 1; } |
bool operator<(const GridItemWithSpan other) const { return m_span < other.m_span; } |
@@ -712,6 +713,21 @@ struct VectorTraits<blink::GridItemWithSpan> : SimpleClassVectorTraits<blink::Gr |
namespace blink { |
+bool RenderGrid::itemSpansFlexibleSizedTracks(const GridItemWithSpan& gridItemWithSpan, GridTrackSizingDirection direction) const |
+{ |
+ const GridCoordinate coordinate = gridItemWithSpan.coordinate(); |
+ const GridResolvedPosition initialTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPosition; |
+ const GridResolvedPosition finalTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedFinalPosition : coordinate.rows.resolvedFinalPosition; |
+ |
+ for (GridResolvedPosition trackPosition = initialTrackPosition; trackPosition <= finalTrackPosition; ++trackPosition) { |
+ 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.
|
+ if (trackSize.minTrackBreadth().isFlex() || trackSize.maxTrackBreadth().isFlex()) |
+ return true; |
+ } |
+ |
+ return false; |
+} |
+ |
void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirection direction, GridSizingData& sizingData, LayoutUnit& availableLogicalSpace) |
{ |
sizingData.itemsSortedByIncreasingSpan.shrink(0); |
@@ -728,8 +744,11 @@ void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio |
Vector<GridItemWithSpan>::iterator end = sizingData.itemsSortedByIncreasingSpan.end(); |
for (Vector<GridItemWithSpan>::iterator it = sizingData.itemsSortedByIncreasingSpan.begin(); it != end; ++it) { |
- // FIXME: do not consider items with a span > 1 that span a track with a flexible sizing function. |
GridItemWithSpan itemWithSpan = *it; |
+ // We should not consider items spanning more than one track that span tracks with flexible sizing functions. |
+ if (itemWithSpan.spansMultipleTracks() && itemSpansFlexibleSizedTracks(itemWithSpan, direction)) |
+ continue; |
+ |
resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, itemWithSpan, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &RenderGrid::minContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); |
resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, itemWithSpan, &GridTrackSize::hasMaxContentMinTrackBreadth, &RenderGrid::maxContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); |
resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, itemWithSpan, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &RenderGrid::minContentForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth); |