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

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

Issue 148293008: [CSS Grid Layout] Add support to place items using named grid lines (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: New approach Created 6 years, 9 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 | « Source/core/rendering/RenderGrid.h ('k') | Source/core/rendering/style/GridCoordinate.h » ('j') | 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 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 RenderBlock::removeChild(child); 212 RenderBlock::removeChild(child);
213 213
214 if (gridIsDirty()) 214 if (gridIsDirty())
215 return; 215 return;
216 216
217 ASSERT(child->isBox()); 217 ASSERT(child->isBox());
218 // FIXME: We could avoid dirtying the grid in some cases (e.g. if it's an ex plicitly positioned element). 218 // FIXME: We could avoid dirtying the grid in some cases (e.g. if it's an ex plicitly positioned element).
219 dirtyGrid(); 219 dirtyGrid();
220 } 220 }
221 221
222 void RenderGrid::createGridLineNamesMapsForDirection(GridTrackSizingDirection di rection)
223 {
224 NamedGridLinesMap& gridLinesMap = (direction == ForColumns) ? m_namedGridCol umnLines : m_namedGridRowLines;
225 const OrderedNamedGridLines& orderedLinesMap = (direction == ForColumns) ? s tyle()->orderedNamedGridColumnLines() : style()->orderedNamedGridRowLines();
226
227 gridLinesMap.clear();
228 OrderedNamedGridLines::const_iterator orderedLinesEnd = orderedLinesMap.end( );
229 for (OrderedNamedGridLines::const_iterator it = orderedLinesMap.begin(); it != orderedLinesEnd; ++it) {
230 const Vector<String> gridLineNames = it->value;
231 for (size_t i = 0; i < gridLineNames.size(); ++i) {
232 NamedGridLinesMap::AddResult result = gridLinesMap.add(gridLineNames [i], Vector<size_t>());
233 result.storedValue->value.append(it->key);
234 }
235 }
236
237 NamedGridAreaMap::const_iterator gridAreasEnd = style()->namedGridArea().end ();
238 for (NamedGridAreaMap::const_iterator it = style()->namedGridArea().begin(); it != gridAreasEnd; ++it) {
239 GridSpan areaSpan = direction == ForRows ? it->value.rows : it->value.co lumns;
240
241 NamedGridLinesMap::AddResult startResult = gridLinesMap.add(it->key + "- start", Vector<size_t>());
242 startResult.storedValue->value.append(areaSpan.initialPositionIndex);
243 NamedGridLinesMap::AddResult endResult = gridLinesMap.add(it->key + "-en d", Vector<size_t>());
244 endResult.storedValue->value.append(areaSpan.finalPositionIndex + 1);
245 }
246
247 NamedGridLinesMap::const_iterator namedLinesEnd = gridLinesMap.end();
248 for (NamedGridLinesMap::iterator it = gridLinesMap.begin(); it != namedLine sEnd; ++it)
249 std::sort(it->value.begin(), it->value.end());
250 }
251
222 void RenderGrid::styleDidChange(StyleDifference diff, const RenderStyle* oldStyl e) 252 void RenderGrid::styleDidChange(StyleDifference diff, const RenderStyle* oldStyl e)
223 { 253 {
224 RenderBlock::styleDidChange(diff, oldStyle); 254 RenderBlock::styleDidChange(diff, oldStyle);
255
256 bool gridLinesDefinitionChanged = namedGridLinesDefinitionDidChange(oldStyle );
257 if (gridLinesDefinitionChanged) {
258 createGridLineNamesMapsForDirection(ForColumns);
259 createGridLineNamesMapsForDirection(ForRows);
260 }
261
225 if (!oldStyle) 262 if (!oldStyle)
226 return; 263 return;
227 264
228 // FIXME: The following checks could be narrowed down if we kept track of wh ich type of grid items we have: 265 // FIXME: The following checks could be narrowed down if we kept track of wh ich type of grid items we have:
229 // - explicit grid size changes impact negative explicitely positioned and a uto-placed grid items. 266 // - explicit grid size changes impact negative explicitely positioned and a uto-placed grid items.
230 // - named grid lines only impact grid items with named grid lines. 267 // - named grid lines only impact grid items with named grid lines.
231 // - auto-flow changes only impacts auto-placed children. 268 // - auto-flow changes only impacts auto-placed children.
232 269
233 if (explicitGridDidResize(oldStyle) 270 if (explicitGridDidResize(oldStyle) || gridLinesDefinitionChanged || oldStyl e->gridAutoFlow() != style()->gridAutoFlow())
234 || namedGridLinesDefinitionDidChange(oldStyle)
235 || oldStyle->gridAutoFlow() != style()->gridAutoFlow())
236 dirtyGrid(); 271 dirtyGrid();
237 } 272 }
238 273
239 bool RenderGrid::explicitGridDidResize(const RenderStyle* oldStyle) const 274 bool RenderGrid::explicitGridDidResize(const RenderStyle* oldStyle) const
240 { 275 {
241 return oldStyle->gridTemplateColumns().size() != style()->gridTemplateColumn s().size() 276 return oldStyle->gridTemplateColumns().size() != style()->gridTemplateColumn s().size()
242 || oldStyle->gridTemplateRows().size() != style()->gridTemplateRows().si ze(); 277 || oldStyle->gridTemplateRows().size() != style()->gridTemplateRows().si ze();
243 } 278 }
244 279
245 bool RenderGrid::namedGridLinesDefinitionDidChange(const RenderStyle* oldStyle) const 280 bool RenderGrid::namedGridLinesDefinitionDidChange(const RenderStyle* oldStyle) const
246 { 281 {
247 return oldStyle->namedGridRowLines() != style()->namedGridRowLines() 282 if (!oldStyle)
248 || oldStyle->namedGridColumnLines() != style()->namedGridColumnLines(); 283 return true;
284
285 return oldStyle->orderedNamedGridRowLines() != style()->orderedNamedGridRowL ines()
286 || oldStyle->orderedNamedGridColumnLines() != style()->orderedNamedGridC olumnLines()
287 || oldStyle->namedGridArea() != style()->namedGridArea();
249 } 288 }
250 289
251 void RenderGrid::layoutBlock(bool relayoutChildren) 290 void RenderGrid::layoutBlock(bool relayoutChildren)
252 { 291 {
253 ASSERT(needsLayout()); 292 ASSERT(needsLayout());
254 293
255 if (!relayoutChildren && simplifiedLayout()) 294 if (!relayoutChildren && simplifiedLayout())
256 return; 295 return;
257 296
258 // FIXME: Much of this method is boiler plate that matches RenderBox::layout Block and Render*FlexibleBox::layoutBlock. 297 // FIXME: Much of this method is boiler plate that matches RenderBox::layout Block and Render*FlexibleBox::layoutBlock.
(...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 return m_gridItemCoordinate.get(gridItem); 1000 return m_gridItemCoordinate.get(gridItem);
962 } 1001 }
963 1002
964 GridSpan RenderGrid::resolveGridPositionsFromAutoPlacementPosition(const RenderB ox*, GridTrackSizingDirection, size_t initialPosition) const 1003 GridSpan RenderGrid::resolveGridPositionsFromAutoPlacementPosition(const RenderB ox*, GridTrackSizingDirection, size_t initialPosition) const
965 { 1004 {
966 // FIXME: We don't support spanning with auto positions yet. Once we do, thi s is wrong. Also we should make 1005 // FIXME: We don't support spanning with auto positions yet. Once we do, thi s is wrong. Also we should make
967 // sure the grid can accomodate the new item as we only grow 1 position in a given direction. 1006 // sure the grid can accomodate the new item as we only grow 1 position in a given direction.
968 return GridSpan(initialPosition, initialPosition); 1007 return GridSpan(initialPosition, initialPosition);
969 } 1008 }
970 1009
1010 static bool isNonExistentNamedLineOrArea(GridPosition& position, RenderStyle& st yle, const NamedGridLinesMap& gridLinesMap)
1011 {
1012 ASSERT(position.isNamedGridArea());
1013 String lineName = position.namedGridLine();
1014
1015 return !style.namedGridArea().contains(lineName) && !gridLinesMap.contains(l ineName);
1016 }
1017
971 PassOwnPtr<GridSpan> RenderGrid::resolveGridPositionsFromStyle(const RenderBox* gridItem, GridTrackSizingDirection direction) const 1018 PassOwnPtr<GridSpan> RenderGrid::resolveGridPositionsFromStyle(const RenderBox* gridItem, GridTrackSizingDirection direction) const
972 { 1019 {
973 GridPosition initialPosition = (direction == ForColumns) ? gridItem->style() ->gridColumnStart() : gridItem->style()->gridRowStart(); 1020 GridPosition initialPosition = (direction == ForColumns) ? gridItem->style() ->gridColumnStart() : gridItem->style()->gridRowStart();
974 const GridPositionSide initialPositionSide = (direction == ForColumns) ? Col umnStartSide : RowStartSide; 1021 const GridPositionSide initialPositionSide = (direction == ForColumns) ? Col umnStartSide : RowStartSide;
975 GridPosition finalPosition = (direction == ForColumns) ? gridItem->style()-> gridColumnEnd() : gridItem->style()->gridRowEnd(); 1022 GridPosition finalPosition = (direction == ForColumns) ? gridItem->style()-> gridColumnEnd() : gridItem->style()->gridRowEnd();
976 const GridPositionSide finalPositionSide = (direction == ForColumns) ? Colum nEndSide : RowEndSide; 1023 const GridPositionSide finalPositionSide = (direction == ForColumns) ? Colum nEndSide : RowEndSide;
1024 const NamedGridLinesMap& gridLines = (direction == ForColumns) ? m_namedGrid ColumnLines : m_namedGridRowLines;
977 1025
978 // We must handle the placement error handling code here instead of in the S tyleAdjuster because we don't want to 1026 // We must handle the placement error handling code here instead of in the S tyleAdjuster because we don't want to
979 // overwrite the specified values. 1027 // overwrite the specified values.
980 if (initialPosition.isSpan() && finalPosition.isSpan()) 1028 if (initialPosition.isSpan() && finalPosition.isSpan())
981 finalPosition.setAutoPosition(); 1029 finalPosition.setAutoPosition();
982 1030
983 if (initialPosition.isNamedGridArea() && !style()->namedGridArea().contains( initialPosition.namedGridLine())) 1031 if (initialPosition.isNamedGridArea() && isNonExistentNamedLineOrArea(initia lPosition, *style(), gridLines))
984 initialPosition.setAutoPosition(); 1032 initialPosition.setAutoPosition();
985 1033
986 if (finalPosition.isNamedGridArea() && !style()->namedGridArea().contains(fi nalPosition.namedGridLine())) 1034 if (finalPosition.isNamedGridArea() && isNonExistentNamedLineOrArea(finalPos ition, *style(), gridLines))
987 finalPosition.setAutoPosition(); 1035 finalPosition.setAutoPosition();
988 1036
989 if (initialPosition.shouldBeResolvedAgainstOppositePosition() && finalPositi on.shouldBeResolvedAgainstOppositePosition()) { 1037 if (initialPosition.shouldBeResolvedAgainstOppositePosition() && finalPositi on.shouldBeResolvedAgainstOppositePosition()) {
990 if (style()->gridAutoFlow() == AutoFlowNone) 1038 if (style()->gridAutoFlow() == AutoFlowNone)
991 return adoptPtr(new GridSpan(0, 0)); 1039 return adoptPtr(new GridSpan(0, 0));
992 1040
993 // We can't get our grid positions without running the auto placement al gorithm. 1041 // We can't get our grid positions without running the auto placement al gorithm.
994 return nullptr; 1042 return nullptr;
995 } 1043 }
996 1044
(...skipping 16 matching lines...) Expand all
1013 if (resolvedFinalPosition < resolvedInitialPosition) 1061 if (resolvedFinalPosition < resolvedInitialPosition)
1014 resolvedFinalPosition = resolvedInitialPosition; 1062 resolvedFinalPosition = resolvedInitialPosition;
1015 1063
1016 return adoptPtr(new GridSpan(resolvedInitialPosition, resolvedFinalPosition) ); 1064 return adoptPtr(new GridSpan(resolvedInitialPosition, resolvedFinalPosition) );
1017 } 1065 }
1018 1066
1019 size_t RenderGrid::resolveNamedGridLinePositionFromStyle(const GridPosition& pos ition, GridPositionSide side) const 1067 size_t RenderGrid::resolveNamedGridLinePositionFromStyle(const GridPosition& pos ition, GridPositionSide side) const
1020 { 1068 {
1021 ASSERT(!position.namedGridLine().isNull()); 1069 ASSERT(!position.namedGridLine().isNull());
1022 1070
1023 const NamedGridLinesMap& gridLinesNames = (side == ColumnStartSide || side = = ColumnEndSide) ? style()->namedGridColumnLines() : style()->namedGridRowLines( ); 1071 const NamedGridLinesMap& gridLinesNames = gridLinesForSide(side);
1024 NamedGridLinesMap::const_iterator it = gridLinesNames.find(position.namedGri dLine()); 1072 NamedGridLinesMap::const_iterator it = gridLinesNames.find(position.namedGri dLine());
1025 if (it == gridLinesNames.end()) { 1073 if (it == gridLinesNames.end()) {
1026 if (position.isPositive()) 1074 if (position.isPositive())
1027 return 0; 1075 return 0;
1028 const size_t lastLine = explicitGridSizeForSide(side); 1076 const size_t lastLine = explicitGridSizeForSide(side);
1029 return GridPosition::adjustGridPositionForSide(lastLine, side); 1077 return GridPosition::adjustGridPositionForSide(lastLine, side);
1030 } 1078 }
1031 1079
1032 size_t namedGridLineIndex; 1080 size_t namedGridLineIndex;
1033 if (position.isPositive()) 1081 if (position.isPositive())
1034 namedGridLineIndex = std::min<size_t>(position.integerPosition(), it->va lue.size()) - 1; 1082 namedGridLineIndex = std::min<size_t>(position.integerPosition(), it->va lue.size()) - 1;
1035 else 1083 else
1036 namedGridLineIndex = std::max<int>(it->value.size() - abs(position.integ erPosition()), 0); 1084 namedGridLineIndex = std::max<int>(it->value.size() - abs(position.integ erPosition()), 0);
1037 return GridPosition::adjustGridPositionForSide(it->value[namedGridLineIndex] , side); 1085 return GridPosition::adjustGridPositionForSide(it->value[namedGridLineIndex] , side);
1038 } 1086 }
1039 1087
1040 size_t RenderGrid::resolveGridPositionFromStyle(const GridPosition& position, Gr idPositionSide side) const 1088 size_t RenderGrid::resolveGridPositionFromStyle(const GridPosition& position, Gr idPositionSide side) const
1041 { 1089 {
1042 switch (position.type()) { 1090 ASSERT(position.type() == NamedGridAreaPosition || position.type() == Explic itPosition);
1043 case ExplicitPosition: {
1044 ASSERT(position.integerPosition());
1045 1091
1046 if (!position.namedGridLine().isNull()) 1092 GridPosition adjustedPosition = position;
1047 return resolveNamedGridLinePositionFromStyle(position, side);
1048 1093
1049 // Handle <integer> explicit position. 1094 if (position.type() == NamedGridAreaPosition) {
1050 if (position.isPositive()) 1095 NamedGridAreaMap::const_iterator areaIter = style()->namedGridArea().fin d(position.namedGridLine());
Julien - ping for review 2014/03/20 18:14:42 I think it would be worth a FIXME / comment about
1051 return GridPosition::adjustGridPositionForSide(position.integerPosit ion() - 1, side); 1096 if (areaIter != style()->namedGridArea().end()) {
1097 String implicitNamedGridLine = position.namedGridLine() + ((side == ColumnStartSide || side == RowStartSide) ? "-start" : "-end");
1098 const NamedGridLinesMap& gridLineNames = gridLinesForSide(side);
1099 NamedGridLinesMap::const_iterator lineIter = gridLineNames.find(impl icitNamedGridLine);
1052 1100
1053 size_t resolvedPosition = abs(position.integerPosition()) - 1; 1101 if (lineIter != gridLineNames.end())
1054 const size_t endOfTrack = explicitGridSizeForSide(side); 1102 return GridPosition::adjustGridPositionForSide(lineIter->value[0 ], side);
1055 1103
1056 // Per http://lists.w3.org/Archives/Public/www-style/2013Mar/0589.html, we clamp negative value to the first line. 1104 return areaIter->value.positionForSide(side);
1057 if (endOfTrack < resolvedPosition) 1105 }
1058 return 0; 1106 // Fallback to a grid line position if there is no grid area with that n ame.
1107 adjustedPosition.setExplicitPosition(1, position.namedGridLine());
1108 }
1059 1109
1060 return GridPosition::adjustGridPositionForSide(endOfTrack - resolvedPosi tion, side); 1110 ASSERT(adjustedPosition.integerPosition());
Julien - ping for review 2014/03/20 18:14:42 This really looks like we should move it to a func
1061 } 1111
1062 case NamedGridAreaPosition: 1112 if (!adjustedPosition.namedGridLine().isNull())
1063 { 1113 return resolveNamedGridLinePositionFromStyle(adjustedPosition, side);
1064 NamedGridAreaMap::const_iterator it = style()->namedGridArea().find(posi tion.namedGridLine()); 1114
1065 // Unknown grid area should have been computed to 'auto' by now. 1115 // Handle <integer> explicit position.
1066 ASSERT_WITH_SECURITY_IMPLICATION(it != style()->namedGridArea().end()); 1116 if (adjustedPosition.isPositive())
1067 const GridCoordinate& gridAreaCoordinate = it->value; 1117 return GridPosition::adjustGridPositionForSide(adjustedPosition.integerP osition() - 1, side);
1068 switch (side) { 1118
1069 case ColumnStartSide: 1119 size_t resolvedPosition = abs(adjustedPosition.integerPosition()) - 1;
1070 return gridAreaCoordinate.columns.initialPositionIndex; 1120 const size_t endOfTrack = explicitGridSizeForSide(side);
1071 case ColumnEndSide: 1121
1072 return gridAreaCoordinate.columns.finalPositionIndex; 1122 // Per http://lists.w3.org/Archives/Public/www-style/2013Mar/0589.html, we c lamp negative value to the first line.
1073 case RowStartSide: 1123 if (endOfTrack < resolvedPosition)
1074 return gridAreaCoordinate.rows.initialPositionIndex;
1075 case RowEndSide:
1076 return gridAreaCoordinate.rows.finalPositionIndex;
1077 }
1078 ASSERT_NOT_REACHED();
1079 return 0; 1124 return 0;
1080 } 1125
1081 case AutoPosition: 1126 return GridPosition::adjustGridPositionForSide(endOfTrack - resolvedPosition , side);
1082 case SpanPosition:
1083 // 'auto' and span depend on the opposite position for resolution (e.g. grid-row: auto / 1 or grid-column: span 3 / "myHeader").
Julien - ping for review 2014/03/20 18:14:42 I liked this comment as it explained why we should
1084 ASSERT_NOT_REACHED();
1085 return 0;
1086 }
1087 ASSERT_NOT_REACHED();
1088 return 0;
1089 } 1127 }
1090 1128
1091 PassOwnPtr<GridSpan> RenderGrid::resolveGridPositionAgainstOppositePosition(size _t resolvedOppositePosition, const GridPosition& position, GridPositionSide side ) const 1129 PassOwnPtr<GridSpan> RenderGrid::resolveGridPositionAgainstOppositePosition(size _t resolvedOppositePosition, const GridPosition& position, GridPositionSide side ) const
1092 { 1130 {
1093 if (position.isAuto()) 1131 if (position.isAuto())
1094 return GridSpan::create(resolvedOppositePosition, resolvedOppositePositi on); 1132 return GridSpan::create(resolvedOppositePosition, resolvedOppositePositi on);
1095 1133
1096 ASSERT(position.isSpan()); 1134 ASSERT(position.isSpan());
1097 ASSERT(position.spanPosition() > 0); 1135 ASSERT(position.spanPosition() > 0);
1098 1136
1099 if (!position.namedGridLine().isNull()) { 1137 if (!position.namedGridLine().isNull()) {
1100 // span 2 'c' -> we need to find the appropriate grid line before / afte r our opposite position. 1138 // span 2 'c' -> we need to find the appropriate grid line before / afte r our opposite position.
1101 return resolveNamedGridLinePositionAgainstOppositePosition(resolvedOppos itePosition, position, side); 1139 return resolveNamedGridLinePositionAgainstOppositePosition(resolvedOppos itePosition, position, side);
1102 } 1140 }
1103 1141
1104 return GridSpan::createWithSpanAgainstOpposite(resolvedOppositePosition, pos ition, side); 1142 return GridSpan::createWithSpanAgainstOpposite(resolvedOppositePosition, pos ition, side);
1105 } 1143 }
1106 1144
1107 PassOwnPtr<GridSpan> RenderGrid::resolveNamedGridLinePositionAgainstOppositePosi tion(size_t resolvedOppositePosition, const GridPosition& position, GridPosition Side side) const 1145 PassOwnPtr<GridSpan> RenderGrid::resolveNamedGridLinePositionAgainstOppositePosi tion(size_t resolvedOppositePosition, const GridPosition& position, GridPosition Side side) const
1108 { 1146 {
1109 ASSERT(position.isSpan()); 1147 ASSERT(position.isSpan());
1110 ASSERT(!position.namedGridLine().isNull()); 1148 ASSERT(!position.namedGridLine().isNull());
1111 // Negative positions are not allowed per the specification and should have been handled during parsing. 1149 // Negative positions are not allowed per the specification and should have been handled during parsing.
1112 ASSERT(position.spanPosition() > 0); 1150 ASSERT(position.spanPosition() > 0);
1113 1151
1114 const NamedGridLinesMap& gridLinesNames = (side == ColumnStartSide || side = = ColumnEndSide) ? style()->namedGridColumnLines() : style()->namedGridRowLines( ); 1152 const NamedGridLinesMap& gridLinesNames = gridLinesForSide(side);
1115 NamedGridLinesMap::const_iterator it = gridLinesNames.find(position.namedGri dLine()); 1153 NamedGridLinesMap::const_iterator it = gridLinesNames.find(position.namedGri dLine());
1116 1154
1117 // If there is no named grid line of that name, we resolve the position to ' auto' (which is equivalent to 'span 1' in this case). 1155 // If there is no named grid line of that name, we resolve the position to ' auto' (which is equivalent to 'span 1' in this case).
1118 // See http://lists.w3.org/Archives/Public/www-style/2013Jun/0394.html. 1156 // See http://lists.w3.org/Archives/Public/www-style/2013Jun/0394.html.
1119 if (it == gridLinesNames.end()) 1157 if (it == gridLinesNames.end())
1120 return GridSpan::create(resolvedOppositePosition, resolvedOppositePositi on); 1158 return GridSpan::create(resolvedOppositePosition, resolvedOppositePositi on);
1121 1159
1122 return GridSpan::createWithNamedSpanAgainstOpposite(resolvedOppositePosition , position, side, it->value); 1160 return GridSpan::createWithNamedSpanAgainstOpposite(resolvedOppositePosition , position, side, it->value);
1123 } 1161 }
1124 1162
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 if (isOutOfFlowPositioned()) 1420 if (isOutOfFlowPositioned())
1383 return "RenderGrid (positioned)"; 1421 return "RenderGrid (positioned)";
1384 if (isAnonymous()) 1422 if (isAnonymous())
1385 return "RenderGrid (generated)"; 1423 return "RenderGrid (generated)";
1386 if (isRelPositioned()) 1424 if (isRelPositioned())
1387 return "RenderGrid (relative positioned)"; 1425 return "RenderGrid (relative positioned)";
1388 return "RenderGrid"; 1426 return "RenderGrid";
1389 } 1427 }
1390 1428
1391 } // namespace WebCore 1429 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderGrid.h ('k') | Source/core/rendering/style/GridCoordinate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698