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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutGrid.cpp

Issue 1648903002: [css-grid] Rename GridResolvedPosition to GridPositionsResolver (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
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 1133 matching lines...) Expand 10 before | Expand all | Expand 10 after
1144 GridSpan majorAxisPositions = (autoPlacementMajorAxisDirection() == ForColumns) ? coordinate.columns : coordinate.rows; 1144 GridSpan majorAxisPositions = (autoPlacementMajorAxisDirection() == ForColumns) ? coordinate.columns : coordinate.rows;
1145 if (majorAxisPositions.isIndefinite()) 1145 if (majorAxisPositions.isIndefinite())
1146 autoMajorAxisAutoGridItems.append(child); 1146 autoMajorAxisAutoGridItems.append(child);
1147 else 1147 else
1148 specifiedMajorAxisAutoGridItems.append(child); 1148 specifiedMajorAxisAutoGridItems.append(child);
1149 continue; 1149 continue;
1150 } 1150 }
1151 insertItemIntoGrid(*child, coordinate); 1151 insertItemIntoGrid(*child, coordinate);
1152 } 1152 }
1153 1153
1154 ASSERT(gridRowCount() >= GridResolvedPosition::explicitGridRowCount(*style() )); 1154 ASSERT(gridRowCount() >= GridPositionsResolver::explicitGridRowCount(*style( )));
1155 ASSERT(gridColumnCount() >= GridResolvedPosition::explicitGridColumnCount(*s tyle())); 1155 ASSERT(gridColumnCount() >= GridPositionsResolver::explicitGridColumnCount(* style()));
1156 1156
1157 placeSpecifiedMajorAxisItemsOnGrid(specifiedMajorAxisAutoGridItems); 1157 placeSpecifiedMajorAxisItemsOnGrid(specifiedMajorAxisAutoGridItems);
1158 placeAutoMajorAxisItemsOnGrid(autoMajorAxisAutoGridItems); 1158 placeAutoMajorAxisItemsOnGrid(autoMajorAxisAutoGridItems);
1159 1159
1160 m_grid.shrinkToFit(); 1160 m_grid.shrinkToFit();
1161 1161
1162 #if ENABLE(ASSERT) 1162 #if ENABLE(ASSERT)
1163 for (LayoutBox* child = m_orderIterator.first(); child; child = m_orderItera tor.next()) { 1163 for (LayoutBox* child = m_orderIterator.first(); child; child = m_orderItera tor.next()) {
1164 if (child->isOutOfFlowPositioned()) 1164 if (child->isOutOfFlowPositioned())
1165 continue; 1165 continue;
1166 1166
1167 GridCoordinate coordinate = cachedGridCoordinate(*child); 1167 GridCoordinate coordinate = cachedGridCoordinate(*child);
1168 ASSERT(coordinate.rows.isTranslatedDefinite() && coordinate.columns.isTr anslatedDefinite()); 1168 ASSERT(coordinate.rows.isTranslatedDefinite() && coordinate.columns.isTr anslatedDefinite());
1169 } 1169 }
1170 #endif 1170 #endif
1171 } 1171 }
1172 1172
1173 void LayoutGrid::populateExplicitGridAndOrderIterator() 1173 void LayoutGrid::populateExplicitGridAndOrderIterator()
1174 { 1174 {
1175 OrderIteratorPopulator populator(m_orderIterator); 1175 OrderIteratorPopulator populator(m_orderIterator);
1176 1176
1177 m_smallestRowStart = m_smallestColumnStart = 0; 1177 m_smallestRowStart = m_smallestColumnStart = 0;
1178 1178
1179 size_t maximumRowIndex = std::max<size_t>(1, GridResolvedPosition::explicitG ridRowCount(*style())); 1179 size_t maximumRowIndex = std::max<size_t>(1, GridPositionsResolver::explicit GridRowCount(*style()));
1180 size_t maximumColumnIndex = std::max<size_t>(1, GridResolvedPosition::explic itGridColumnCount(*style())); 1180 size_t maximumColumnIndex = std::max<size_t>(1, GridPositionsResolver::expli citGridColumnCount(*style()));
1181 1181
1182 ASSERT(m_gridItemsIndexesMap.isEmpty()); 1182 ASSERT(m_gridItemsIndexesMap.isEmpty());
1183 size_t childIndex = 0; 1183 size_t childIndex = 0;
1184 for (LayoutBox* child = firstChildBox(); child; child = child->nextInFlowSib lingBox()) { 1184 for (LayoutBox* child = firstChildBox(); child; child = child->nextInFlowSib lingBox()) {
1185 if (child->isOutOfFlowPositioned()) 1185 if (child->isOutOfFlowPositioned())
1186 continue; 1186 continue;
1187 1187
1188 populator.collectChild(child); 1188 populator.collectChild(child);
1189 m_gridItemsIndexesMap.set(child, childIndex++); 1189 m_gridItemsIndexesMap.set(child, childIndex++);
1190 1190
1191 // This function bypasses the cache (cachedGridCoordinate()) as it is us ed to build it. 1191 // This function bypasses the cache (cachedGridCoordinate()) as it is us ed to build it.
1192 GridSpan rowPositions = GridResolvedPosition::resolveGridPositionsFromSt yle(*style(), *child, ForRows); 1192 GridSpan rowPositions = GridPositionsResolver::resolveGridPositionsFromS tyle(*style(), *child, ForRows);
1193 GridSpan columnPositions = GridResolvedPosition::resolveGridPositionsFro mStyle(*style(), *child, ForColumns); 1193 GridSpan columnPositions = GridPositionsResolver::resolveGridPositionsFr omStyle(*style(), *child, ForColumns);
1194 m_gridItemCoordinate.set(child, GridCoordinate(rowPositions, columnPosit ions)); 1194 m_gridItemCoordinate.set(child, GridCoordinate(rowPositions, columnPosit ions));
1195 1195
1196 // |positions| is 0 if we need to run the auto-placement algorithm. 1196 // |positions| is 0 if we need to run the auto-placement algorithm.
1197 if (!rowPositions.isIndefinite()) { 1197 if (!rowPositions.isIndefinite()) {
1198 m_smallestRowStart = std::min(m_smallestRowStart, rowPositions.untra nslatedResolvedInitialPosition()); 1198 m_smallestRowStart = std::min(m_smallestRowStart, rowPositions.untra nslatedResolvedInitialPosition());
1199 maximumRowIndex = std::max<int>(maximumRowIndex, rowPositions.untran slatedResolvedFinalPosition()); 1199 maximumRowIndex = std::max<int>(maximumRowIndex, rowPositions.untran slatedResolvedFinalPosition());
1200 } else { 1200 } else {
1201 // Grow the grid for items with a definite row span, getting the lar gest such span. 1201 // Grow the grid for items with a definite row span, getting the lar gest such span.
1202 size_t spanSize = GridResolvedPosition::spanSizeForAutoPlacedItem(*s tyle(), *child, ForRows); 1202 size_t spanSize = GridPositionsResolver::spanSizeForAutoPlacedItem(* style(), *child, ForRows);
1203 maximumRowIndex = std::max(maximumRowIndex, spanSize); 1203 maximumRowIndex = std::max(maximumRowIndex, spanSize);
1204 } 1204 }
1205 1205
1206 if (!columnPositions.isIndefinite()) { 1206 if (!columnPositions.isIndefinite()) {
1207 m_smallestColumnStart = std::min(m_smallestColumnStart, columnPositi ons.untranslatedResolvedInitialPosition()); 1207 m_smallestColumnStart = std::min(m_smallestColumnStart, columnPositi ons.untranslatedResolvedInitialPosition());
1208 maximumColumnIndex = std::max<int>(maximumColumnIndex, columnPositio ns.untranslatedResolvedFinalPosition()); 1208 maximumColumnIndex = std::max<int>(maximumColumnIndex, columnPositio ns.untranslatedResolvedFinalPosition());
1209 } else { 1209 } else {
1210 // Grow the grid for items with a definite column span, getting the largest such span. 1210 // Grow the grid for items with a definite column span, getting the largest such span.
1211 size_t spanSize = GridResolvedPosition::spanSizeForAutoPlacedItem(*s tyle(), *child, ForColumns); 1211 size_t spanSize = GridPositionsResolver::spanSizeForAutoPlacedItem(* style(), *child, ForColumns);
1212 maximumColumnIndex = std::max(maximumColumnIndex, spanSize); 1212 maximumColumnIndex = std::max(maximumColumnIndex, spanSize);
1213 } 1213 }
1214 } 1214 }
1215 1215
1216 m_grid.grow(maximumRowIndex + abs(m_smallestRowStart)); 1216 m_grid.grow(maximumRowIndex + abs(m_smallestRowStart));
1217 for (auto& column : m_grid) 1217 for (auto& column : m_grid)
1218 column.grow(maximumColumnIndex + abs(m_smallestColumnStart)); 1218 column.grow(maximumColumnIndex + abs(m_smallestColumnStart));
1219 } 1219 }
1220 1220
1221 PassOwnPtr<GridCoordinate> LayoutGrid::createEmptyGridAreaAtSpecifiedPositionsOu tsideGrid(const LayoutBox& gridItem, GridTrackSizingDirection specifiedDirection , const GridSpan& specifiedPositions) const 1221 PassOwnPtr<GridCoordinate> LayoutGrid::createEmptyGridAreaAtSpecifiedPositionsOu tsideGrid(const LayoutBox& gridItem, GridTrackSizingDirection specifiedDirection , const GridSpan& specifiedPositions) const
1222 { 1222 {
1223 GridTrackSizingDirection crossDirection = specifiedDirection == ForColumns ? ForRows : ForColumns; 1223 GridTrackSizingDirection crossDirection = specifiedDirection == ForColumns ? ForRows : ForColumns;
1224 const size_t endOfCrossDirection = crossDirection == ForColumns ? gridColumn Count() : gridRowCount(); 1224 const size_t endOfCrossDirection = crossDirection == ForColumns ? gridColumn Count() : gridRowCount();
1225 size_t crossDirectionSpanSize = GridResolvedPosition::spanSizeForAutoPlacedI tem(*style(), gridItem, crossDirection); 1225 size_t crossDirectionSpanSize = GridPositionsResolver::spanSizeForAutoPlaced Item(*style(), gridItem, crossDirection);
1226 GridSpan crossDirectionPositions = GridSpan::translatedDefiniteGridSpan(endO fCrossDirection, endOfCrossDirection + crossDirectionSpanSize); 1226 GridSpan crossDirectionPositions = GridSpan::translatedDefiniteGridSpan(endO fCrossDirection, endOfCrossDirection + crossDirectionSpanSize);
1227 return adoptPtr(new GridCoordinate(specifiedDirection == ForColumns ? crossD irectionPositions : specifiedPositions, specifiedDirection == ForColumns ? speci fiedPositions : crossDirectionPositions)); 1227 return adoptPtr(new GridCoordinate(specifiedDirection == ForColumns ? crossD irectionPositions : specifiedPositions, specifiedDirection == ForColumns ? speci fiedPositions : crossDirectionPositions));
1228 } 1228 }
1229 1229
1230 void LayoutGrid::placeSpecifiedMajorAxisItemsOnGrid(const Vector<LayoutBox*>& au toGridItems) 1230 void LayoutGrid::placeSpecifiedMajorAxisItemsOnGrid(const Vector<LayoutBox*>& au toGridItems)
1231 { 1231 {
1232 bool isForColumns = autoPlacementMajorAxisDirection() == ForColumns; 1232 bool isForColumns = autoPlacementMajorAxisDirection() == ForColumns;
1233 bool isGridAutoFlowDense = style()->isGridAutoFlowAlgorithmDense(); 1233 bool isGridAutoFlowDense = style()->isGridAutoFlowAlgorithmDense();
1234 1234
1235 // Mapping between the major axis tracks (rows or columns) and the last auto -placed item's position inserted on 1235 // Mapping between the major axis tracks (rows or columns) and the last auto -placed item's position inserted on
1236 // that track. This is needed to implement "sparse" packing for items locked to a given track. 1236 // that track. This is needed to implement "sparse" packing for items locked to a given track.
1237 // See http://dev.w3.org/csswg/css-grid/#auto-placement-algo 1237 // See http://dev.w3.org/csswg/css-grid/#auto-placement-algo
1238 HashMap<unsigned, unsigned, DefaultHash<unsigned>::Hash, WTF::UnsignedWithZe roKeyHashTraits<unsigned>> minorAxisCursors; 1238 HashMap<unsigned, unsigned, DefaultHash<unsigned>::Hash, WTF::UnsignedWithZe roKeyHashTraits<unsigned>> minorAxisCursors;
1239 1239
1240 for (const auto& autoGridItem : autoGridItems) { 1240 for (const auto& autoGridItem : autoGridItems) {
1241 GridSpan majorAxisPositions = cachedGridSpan(*autoGridItem, autoPlacemen tMajorAxisDirection()); 1241 GridSpan majorAxisPositions = cachedGridSpan(*autoGridItem, autoPlacemen tMajorAxisDirection());
1242 ASSERT(majorAxisPositions.isTranslatedDefinite()); 1242 ASSERT(majorAxisPositions.isTranslatedDefinite());
1243 ASSERT(!cachedGridSpan(*autoGridItem, autoPlacementMinorAxisDirection()) .isTranslatedDefinite()); 1243 ASSERT(!cachedGridSpan(*autoGridItem, autoPlacementMinorAxisDirection()) .isTranslatedDefinite());
1244 size_t minorAxisSpanSize = GridResolvedPosition::spanSizeForAutoPlacedIt em(*style(), *autoGridItem, autoPlacementMinorAxisDirection()); 1244 size_t minorAxisSpanSize = GridPositionsResolver::spanSizeForAutoPlacedI tem(*style(), *autoGridItem, autoPlacementMinorAxisDirection());
1245 unsigned majorAxisInitialPosition = majorAxisPositions.resolvedInitialPo sition(); 1245 unsigned majorAxisInitialPosition = majorAxisPositions.resolvedInitialPo sition();
1246 1246
1247 GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), majorAx isPositions.resolvedInitialPosition(), isGridAutoFlowDense ? 0 : minorAxisCursor s.get(majorAxisInitialPosition)); 1247 GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), majorAx isPositions.resolvedInitialPosition(), isGridAutoFlowDense ? 0 : minorAxisCursor s.get(majorAxisInitialPosition));
1248 OwnPtr<GridCoordinate> emptyGridArea = iterator.nextEmptyGridArea(majorA xisPositions.integerSpan(), minorAxisSpanSize); 1248 OwnPtr<GridCoordinate> emptyGridArea = iterator.nextEmptyGridArea(majorA xisPositions.integerSpan(), minorAxisSpanSize);
1249 if (!emptyGridArea) 1249 if (!emptyGridArea)
1250 emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(* autoGridItem, autoPlacementMajorAxisDirection(), majorAxisPositions); 1250 emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(* autoGridItem, autoPlacementMajorAxisDirection(), majorAxisPositions);
1251 1251
1252 m_gridItemCoordinate.set(autoGridItem, *emptyGridArea); 1252 m_gridItemCoordinate.set(autoGridItem, *emptyGridArea);
1253 insertItemIntoGrid(*autoGridItem, *emptyGridArea); 1253 insertItemIntoGrid(*autoGridItem, *emptyGridArea);
1254 1254
(...skipping 15 matching lines...) Expand all
1270 autoPlacementCursor.first = 0; 1270 autoPlacementCursor.first = 0;
1271 autoPlacementCursor.second = 0; 1271 autoPlacementCursor.second = 0;
1272 } 1272 }
1273 } 1273 }
1274 } 1274 }
1275 1275
1276 void LayoutGrid::placeAutoMajorAxisItemOnGrid(LayoutBox& gridItem, std::pair<siz e_t, size_t>& autoPlacementCursor) 1276 void LayoutGrid::placeAutoMajorAxisItemOnGrid(LayoutBox& gridItem, std::pair<siz e_t, size_t>& autoPlacementCursor)
1277 { 1277 {
1278 GridSpan minorAxisPositions = cachedGridSpan(gridItem, autoPlacementMinorAxi sDirection()); 1278 GridSpan minorAxisPositions = cachedGridSpan(gridItem, autoPlacementMinorAxi sDirection());
1279 ASSERT(!cachedGridSpan(gridItem, autoPlacementMajorAxisDirection()).isTransl atedDefinite()); 1279 ASSERT(!cachedGridSpan(gridItem, autoPlacementMajorAxisDirection()).isTransl atedDefinite());
1280 size_t majorAxisSpanSize = GridResolvedPosition::spanSizeForAutoPlacedItem(* style(), gridItem, autoPlacementMajorAxisDirection()); 1280 size_t majorAxisSpanSize = GridPositionsResolver::spanSizeForAutoPlacedItem( *style(), gridItem, autoPlacementMajorAxisDirection());
1281 1281
1282 const size_t endOfMajorAxis = (autoPlacementMajorAxisDirection() == ForColum ns) ? gridColumnCount() : gridRowCount(); 1282 const size_t endOfMajorAxis = (autoPlacementMajorAxisDirection() == ForColum ns) ? gridColumnCount() : gridRowCount();
1283 size_t majorAxisAutoPlacementCursor = autoPlacementMajorAxisDirection() == F orColumns ? autoPlacementCursor.second : autoPlacementCursor.first; 1283 size_t majorAxisAutoPlacementCursor = autoPlacementMajorAxisDirection() == F orColumns ? autoPlacementCursor.second : autoPlacementCursor.first;
1284 size_t minorAxisAutoPlacementCursor = autoPlacementMajorAxisDirection() == F orColumns ? autoPlacementCursor.first : autoPlacementCursor.second; 1284 size_t minorAxisAutoPlacementCursor = autoPlacementMajorAxisDirection() == F orColumns ? autoPlacementCursor.first : autoPlacementCursor.second;
1285 1285
1286 OwnPtr<GridCoordinate> emptyGridArea; 1286 OwnPtr<GridCoordinate> emptyGridArea;
1287 if (minorAxisPositions.isTranslatedDefinite()) { 1287 if (minorAxisPositions.isTranslatedDefinite()) {
1288 // Move to the next track in major axis if initial position in minor axi s is before auto-placement cursor. 1288 // Move to the next track in major axis if initial position in minor axi s is before auto-placement cursor.
1289 if (minorAxisPositions.resolvedInitialPosition() < minorAxisAutoPlacemen tCursor) 1289 if (minorAxisPositions.resolvedInitialPosition() < minorAxisAutoPlacemen tCursor)
1290 majorAxisAutoPlacementCursor++; 1290 majorAxisAutoPlacementCursor++;
1291 1291
1292 if (majorAxisAutoPlacementCursor < endOfMajorAxis) { 1292 if (majorAxisAutoPlacementCursor < endOfMajorAxis) {
1293 GridIterator iterator(m_grid, autoPlacementMinorAxisDirection(), min orAxisPositions.resolvedInitialPosition(), majorAxisAutoPlacementCursor); 1293 GridIterator iterator(m_grid, autoPlacementMinorAxisDirection(), min orAxisPositions.resolvedInitialPosition(), majorAxisAutoPlacementCursor);
1294 emptyGridArea = iterator.nextEmptyGridArea(minorAxisPositions.intege rSpan(), majorAxisSpanSize); 1294 emptyGridArea = iterator.nextEmptyGridArea(minorAxisPositions.intege rSpan(), majorAxisSpanSize);
1295 } 1295 }
1296 1296
1297 if (!emptyGridArea) 1297 if (!emptyGridArea)
1298 emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(g ridItem, autoPlacementMinorAxisDirection(), minorAxisPositions); 1298 emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(g ridItem, autoPlacementMinorAxisDirection(), minorAxisPositions);
1299 } else { 1299 } else {
1300 size_t minorAxisSpanSize = GridResolvedPosition::spanSizeForAutoPlacedIt em(*style(), gridItem, autoPlacementMinorAxisDirection()); 1300 size_t minorAxisSpanSize = GridPositionsResolver::spanSizeForAutoPlacedI tem(*style(), gridItem, autoPlacementMinorAxisDirection());
1301 1301
1302 for (size_t majorAxisIndex = majorAxisAutoPlacementCursor; majorAxisInde x < endOfMajorAxis; ++majorAxisIndex) { 1302 for (size_t majorAxisIndex = majorAxisAutoPlacementCursor; majorAxisInde x < endOfMajorAxis; ++majorAxisIndex) {
1303 GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), maj orAxisIndex, minorAxisAutoPlacementCursor); 1303 GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), maj orAxisIndex, minorAxisAutoPlacementCursor);
1304 emptyGridArea = iterator.nextEmptyGridArea(majorAxisSpanSize, minorA xisSpanSize); 1304 emptyGridArea = iterator.nextEmptyGridArea(majorAxisSpanSize, minorA xisSpanSize);
1305 1305
1306 if (emptyGridArea) { 1306 if (emptyGridArea) {
1307 // Check that it fits in the minor axis direction, as we shouldn 't grow in that direction here (it was already managed in populateExplicitGridAn dOrderIterator()). 1307 // Check that it fits in the minor axis direction, as we shouldn 't grow in that direction here (it was already managed in populateExplicitGridAn dOrderIterator()).
1308 size_t minorAxisFinalPositionIndex = autoPlacementMinorAxisDirec tion() == ForColumns ? emptyGridArea->columns.resolvedFinalPosition() : emptyGri dArea->rows.resolvedFinalPosition(); 1308 size_t minorAxisFinalPositionIndex = autoPlacementMinorAxisDirec tion() == ForColumns ? emptyGridArea->columns.resolvedFinalPosition() : emptyGri dArea->rows.resolvedFinalPosition();
1309 const size_t endOfMinorAxis = autoPlacementMinorAxisDirection() == ForColumns ? gridColumnCount() : gridRowCount(); 1309 const size_t endOfMinorAxis = autoPlacementMinorAxisDirection() == ForColumns ? gridColumnCount() : gridRowCount();
1310 if (minorAxisFinalPositionIndex <= endOfMinorAxis) 1310 if (minorAxisFinalPositionIndex <= endOfMinorAxis)
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1481 } 1481 }
1482 1482
1483 LayoutBlock::layoutPositionedObjects(relayoutChildren, info); 1483 LayoutBlock::layoutPositionedObjects(relayoutChildren, info);
1484 } 1484 }
1485 1485
1486 void LayoutGrid::offsetAndBreadthForPositionedChild(const LayoutBox& child, Grid TrackSizingDirection direction, LayoutUnit& offset, LayoutUnit& breadth) 1486 void LayoutGrid::offsetAndBreadthForPositionedChild(const LayoutBox& child, Grid TrackSizingDirection direction, LayoutUnit& offset, LayoutUnit& breadth)
1487 { 1487 {
1488 ASSERT(child.isHorizontalWritingMode() == isHorizontalWritingMode()); 1488 ASSERT(child.isHorizontalWritingMode() == isHorizontalWritingMode());
1489 bool isForColumns = direction == ForColumns; 1489 bool isForColumns = direction == ForColumns;
1490 1490
1491 GridSpan positions = GridResolvedPosition::resolveGridPositionsFromStyle(*st yle(), child, direction); 1491 GridSpan positions = GridPositionsResolver::resolveGridPositionsFromStyle(*s tyle(), child, direction);
1492 if (positions.isIndefinite()) { 1492 if (positions.isIndefinite()) {
1493 offset = LayoutUnit(); 1493 offset = LayoutUnit();
1494 breadth = isForColumns ? clientLogicalWidth() : clientLogicalHeight(); 1494 breadth = isForColumns ? clientLogicalWidth() : clientLogicalHeight();
1495 return; 1495 return;
1496 } 1496 }
1497 1497
1498 // For positioned items we cannot use GridSpan::translate(). Because we coul d end up with negative values, as the positioned items do not create implicit tr acks per spec. 1498 // For positioned items we cannot use GridSpan::translate(). Because we coul d end up with negative values, as the positioned items do not create implicit tr acks per spec.
1499 int smallestStart = abs(isForColumns ? m_smallestColumnStart : m_smallestRow Start); 1499 int smallestStart = abs(isForColumns ? m_smallestColumnStart : m_smallestRow Start);
1500 int resolvedInitialPosition = positions.untranslatedResolvedInitialPosition( ) + smallestStart; 1500 int resolvedInitialPosition = positions.untranslatedResolvedInitialPosition( ) + smallestStart;
1501 int resolvedFinalPosition = positions.untranslatedResolvedFinalPosition() + smallestStart; 1501 int resolvedFinalPosition = positions.untranslatedResolvedFinalPosition() + smallestStart;
1502 1502
1503 GridPosition startPosition = isForColumns ? child.style()->gridColumnStart() : child.style()->gridRowStart(); 1503 GridPosition startPosition = isForColumns ? child.style()->gridColumnStart() : child.style()->gridRowStart();
1504 GridPosition endPosition = isForColumns ? child.style()->gridColumnEnd() : c hild.style()->gridRowEnd(); 1504 GridPosition endPosition = isForColumns ? child.style()->gridColumnEnd() : c hild.style()->gridRowEnd();
1505 int firstExplicitLine = smallestStart; 1505 int firstExplicitLine = smallestStart;
1506 int lastExplicitLine = (isForColumns ? GridResolvedPosition::explicitGridCol umnCount(styleRef()) : GridResolvedPosition::explicitGridRowCount(styleRef())) + smallestStart; 1506 int lastExplicitLine = (isForColumns ? GridPositionsResolver::explicitGridCo lumnCount(styleRef()) : GridPositionsResolver::explicitGridRowCount(styleRef())) + smallestStart;
1507 1507
1508 bool startIsAuto = startPosition.isAuto() 1508 bool startIsAuto = startPosition.isAuto()
1509 || (startPosition.isNamedGridArea() && !GridResolvedPosition::isValidNam edLineOrArea(startPosition.namedGridLine(), styleRef(), GridResolvedPosition::in itialPositionSide(direction))) 1509 || (startPosition.isNamedGridArea() && !GridPositionsResolver::isValidNa medLineOrArea(startPosition.namedGridLine(), styleRef(), GridPositionsResolver:: initialPositionSide(direction)))
1510 || (resolvedInitialPosition < firstExplicitLine) 1510 || (resolvedInitialPosition < firstExplicitLine)
1511 || (resolvedInitialPosition > lastExplicitLine); 1511 || (resolvedInitialPosition > lastExplicitLine);
1512 bool endIsAuto = endPosition.isAuto() 1512 bool endIsAuto = endPosition.isAuto()
1513 || (endPosition.isNamedGridArea() && !GridResolvedPosition::isValidNamed LineOrArea(endPosition.namedGridLine(), styleRef(), GridResolvedPosition::finalP ositionSide(direction))) 1513 || (endPosition.isNamedGridArea() && !GridPositionsResolver::isValidName dLineOrArea(endPosition.namedGridLine(), styleRef(), GridPositionsResolver::fina lPositionSide(direction)))
1514 || (resolvedFinalPosition < firstExplicitLine) 1514 || (resolvedFinalPosition < firstExplicitLine)
1515 || (resolvedFinalPosition > lastExplicitLine); 1515 || (resolvedFinalPosition > lastExplicitLine);
1516 1516
1517 size_t initialPosition = startIsAuto ? 0 : resolvedInitialPosition; 1517 size_t initialPosition = startIsAuto ? 0 : resolvedInitialPosition;
1518 size_t finalPosition = endIsAuto ? lastExplicitLine : resolvedFinalPosition; 1518 size_t finalPosition = endIsAuto ? lastExplicitLine : resolvedFinalPosition;
1519 1519
1520 LayoutUnit start = startIsAuto ? LayoutUnit() : isForColumns ? m_columnPosi tions[initialPosition] : m_rowPositions[initialPosition]; 1520 LayoutUnit start = startIsAuto ? LayoutUnit() : isForColumns ? m_columnPosi tions[initialPosition] : m_rowPositions[initialPosition];
1521 LayoutUnit end = endIsAuto ? isForColumns ? logicalWidth() : logicalHeight() : isForColumns ? m_columnPositions[finalPosition] : m_rowPositions[finalPositi on]; 1521 LayoutUnit end = endIsAuto ? isForColumns ? logicalWidth() : logicalHeight() : isForColumns ? m_columnPositions[finalPosition] : m_rowPositions[finalPositi on];
1522 1522
1523 breadth = end - start; 1523 breadth = end - start;
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after
2072 2072
2073 return LayoutPoint(rowAxisOffset, columnAxisOffsetForChild(child)); 2073 return LayoutPoint(rowAxisOffset, columnAxisOffsetForChild(child));
2074 } 2074 }
2075 2075
2076 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa intOffset) const 2076 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa intOffset) const
2077 { 2077 {
2078 GridPainter(*this).paintChildren(paintInfo, paintOffset); 2078 GridPainter(*this).paintChildren(paintInfo, paintOffset);
2079 } 2079 }
2080 2080
2081 } // namespace blink 2081 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutGrid.h ('k') | third_party/WebKit/Source/core/style/GridCoordinate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698