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

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

Issue 920413002: [CSS Grid Layout] Support "sparse" in auto-placed items locked to a row/column (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixing issues in the bots due to 0 key (using WTF::UnsignedWithZeroKeyHashTraits) Created 5 years, 10 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 | « LayoutTests/fast/css-grid-layout/resources/grid.css ('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 960 matching lines...) Expand 10 before | Expand all | Expand 10 after
971 PassOwnPtr<GridCoordinate> RenderGrid::createEmptyGridAreaAtSpecifiedPositionsOu tsideGrid(const RenderBox& gridItem, GridTrackSizingDirection specifiedDirection , const GridSpan& specifiedPositions) const 971 PassOwnPtr<GridCoordinate> RenderGrid::createEmptyGridAreaAtSpecifiedPositionsOu tsideGrid(const RenderBox& gridItem, GridTrackSizingDirection specifiedDirection , const GridSpan& specifiedPositions) const
972 { 972 {
973 GridTrackSizingDirection crossDirection = specifiedDirection == ForColumns ? ForRows : ForColumns; 973 GridTrackSizingDirection crossDirection = specifiedDirection == ForColumns ? ForRows : ForColumns;
974 const size_t endOfCrossDirection = crossDirection == ForColumns ? gridColumn Count() : gridRowCount(); 974 const size_t endOfCrossDirection = crossDirection == ForColumns ? gridColumn Count() : gridRowCount();
975 GridSpan crossDirectionPositions = GridResolvedPosition::resolveGridPosition sFromAutoPlacementPosition(*style(), gridItem, crossDirection, GridResolvedPosit ion(endOfCrossDirection)); 975 GridSpan crossDirectionPositions = GridResolvedPosition::resolveGridPosition sFromAutoPlacementPosition(*style(), gridItem, crossDirection, GridResolvedPosit ion(endOfCrossDirection));
976 return adoptPtr(new GridCoordinate(specifiedDirection == ForColumns ? crossD irectionPositions : specifiedPositions, specifiedDirection == ForColumns ? speci fiedPositions : crossDirectionPositions)); 976 return adoptPtr(new GridCoordinate(specifiedDirection == ForColumns ? crossD irectionPositions : specifiedPositions, specifiedDirection == ForColumns ? speci fiedPositions : crossDirectionPositions));
977 } 977 }
978 978
979 void RenderGrid::placeSpecifiedMajorAxisItemsOnGrid(const Vector<RenderBox*>& au toGridItems) 979 void RenderGrid::placeSpecifiedMajorAxisItemsOnGrid(const Vector<RenderBox*>& au toGridItems)
980 { 980 {
981 bool isForColumns = autoPlacementMajorAxisDirection() == ForColumns;
982 bool isGridAutoFlowDense = style()->isGridAutoFlowAlgorithmDense();
983
984 // Mapping between the major axis tracks (rows or columns) and the last auto -placed item's position inserted on
985 // that track. This is needed to implement "sparse" packing for items locked to a given track.
986 // See http://dev.w3.org/csswg/css-grid/#auto-placement-algo
987 HashMap<unsigned, unsigned, DefaultHash<unsigned>::Hash, WTF::UnsignedWithZe roKeyHashTraits<unsigned>> minorAxisCursors;
988
981 for (const auto& autoGridItem : autoGridItems) { 989 for (const auto& autoGridItem : autoGridItems) {
982 OwnPtr<GridSpan> majorAxisPositions = GridResolvedPosition::resolveGridP ositionsFromStyle(*style(), *autoGridItem, autoPlacementMajorAxisDirection()); 990 OwnPtr<GridSpan> majorAxisPositions = GridResolvedPosition::resolveGridP ositionsFromStyle(*style(), *autoGridItem, autoPlacementMajorAxisDirection());
983 GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositions FromAutoPlacementPosition(*style(), *autoGridItem, autoPlacementMinorAxisDirecti on(), GridResolvedPosition(0)); 991 GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositions FromAutoPlacementPosition(*style(), *autoGridItem, autoPlacementMinorAxisDirecti on(), GridResolvedPosition(0));
992 unsigned majorAxisInitialPosition = majorAxisPositions->resolvedInitialP osition.toInt();
984 993
985 GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), majorAx isPositions->resolvedInitialPosition.toInt()); 994 GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), majorAx isPositions->resolvedInitialPosition.toInt(), isGridAutoFlowDense ? 0 : minorAxi sCursors.get(majorAxisInitialPosition));
986 OwnPtr<GridCoordinate> emptyGridArea = iterator.nextEmptyGridArea(majorA xisPositions->integerSpan(), minorAxisPositions.integerSpan()); 995 OwnPtr<GridCoordinate> emptyGridArea = iterator.nextEmptyGridArea(majorA xisPositions->integerSpan(), minorAxisPositions.integerSpan());
987 if (!emptyGridArea) 996 if (!emptyGridArea)
988 emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(* autoGridItem, autoPlacementMajorAxisDirection(), *majorAxisPositions); 997 emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(* autoGridItem, autoPlacementMajorAxisDirection(), *majorAxisPositions);
989 insertItemIntoGrid(*autoGridItem, *emptyGridArea); 998 insertItemIntoGrid(*autoGridItem, *emptyGridArea);
999
1000 if (!isGridAutoFlowDense)
1001 minorAxisCursors.set(majorAxisInitialPosition, isForColumns ? emptyG ridArea->rows.resolvedInitialPosition.toInt() : emptyGridArea->columns.resolvedI nitialPosition.toInt());
990 } 1002 }
991 } 1003 }
992 1004
993 void RenderGrid::placeAutoMajorAxisItemsOnGrid(const Vector<RenderBox*>& autoGri dItems) 1005 void RenderGrid::placeAutoMajorAxisItemsOnGrid(const Vector<RenderBox*>& autoGri dItems)
994 { 1006 {
995 std::pair<size_t, size_t> autoPlacementCursor = std::make_pair(0, 0); 1007 std::pair<size_t, size_t> autoPlacementCursor = std::make_pair(0, 0);
996 bool isGridAutoFlowDense = style()->isGridAutoFlowAlgorithmDense(); 1008 bool isGridAutoFlowDense = style()->isGridAutoFlowAlgorithmDense();
997 1009
998 for (const auto& autoGridItem : autoGridItems) { 1010 for (const auto& autoGridItem : autoGridItems) {
999 placeAutoMajorAxisItemOnGrid(*autoGridItem, autoPlacementCursor); 1011 placeAutoMajorAxisItemOnGrid(*autoGridItem, autoPlacementCursor);
(...skipping 735 matching lines...) Expand 10 before | Expand all | Expand 10 after
1735 if (isOutOfFlowPositioned()) 1747 if (isOutOfFlowPositioned())
1736 return "RenderGrid (positioned)"; 1748 return "RenderGrid (positioned)";
1737 if (isAnonymous()) 1749 if (isAnonymous())
1738 return "RenderGrid (generated)"; 1750 return "RenderGrid (generated)";
1739 if (isRelPositioned()) 1751 if (isRelPositioned())
1740 return "RenderGrid (relative positioned)"; 1752 return "RenderGrid (relative positioned)";
1741 return "RenderGrid"; 1753 return "RenderGrid";
1742 } 1754 }
1743 1755
1744 } // namespace blink 1756 } // namespace blink
OLDNEW
« no previous file with comments | « LayoutTests/fast/css-grid-layout/resources/grid.css ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698