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

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

Issue 637033003: [CSS Grid Layout] Fix positioned grid children position and size (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years 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 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 RenderBlock::addChild(newChild, beforeChild); 217 RenderBlock::addChild(newChild, beforeChild);
218 218
219 if (gridIsDirty()) 219 if (gridIsDirty())
220 return; 220 return;
221 221
222 if (!newChild->isBox()) { 222 if (!newChild->isBox()) {
223 dirtyGrid(); 223 dirtyGrid();
224 return; 224 return;
225 } 225 }
226 226
227 // Positioned items shouldn't take up space or otherwise participate in the layout of the grid.
228 if (newChild->isOutOfFlowPositioned())
229 return;
230
227 // If the new child has been inserted inside an existent anonymous block, we can simply ignore it as the anonymous 231 // If the new child has been inserted inside an existent anonymous block, we can simply ignore it as the anonymous
228 // block is an already known grid item. 232 // block is an already known grid item.
229 if (newChild->parent() != this) 233 if (newChild->parent() != this)
230 return; 234 return;
231 235
232 // FIXME: Implement properly "stack" value in auto-placement algorithm. 236 // FIXME: Implement properly "stack" value in auto-placement algorithm.
233 if (!style()->isGridAutoFlowAlgorithmStack()) { 237 if (!style()->isGridAutoFlowAlgorithmStack()) {
234 // The grid needs to be recomputed as it might contain auto-placed items that will change their position. 238 // The grid needs to be recomputed as it might contain auto-placed items that will change their position.
235 dirtyGrid(); 239 dirtyGrid();
236 return; 240 return;
237 } 241 }
238 242
239 RenderBox* newChildBox = toRenderBox(newChild); 243 RenderBox* newChildBox = toRenderBox(newChild);
240 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositionsFr omStyle(*style(), *newChildBox, ForRows); 244 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositionsFr omStyle(*style(), *newChildBox, ForRows);
241 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosition sFromStyle(*style(), *newChildBox, ForColumns); 245 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosition sFromStyle(*style(), *newChildBox, ForColumns);
242 if (!rowPositions || !columnPositions) { 246 if (!rowPositions || !columnPositions) {
243 // The new child requires the auto-placement algorithm to run so we need to recompute the grid fully. 247 // The new child requires the auto-placement algorithm to run so we need to recompute the grid fully.
244 dirtyGrid(); 248 dirtyGrid();
245 return; 249 return;
246 } else { 250 } else {
247 insertItemIntoGrid(*newChildBox, GridCoordinate(*rowPositions, *columnPo sitions)); 251 insertItemIntoGrid(*newChildBox, GridCoordinate(*rowPositions, *columnPo sitions));
248 addChildToIndexesMap(*newChildBox); 252 addChildToIndexesMap(*newChildBox);
249 } 253 }
250 } 254 }
251 255
252 void RenderGrid::addChildToIndexesMap(RenderBox& child) 256 void RenderGrid::addChildToIndexesMap(RenderBox& child)
253 { 257 {
254 ASSERT(!m_gridItemsIndexesMap.contains(&child)); 258 ASSERT(!m_gridItemsIndexesMap.contains(&child));
255 RenderBox* sibling = child.nextSiblingBox(); 259 RenderBox* sibling = child.nextInFlowSiblingBox();
256 bool lastSibling = !sibling; 260 bool lastSibling = !sibling;
257 261
258 if (lastSibling) 262 if (lastSibling)
259 sibling = child.previousSiblingBox(); 263 sibling = child.previousInFlowSiblingBox();
260 264
261 size_t index = 0; 265 size_t index = 0;
262 if (sibling) 266 if (sibling)
263 index = lastSibling ? m_gridItemsIndexesMap.get(sibling) + 1 : m_gridIte msIndexesMap.get(sibling); 267 index = lastSibling ? m_gridItemsIndexesMap.get(sibling) + 1 : m_gridIte msIndexesMap.get(sibling);
264 268
265 if (sibling && !lastSibling) { 269 if (sibling && !lastSibling) {
266 for (; sibling; sibling = sibling->nextSiblingBox()) 270 for (; sibling; sibling = sibling->nextInFlowSiblingBox())
267 m_gridItemsIndexesMap.set(sibling, m_gridItemsIndexesMap.get(sibling ) + 1); 271 m_gridItemsIndexesMap.set(sibling, m_gridItemsIndexesMap.get(sibling ) + 1);
268 } 272 }
269 273
270 m_gridItemsIndexesMap.set(&child, index); 274 m_gridItemsIndexesMap.set(&child, index);
271 } 275 }
272 276
273 void RenderGrid::removeChild(RenderObject* child) 277 void RenderGrid::removeChild(RenderObject* child)
274 { 278 {
275 RenderBlock::removeChild(child); 279 RenderBlock::removeChild(child);
276 280
277 if (gridIsDirty()) 281 if (gridIsDirty())
278 return; 282 return;
279 283
280 ASSERT(child->isBox()); 284 ASSERT(child->isBox());
281 285
282 // FIXME: Implement properly "stack" value in auto-placement algorithm. 286 // FIXME: Implement properly "stack" value in auto-placement algorithm.
283 if (!style()->isGridAutoFlowAlgorithmStack()) { 287 if (!style()->isGridAutoFlowAlgorithmStack()) {
284 // The grid needs to be recomputed as it might contain auto-placed items that will change their position. 288 // The grid needs to be recomputed as it might contain auto-placed items that will change their position.
285 dirtyGrid(); 289 dirtyGrid();
286 return; 290 return;
287 } 291 }
288 292
293 if (child->isOutOfFlowPositioned())
294 return;
295
289 const RenderBox* childBox = toRenderBox(child); 296 const RenderBox* childBox = toRenderBox(child);
290 GridCoordinate coordinate = m_gridItemCoordinate.take(childBox); 297 GridCoordinate coordinate = m_gridItemCoordinate.take(childBox);
291 298
292 for (GridSpan::iterator row = coordinate.rows.begin(); row != coordinate.row s.end(); ++row) { 299 for (GridSpan::iterator row = coordinate.rows.begin(); row != coordinate.row s.end(); ++row) {
293 for (GridSpan::iterator column = coordinate.columns.begin(); column != c oordinate.columns.end(); ++column) { 300 for (GridSpan::iterator column = coordinate.columns.begin(); column != c oordinate.columns.end(); ++column) {
294 GridCell& cell = m_grid[row.toInt()][column.toInt()]; 301 GridCell& cell = m_grid[row.toInt()][column.toInt()];
295 cell.remove(cell.find(childBox)); 302 cell.remove(cell.find(childBox));
296 } 303 }
297 } 304 }
298 305
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 907
901 populateExplicitGridAndOrderIterator(); 908 populateExplicitGridAndOrderIterator();
902 909
903 // We clear the dirty bit here as the grid sizes have been updated, this mea ns 910 // We clear the dirty bit here as the grid sizes have been updated, this mea ns
904 // that we can safely call gridRowCount() / gridColumnCount(). 911 // that we can safely call gridRowCount() / gridColumnCount().
905 m_gridIsDirty = false; 912 m_gridIsDirty = false;
906 913
907 Vector<RenderBox*> autoMajorAxisAutoGridItems; 914 Vector<RenderBox*> autoMajorAxisAutoGridItems;
908 Vector<RenderBox*> specifiedMajorAxisAutoGridItems; 915 Vector<RenderBox*> specifiedMajorAxisAutoGridItems;
909 for (RenderBox* child = m_orderIterator.first(); child; child = m_orderItera tor.next()) { 916 for (RenderBox* child = m_orderIterator.first(); child; child = m_orderItera tor.next()) {
917 if (child->isOutOfFlowPositioned())
918 continue;
919
910 // FIXME: We never re-resolve positions if the grid is grown during auto -placement which may lead auto / <integer> 920 // FIXME: We never re-resolve positions if the grid is grown during auto -placement which may lead auto / <integer>
911 // positions to not match the author's intent. The specification is uncl ear on what should be done in this case. 921 // positions to not match the author's intent. The specification is uncl ear on what should be done in this case.
912 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositio nsFromStyle(*style(), *child, ForRows); 922 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositio nsFromStyle(*style(), *child, ForRows);
913 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosi tionsFromStyle(*style(), *child, ForColumns); 923 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosi tionsFromStyle(*style(), *child, ForColumns);
914 if (!rowPositions || !columnPositions) { 924 if (!rowPositions || !columnPositions) {
915 GridSpan* majorAxisPositions = (autoPlacementMajorAxisDirection() == ForColumns) ? columnPositions.get() : rowPositions.get(); 925 GridSpan* majorAxisPositions = (autoPlacementMajorAxisDirection() == ForColumns) ? columnPositions.get() : rowPositions.get();
916 if (!majorAxisPositions) 926 if (!majorAxisPositions)
917 autoMajorAxisAutoGridItems.append(child); 927 autoMajorAxisAutoGridItems.append(child);
918 else 928 else
919 specifiedMajorAxisAutoGridItems.append(child); 929 specifiedMajorAxisAutoGridItems.append(child);
(...skipping 21 matching lines...) Expand all
941 951
942 void RenderGrid::populateExplicitGridAndOrderIterator() 952 void RenderGrid::populateExplicitGridAndOrderIterator()
943 { 953 {
944 OrderIteratorPopulator populator(m_orderIterator); 954 OrderIteratorPopulator populator(m_orderIterator);
945 955
946 size_t maximumRowIndex = std::max<size_t>(1, GridResolvedPosition::explicitG ridRowCount(*style())); 956 size_t maximumRowIndex = std::max<size_t>(1, GridResolvedPosition::explicitG ridRowCount(*style()));
947 size_t maximumColumnIndex = std::max<size_t>(1, GridResolvedPosition::explic itGridColumnCount(*style())); 957 size_t maximumColumnIndex = std::max<size_t>(1, GridResolvedPosition::explic itGridColumnCount(*style()));
948 958
949 ASSERT(m_gridItemsIndexesMap.isEmpty()); 959 ASSERT(m_gridItemsIndexesMap.isEmpty());
950 size_t childIndex = 0; 960 size_t childIndex = 0;
951 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo x()) { 961 for (RenderBox* child = firstChildBox(); child; child = child->nextInFlowSib lingBox()) {
952 populator.collectChild(child); 962 populator.collectChild(child);
953 m_gridItemsIndexesMap.set(child, childIndex++); 963 m_gridItemsIndexesMap.set(child, childIndex++);
954 964
955 // This function bypasses the cache (cachedGridCoordinate()) as it is us ed to build it. 965 // This function bypasses the cache (cachedGridCoordinate()) as it is us ed to build it.
956 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositio nsFromStyle(*style(), *child, ForRows); 966 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositio nsFromStyle(*style(), *child, ForRows);
957 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosi tionsFromStyle(*style(), *child, ForColumns); 967 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosi tionsFromStyle(*style(), *child, ForColumns);
958 968
959 // |positions| is 0 if we need to run the auto-placement algorithm. 969 // |positions| is 0 if we need to run the auto-placement algorithm.
960 if (rowPositions) { 970 if (rowPositions) {
961 maximumRowIndex = std::max<size_t>(maximumRowIndex, rowPositions->re solvedFinalPosition.next().toInt()); 971 maximumRowIndex = std::max<size_t>(maximumRowIndex, rowPositions->re solvedFinalPosition.next().toInt());
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
1102 computeUsedBreadthOfGridTracks(ForColumns, sizingData, availableSpaceForColu mns); 1112 computeUsedBreadthOfGridTracks(ForColumns, sizingData, availableSpaceForColu mns);
1103 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData.columnTracks )); 1113 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData.columnTracks ));
1104 computeUsedBreadthOfGridTracks(ForRows, sizingData, availableSpaceForRows); 1114 computeUsedBreadthOfGridTracks(ForRows, sizingData, availableSpaceForRows);
1105 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData.rowTracks)); 1115 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData.rowTracks));
1106 1116
1107 populateGridPositions(sizingData, availableSpaceForColumns, availableSpaceFo rRows); 1117 populateGridPositions(sizingData, availableSpaceForColumns, availableSpaceFo rRows);
1108 m_gridItemsOverflowingGridArea.resize(0); 1118 m_gridItemsOverflowingGridArea.resize(0);
1109 1119
1110 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo x()) { 1120 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo x()) {
1111 if (child->isOutOfFlowPositioned()) { 1121 if (child->isOutOfFlowPositioned()) {
1112 // FIXME: Absolute positioned grid items should have a special
1113 // behavior as described in the spec (crbug.com/273898):
1114 // http://www.w3.org/TR/css-grid-1/#abspos-items
1115 child->containingBlock()->insertPositionedObject(child); 1122 child->containingBlock()->insertPositionedObject(child);
1123 continue;
1116 } 1124 }
1117 1125
1118 // Because the grid area cannot be styled, we don't need to adjust 1126 // Because the grid area cannot be styled, we don't need to adjust
1119 // the grid breadth to account for 'box-sizing'. 1127 // the grid breadth to account for 'box-sizing'.
1120 LayoutUnit oldOverrideContainingBlockContentLogicalWidth = child->hasOve rrideContainingBlockLogicalWidth() ? child->overrideContainingBlockContentLogica lWidth() : LayoutUnit(); 1128 LayoutUnit oldOverrideContainingBlockContentLogicalWidth = child->hasOve rrideContainingBlockLogicalWidth() ? child->overrideContainingBlockContentLogica lWidth() : LayoutUnit();
1121 LayoutUnit oldOverrideContainingBlockContentLogicalHeight = child->hasOv errideContainingBlockLogicalHeight() ? child->overrideContainingBlockContentLogi calHeight() : LayoutUnit(); 1129 LayoutUnit oldOverrideContainingBlockContentLogicalHeight = child->hasOv errideContainingBlockLogicalHeight() ? child->overrideContainingBlockContentLogi calHeight() : LayoutUnit();
1122 1130
1123 LayoutUnit overrideContainingBlockContentLogicalWidth = gridAreaBreadthF orChild(*child, ForColumns, sizingData.columnTracks); 1131 LayoutUnit overrideContainingBlockContentLogicalWidth = gridAreaBreadthF orChild(*child, ForColumns, sizingData.columnTracks);
1124 LayoutUnit overrideContainingBlockContentLogicalHeight = gridAreaBreadth ForChild(*child, ForRows, sizingData.rowTracks); 1132 LayoutUnit overrideContainingBlockContentLogicalHeight = gridAreaBreadth ForChild(*child, ForRows, sizingData.rowTracks);
1125 1133
(...skipping 23 matching lines...) Expand all
1149 } 1157 }
1150 1158
1151 for (size_t i = 0; i < sizingData.rowTracks.size(); ++i) 1159 for (size_t i = 0; i < sizingData.rowTracks.size(); ++i)
1152 setLogicalHeight(logicalHeight() + sizingData.rowTracks[i].m_usedBreadth ); 1160 setLogicalHeight(logicalHeight() + sizingData.rowTracks[i].m_usedBreadth );
1153 1161
1154 // Min / max logical height is handled by the call to updateLogicalHeight in layoutBlock. 1162 // Min / max logical height is handled by the call to updateLogicalHeight in layoutBlock.
1155 1163
1156 setLogicalHeight(logicalHeight() + borderAndPaddingLogicalHeight()); 1164 setLogicalHeight(logicalHeight() + borderAndPaddingLogicalHeight());
1157 } 1165 }
1158 1166
1167 void RenderGrid::layoutPositionedObjects(bool relayoutChildren, PositionedLayout Behavior info)
1168 {
1169 TrackedRendererListHashSet* positionedDescendants = positionedObjects();
1170 if (!positionedDescendants)
1171 return;
1172
1173 bool containerHasHorizontalWritingMode = isHorizontalWritingMode();
1174 TrackedRendererListHashSet::iterator end = positionedDescendants->end();
1175 for (TrackedRendererListHashSet::iterator it = positionedDescendants->begin( ); it != end; ++it) {
1176 RenderBox* child = *it;
1177
1178 bool hasOrthogonalWritingMode = child->isHorizontalWritingMode() != cont ainerHasHorizontalWritingMode;
1179 if (hasOrthogonalWritingMode) {
1180 // FIXME: Properly support orthogonal writing mode.
1181 continue;
1182 }
1183
1184 // FIXME: Detect properly if start/end is auto for inexistent named grid lines.
1185 bool columnStartIsAuto = child->style()->gridColumnStart().isAuto();
1186 LayoutUnit columnOffset = LayoutUnit(0);
1187 LayoutUnit columnBreadth = LayoutUnit(0);
1188 offsetAndBreadthForPositionedChild(*child, ForColumns, columnStartIsAuto , child->style()->gridColumnEnd().isAuto(), columnOffset, columnBreadth);
1189 bool rowStartIsAuto = child->style()->gridRowStart().isAuto();
1190 LayoutUnit rowOffset = LayoutUnit(0);
1191 LayoutUnit rowBreadth = LayoutUnit(0);
1192 offsetAndBreadthForPositionedChild(*child, ForRows, rowStartIsAuto, chil d->style()->gridRowEnd().isAuto(), rowOffset, rowBreadth);
1193
1194 child->setOverrideContainingBlockContentLogicalWidth(columnBreadth);
1195 child->setOverrideContainingBlockContentLogicalHeight(rowBreadth);
1196 child->setExtraInlineOffset(columnOffset);
1197 child->setExtraBlockOffset(rowOffset);
1198
1199 if (child->parent() == this) {
1200 // If column/row start is not auto the padding has been already comp uted in offsetAndBreadthForPositionedChild().
1201 RenderLayer* childLayer = child->layer();
1202 if (columnStartIsAuto)
1203 childLayer->setStaticInlinePosition(borderAndPaddingStart());
1204 else
1205 childLayer->setStaticInlinePosition(borderStart() + columnOffset );
1206 if (rowStartIsAuto)
1207 childLayer->setStaticBlockPosition(borderAndPaddingBefore());
1208 else
1209 childLayer->setStaticBlockPosition(borderBefore() + rowOffset);
1210 }
1211 }
1212
1213 RenderBlock::layoutPositionedObjects(relayoutChildren, info);
1214 }
1215
1216 void RenderGrid::offsetAndBreadthForPositionedChild(const RenderBox& child, Grid TrackSizingDirection direction, bool startIsAuto, bool endIsAuto, LayoutUnit& of fset, LayoutUnit& breadth)
1217 {
1218 ASSERT(child.isHorizontalWritingMode() == isHorizontalWritingMode());
1219
1220 OwnPtr<GridSpan> positions = GridResolvedPosition::resolveGridPositionsFromS tyle(*style(), child, direction);
1221 if (!positions) {
1222 offset = LayoutUnit(0);
1223 breadth = (direction == ForColumns) ? clientLogicalWidth() : clientLogic alHeight();
1224 return;
1225 }
1226
1227 GridResolvedPosition firstPosition = GridResolvedPosition(0);
1228 GridResolvedPosition initialPosition = startIsAuto ? firstPosition : positio ns->resolvedInitialPosition;
1229 GridResolvedPosition lastPosition = GridResolvedPosition((direction == ForCo lumns ? gridColumnCount() : gridRowCount()) - 1);
1230 GridResolvedPosition finalPosition = endIsAuto ? lastPosition : positions->r esolvedFinalPosition;
1231
1232 LayoutUnit start = startIsAuto ? LayoutUnit(0) : (direction == ForColumns) ? m_columnPositions[initialPosition.toInt()] : m_rowPositions[initialPosition.to Int()];
1233 LayoutUnit end = endIsAuto ? (direction == ForColumns) ? logicalWidth() : lo gicalHeight() : (direction == ForColumns) ? m_columnPositions[finalPosition.nex t().toInt()] : m_rowPositions[finalPosition.next().toInt()];
1234
1235 breadth = end - start;
1236
1237 if (startIsAuto)
1238 breadth -= (direction == ForColumns) ? borderStart() : borderBefore();
1239 else
1240 start -= ((direction == ForColumns) ? borderStart() : borderBefore());
1241
1242 if (endIsAuto) {
1243 breadth -= (direction == ForColumns) ? borderEnd() : borderAfter();
1244 breadth -= scrollbarLogicalWidth();
1245 }
1246
1247 offset = start;
1248 }
1249
1159 GridCoordinate RenderGrid::cachedGridCoordinate(const RenderBox& gridItem) const 1250 GridCoordinate RenderGrid::cachedGridCoordinate(const RenderBox& gridItem) const
1160 { 1251 {
1161 ASSERT(m_gridItemCoordinate.contains(&gridItem)); 1252 ASSERT(m_gridItemCoordinate.contains(&gridItem));
1162 return m_gridItemCoordinate.get(&gridItem); 1253 return m_gridItemCoordinate.get(&gridItem);
1163 } 1254 }
1164 1255
1165 LayoutUnit RenderGrid::gridAreaBreadthForChild(const RenderBox& child, GridTrack SizingDirection direction, const Vector<GridTrack>& tracks) const 1256 LayoutUnit RenderGrid::gridAreaBreadthForChild(const RenderBox& child, GridTrack SizingDirection direction, const Vector<GridTrack>& tracks) const
1166 { 1257 {
1167 const GridCoordinate& coordinate = cachedGridCoordinate(child); 1258 const GridCoordinate& coordinate = cachedGridCoordinate(child);
1168 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor dinate.rows; 1259 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor dinate.rows;
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
1602 if (isOutOfFlowPositioned()) 1693 if (isOutOfFlowPositioned())
1603 return "RenderGrid (positioned)"; 1694 return "RenderGrid (positioned)";
1604 if (isAnonymous()) 1695 if (isAnonymous())
1605 return "RenderGrid (generated)"; 1696 return "RenderGrid (generated)";
1606 if (isRelPositioned()) 1697 if (isRelPositioned())
1607 return "RenderGrid (relative positioned)"; 1698 return "RenderGrid (relative positioned)";
1608 return "RenderGrid"; 1699 return "RenderGrid";
1609 } 1700 }
1610 1701
1611 } // namespace blink 1702 } // 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