Changeset 192054 in webkit
- Timestamp:
- Nov 5, 2015 1:30:30 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 18 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r192043 r192054 1 2015-11-05 Manuel Rego Casasnovas <rego@igalia.com> 2 3 [css-grid] Support positioned grid children 4 https://bugs.webkit.org/show_bug.cgi?id=150837 5 6 Reviewed by Darin Adler. 7 8 * fast/css-grid-layout/absolute-positioning-grid-container-containing-block-expected.txt: Added. 9 * fast/css-grid-layout/absolute-positioning-grid-container-containing-block.html: Added. 10 * fast/css-grid-layout/absolute-positioning-grid-container-parent-expected.txt: Added. 11 * fast/css-grid-layout/absolute-positioning-grid-container-parent.html: Added. 12 * fast/css-grid-layout/grid-positioned-items-background-expected.html: Added. 13 * fast/css-grid-layout/grid-positioned-items-background.html: Added. 14 * fast/css-grid-layout/grid-positioned-items-implicit-grid-expected.txt: Added. 15 * fast/css-grid-layout/grid-positioned-items-implicit-grid-line-expected.txt: Added. 16 * fast/css-grid-layout/grid-positioned-items-implicit-grid-line.html: Added. 17 * fast/css-grid-layout/grid-positioned-items-implicit-grid.html: Added. 18 * fast/css-grid-layout/grid-positioned-items-unknown-named-grid-line-expected.txt: Added. 19 * fast/css-grid-layout/grid-positioned-items-unknown-named-grid-line.html: Added. 20 * fast/css-grid-layout/grid-sizing-positioned-items-expected.txt: Added. 21 * fast/css-grid-layout/grid-sizing-positioned-items.html: Added. 22 * fast/css-grid-layout/positioned-grid-items-should-not-create-implicit-tracks-expected.txt: Added. 23 * fast/css-grid-layout/positioned-grid-items-should-not-create-implicit-tracks.html: Added. 24 * fast/css-grid-layout/positioned-grid-items-should-not-take-up-space-expected.txt: Added. 25 * fast/css-grid-layout/positioned-grid-items-should-not-take-up-space.html: Added. 26 * fast/css-grid-layout/resources/grid.css: Added some common CSS classes. 27 1 28 2015-11-04 Jiewen Tan <jiewen_tan@apple.com> 2 29 -
trunk/LayoutTests/fast/css-grid-layout/resources/grid.css
r190663 r192054 22 22 } 23 23 24 .onlyFirstRowOnlyFirstColumn { 25 background-color: blue; 26 -webkit-grid-column: 1 / 2; 27 -webkit-grid-row: 1 / 2; 28 } 29 24 30 .firstRowSecondColumn { 25 31 background-color: lime; 26 32 -webkit-grid-column: 2; 27 33 -webkit-grid-row: 1; 34 } 35 36 .onlyFirstRowOnlySecondColumn { 37 background-color: lime; 38 -webkit-grid-column: 2 / 3; 39 -webkit-grid-row: 1 / 2; 28 40 } 29 41 … … 46 58 } 47 59 60 .onlySecondRowOnlyFirstColumn { 61 background-color: purple; 62 -webkit-grid-column: 1 / 2; 63 -webkit-grid-row: 2 / 3; 64 } 65 48 66 .secondRowSecondColumn { 49 67 background-color: orange; 50 68 -webkit-grid-column: 2; 51 69 -webkit-grid-row: 2; 70 } 71 72 .onlySecondRowOnlySecondColumn { 73 background-color: orange; 74 -webkit-grid-column: 2 / 3; 75 -webkit-grid-row: 2 / 3; 76 } 77 78 .endSecondRowEndSecondColumn { 79 background-color: orange; 80 -webkit-grid-column-end: 3; 81 -webkit-grid-row-end: 3; 52 82 } 53 83 -
trunk/Source/WebCore/ChangeLog
r192043 r192054 1 2015-11-05 Manuel Rego Casasnovas <rego@igalia.com> 2 3 [css-grid] Support positioned grid children 4 https://bugs.webkit.org/show_bug.cgi?id=150837 5 6 Reviewed by Darin Adler. 7 8 According to the spec positioned grid children have 9 a special behavior described at: 10 https://drafts.csswg.org/css-grid/#abspos 11 12 The idea is that for positioned children the containing block will 13 correspond to the padding edges of the grid container, unless the 14 grid placement properties are defined. 15 This not only affects to positioned grid items (direct children) but 16 also to any descendant where the containing block is the grid container. 17 18 In order to manage this special behavior, the patch is overriding 19 RenderBlock::layoutPositionedObject() to calculate the position and size 20 depending on the grid-placement properties. 21 22 RenderBox class has some changes to calculate the containing block width 23 and height for positioned objects (using the override value). And also 24 to compute their static position. 25 26 Finally, the positioned items are not taken into account in all the 27 different grid methods, in order that they do not interfere the layout 28 of the grid as stated in the spec. 29 30 Tests: fast/css-grid-layout/absolute-positioning-grid-container-containing-block.html 31 fast/css-grid-layout/absolute-positioning-grid-container-parent.html 32 fast/css-grid-layout/grid-positioned-items-background.html 33 fast/css-grid-layout/grid-positioned-items-implicit-grid-line.html 34 fast/css-grid-layout/grid-positioned-items-implicit-grid.html 35 fast/css-grid-layout/grid-positioned-items-unknown-named-grid-line.html 36 fast/css-grid-layout/grid-sizing-positioned-items.html 37 fast/css-grid-layout/positioned-grid-items-should-not-create-implicit-tracks.html 38 fast/css-grid-layout/positioned-grid-items-should-not-take-up-space.html 39 40 * rendering/OrderIterator.cpp: 41 (WebCore::OrderIterator::next): Fix method to avoid issues if no items 42 are added to the iterator. 43 * rendering/RenderBlock.h: Mark layoutPositionedObject() as virtual. 44 * rendering/RenderBox.cpp: Add new maps for inline/block extra offsets. 45 (WebCore::RenderBox::~RenderBox): Clear the new maps. 46 (WebCore::RenderBox::extraInlineOffset): Extra offset that we need to 47 apply to positioned grid children due to the grid placement properties. 48 (WebCore::RenderBox::extraBlockOffset): Ditto. 49 (WebCore::RenderBox::setExtraInlineOffset): 50 (WebCore::RenderBox::setExtraBlockOffset): 51 (WebCore::RenderBox::clearExtraInlineAndBlockOffests): 52 (WebCore::RenderBox::containingBlockLogicalWidthForPositioned): Use the 53 override containing block if any. 54 (WebCore::RenderBox::containingBlockLogicalHeightForPositioned): Ditto. 55 (WebCore::RenderBox::computePositionedLogicalWidth): Add the extra 56 offset if it's a positioned element. 57 (WebCore::RenderBox::computePositionedLogicalHeight): Ditto. 58 * rendering/RenderBox.h: 59 (WebCore::RenderBox::scrollbarLogicalWidth): Add utility method. 60 * rendering/RenderGrid.cpp: 61 (WebCore::RenderGrid::layoutBlock): Clear grid after layout positioned 62 objects instead of at the end of layoutGridItems(). 63 (WebCore::RenderGrid::placeItemsOnGrid): Ignore positioned items. 64 (WebCore::RenderGrid::populateExplicitGridAndOrderIterator): Ditto. 65 (WebCore::RenderGrid::layoutGridItems): Ditto. 66 (WebCore::RenderGrid::prepareChildForPositionedLayout): Set static 67 position for positioned items. 68 (WebCore::RenderGrid::layoutPositionedObject): Calculate position and 69 size for positioned children. 70 (WebCore::RenderGrid::offsetAndBreadthForPositionedChild): Calculate 71 extra offset and breadth for positioned children. 72 * rendering/RenderGrid.h: 73 * rendering/style/GridResolvedPosition.cpp: 74 (WebCore::GridResolvedPosition::isNonExistentNamedLineOrArea): Make it a 75 public static method. 76 (WebCore::GridUnresolvedSpan::adjustGridPositionsFromStyle): Fix calls 77 to isNonExistentNamedLineOrArea(). 78 (WebCore::resolveGridPositionFromStyle): Ditto. 79 * rendering/style/GridResolvedPosition.h: Make 80 isNonExistentNamedLineOrArea() public. 81 1 82 2015-11-04 Jiewen Tan <jiewen_tan@apple.com> 2 83 -
trunk/Source/WebCore/rendering/OrderIterator.cpp
r169372 r192054 60 60 } 61 61 62 if (m_orderIndex != cInvalidIndex) 63 ++m_orderIndex; 64 else 65 m_orderIndex = 0; 66 62 67 if (m_orderIndex == endIndex) 63 68 return nullptr; 64 65 if (m_orderIndex != cInvalidIndex) {66 ++m_orderIndex;67 if (m_orderIndex == endIndex)68 return nullptr;69 } else70 m_orderIndex = 0;71 69 72 70 m_currentChild = m_containerBox.firstChildBox(); -
trunk/Source/WebCore/rendering/RenderBlock.h
r191610 r192054 314 314 315 315 void layoutPositionedObjects(bool relayoutChildren, bool fixedPositionObjectsOnly = false); 316 v oid layoutPositionedObject(RenderBox&, bool relayoutChildren, bool fixedPositionObjectsOnly);316 virtual void layoutPositionedObject(RenderBox&, bool relayoutChildren, bool fixedPositionObjectsOnly); 317 317 318 318 void markFixedPositionObjectForLayoutIfNeeded(RenderObject& child); -
trunk/Source/WebCore/rendering/RenderBox.cpp
r191915 r192054 96 96 static OverrideOptionalSizeMap* gOverrideContainingBlockLogicalHeightMap = nullptr; 97 97 static OverrideOptionalSizeMap* gOverrideContainingBlockLogicalWidthMap = nullptr; 98 static OverrideSizeMap* gExtraInlineOffsetMap = nullptr; 99 static OverrideSizeMap* gExtraBlockOffsetMap = nullptr; 98 100 #endif 99 101 … … 142 144 #if ENABLE(CSS_GRID_LAYOUT) 143 145 clearContainingBlockOverrideSize(); 146 clearExtraInlineAndBlockOffests(); 144 147 #endif 145 148 … … 1137 1140 if (gOverrideContainingBlockLogicalHeightMap) 1138 1141 gOverrideContainingBlockLogicalHeightMap->remove(this); 1142 } 1143 1144 LayoutUnit RenderBox::extraInlineOffset() const 1145 { 1146 return gExtraInlineOffsetMap ? gExtraInlineOffsetMap->get(this) : LayoutUnit(); 1147 } 1148 1149 LayoutUnit RenderBox::extraBlockOffset() const 1150 { 1151 return gExtraBlockOffsetMap ? gExtraBlockOffsetMap->get(this) : LayoutUnit(); 1152 } 1153 1154 void RenderBox::setExtraInlineOffset(LayoutUnit inlineOffest) 1155 { 1156 if (!gExtraInlineOffsetMap) 1157 gExtraInlineOffsetMap = new OverrideSizeMap; 1158 gExtraInlineOffsetMap->set(this, inlineOffest); 1159 } 1160 1161 void RenderBox::setExtraBlockOffset(LayoutUnit blockOffest) 1162 { 1163 if (!gExtraBlockOffsetMap) 1164 gExtraBlockOffsetMap = new OverrideSizeMap; 1165 gExtraBlockOffsetMap->set(this, blockOffest); 1166 } 1167 1168 void RenderBox::clearExtraInlineAndBlockOffests() 1169 { 1170 if (gExtraInlineOffsetMap) 1171 gExtraInlineOffsetMap->remove(this); 1172 if (gExtraBlockOffsetMap) 1173 gExtraBlockOffsetMap->remove(this); 1139 1174 } 1140 1175 #endif // ENABLE(CSS_GRID_LAYOUT) … … 3171 3206 return containingBlockLogicalHeightForPositioned(containingBlock, false); 3172 3207 3208 #if ENABLE(CSS_GRID_LAYOUT) 3209 if (hasOverrideContainingBlockLogicalWidth()) { 3210 if (auto overrideLogicalWidth = overrideContainingBlockContentLogicalWidth()) 3211 return overrideLogicalWidth.value(); 3212 } 3213 #endif 3214 3173 3215 if (is<RenderBox>(*containingBlock)) { 3174 3216 bool isFixedPosition = style().position() == FixedPosition; … … 3233 3275 if (checkForPerpendicularWritingMode && containingBlock->isHorizontalWritingMode() != isHorizontalWritingMode()) 3234 3276 return containingBlockLogicalWidthForPositioned(containingBlock, nullptr, false); 3277 3278 #if ENABLE(CSS_GRID_LAYOUT) 3279 if (hasOverrideContainingBlockLogicalHeight()) { 3280 if (auto overrideLogicalHeight = overrideContainingBlockContentLogicalHeight()) 3281 return overrideLogicalHeight.value(); 3282 } 3283 #endif 3235 3284 3236 3285 if (containingBlock->isBox()) { … … 3431 3480 } 3432 3481 } 3482 3483 #if ENABLE(CSS_GRID_LAYOUT) 3484 if (!style().hasStaticInlinePosition(isHorizontal)) 3485 computedValues.m_position += extraInlineOffset(); 3486 #endif 3433 3487 3434 3488 computedValues.m_extent += bordersPlusPadding; … … 3751 3805 } 3752 3806 3807 #if ENABLE(CSS_GRID_LAYOUT) 3808 if (!style().hasStaticBlockPosition(isHorizontalWritingMode())) 3809 computedValues.m_position += extraBlockOffset(); 3810 #endif 3811 3753 3812 // Set final height value. 3754 3813 computedValues.m_extent += bordersPlusPadding; -
trunk/Source/WebCore/rendering/RenderBox.h
r191234 r192054 327 327 void clearContainingBlockOverrideSize(); 328 328 void clearOverrideContainingBlockContentLogicalHeight(); 329 LayoutUnit extraInlineOffset() const; 330 LayoutUnit extraBlockOffset() const; 331 void setExtraInlineOffset(LayoutUnit); 332 void setExtraBlockOffset(LayoutUnit); 333 void clearExtraInlineAndBlockOffests(); 329 334 #endif 330 335 … … 450 455 int horizontalScrollbarHeight() const; 451 456 int intrinsicScrollbarLogicalWidth() const; 457 int scrollbarLogicalWidth() const { return style().isHorizontalWritingMode() ? verticalScrollbarWidth() : horizontalScrollbarHeight(); } 452 458 int scrollbarLogicalHeight() const { return style().isHorizontalWritingMode() ? horizontalScrollbarHeight() : verticalScrollbarWidth(); } 453 459 virtual bool scroll(ScrollDirection, ScrollGranularity, float multiplier = 1, Element** stopElement = nullptr, RenderBox* startBox = nullptr, const IntPoint& wheelEventAbsolutePoint = IntPoint()); -
trunk/Source/WebCore/rendering/RenderGrid.cpp
r191879 r192054 323 323 layoutPositionedObjects(relayoutChildren || isDocumentElementRenderer()); 324 324 325 clearGrid(); 326 325 327 computeOverflow(oldClientAfterEdge); 326 328 statePusher.pop(); … … 1051 1053 Vector<RenderBox*> specifiedMajorAxisAutoGridItems; 1052 1054 for (RenderBox* child = m_orderIterator.first(); child; child = m_orderIterator.next()) { 1055 if (child->isOutOfFlowPositioned()) 1056 continue; 1057 1053 1058 auto unresolvedRowPositions = GridResolvedPosition::unresolvedSpanFromStyle(style(), *child, ForRows); 1054 1059 auto unresolvedColumnPositions = GridResolvedPosition::unresolvedSpanFromStyle(style(), *child, ForColumns); … … 1083 1088 1084 1089 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBox()) { 1090 if (child->isOutOfFlowPositioned()) 1091 continue; 1092 1085 1093 populator.collectChild(*child); 1086 1094 … … 1287 1295 1288 1296 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBox()) { 1297 if (child->isOutOfFlowPositioned()) { 1298 prepareChildForPositionedLayout(*child); 1299 continue; 1300 } 1301 1289 1302 // Because the grid area cannot be styled, we don't need to adjust 1290 1303 // the grid breadth to account for 'box-sizing'. … … 1337 1350 } 1338 1351 setLogicalHeight(height); 1339 1340 clearGrid(); 1352 } 1353 1354 void RenderGrid::prepareChildForPositionedLayout(RenderBox& child) 1355 { 1356 ASSERT(child.isOutOfFlowPositioned()); 1357 child.containingBlock()->insertPositionedObject(child); 1358 1359 RenderLayer* childLayer = child.layer(); 1360 childLayer->setStaticInlinePosition(borderAndPaddingStart()); 1361 childLayer->setStaticBlockPosition(borderAndPaddingBefore()); 1362 } 1363 1364 void RenderGrid::layoutPositionedObject(RenderBox& child, bool relayoutChildren, bool fixedPositionObjectsOnly) 1365 { 1366 bool hasOrthogonalWritingMode = child.isHorizontalWritingMode() != isHorizontalWritingMode(); 1367 // FIXME: Properly support orthogonal writing mode. 1368 if (!hasOrthogonalWritingMode) { 1369 LayoutUnit columnOffset = LayoutUnit(); 1370 LayoutUnit columnBreadth = LayoutUnit(); 1371 offsetAndBreadthForPositionedChild(child, ForColumns, columnOffset, columnBreadth); 1372 LayoutUnit rowOffset = LayoutUnit(); 1373 LayoutUnit rowBreadth = LayoutUnit(); 1374 offsetAndBreadthForPositionedChild(child, ForRows, rowOffset, rowBreadth); 1375 1376 child.setOverrideContainingBlockContentLogicalWidth(columnBreadth); 1377 child.setOverrideContainingBlockContentLogicalHeight(rowBreadth); 1378 child.setExtraInlineOffset(columnOffset); 1379 child.setExtraBlockOffset(rowOffset); 1380 } 1381 1382 RenderBlock::layoutPositionedObject(child, relayoutChildren, fixedPositionObjectsOnly); 1383 } 1384 1385 void RenderGrid::offsetAndBreadthForPositionedChild(const RenderBox& child, GridTrackSizingDirection direction, LayoutUnit& offset, LayoutUnit& breadth) 1386 { 1387 ASSERT(child.isHorizontalWritingMode() == isHorizontalWritingMode()); 1388 1389 auto unresolvedPositions = GridResolvedPosition::unresolvedSpanFromStyle(style(), child, direction); 1390 if (unresolvedPositions.requiresAutoPlacement()) { 1391 offset = LayoutUnit(); 1392 breadth = (direction == ForColumns) ? clientLogicalWidth() : clientLogicalHeight(); 1393 return; 1394 } 1395 1396 GridPosition startPosition = (direction == ForColumns) ? child.style().gridItemColumnStart() : child.style().gridItemRowStart(); 1397 GridPosition endPosition = (direction == ForColumns) ? child.style().gridItemColumnEnd() : child.style().gridItemRowEnd(); 1398 size_t lastTrackIndex = (direction == ForColumns ? gridColumnCount() : gridRowCount()) - 1; 1399 1400 GridSpan positions = GridResolvedPosition::resolveGridPositionsFromStyle(unresolvedPositions, style()); 1401 bool startIsAuto = startPosition.isAuto() 1402 || (startPosition.isNamedGridArea() && GridResolvedPosition::isNonExistentNamedLineOrArea(startPosition.namedGridLine(), style(), (direction == ForColumns) ? ColumnStartSide : RowStartSide)) 1403 || (positions.resolvedInitialPosition.toInt() > lastTrackIndex); 1404 bool endIsAuto = endPosition.isAuto() 1405 || (endPosition.isNamedGridArea() && GridResolvedPosition::isNonExistentNamedLineOrArea(endPosition.namedGridLine(), style(), (direction == ForColumns) ? ColumnEndSide : RowEndSide)) 1406 || (positions.resolvedFinalPosition.toInt() > lastTrackIndex); 1407 1408 GridResolvedPosition firstPosition = GridResolvedPosition(0); 1409 GridResolvedPosition initialPosition = startIsAuto ? firstPosition : positions.resolvedInitialPosition; 1410 GridResolvedPosition lastPosition = GridResolvedPosition(lastTrackIndex); 1411 GridResolvedPosition finalPosition = endIsAuto ? lastPosition : positions.resolvedFinalPosition; 1412 1413 // Positioned children do not grow the grid, so we need to clamp the positions to avoid ending up outside of it. 1414 initialPosition = std::min<GridResolvedPosition>(initialPosition, lastPosition); 1415 finalPosition = std::min<GridResolvedPosition>(finalPosition, lastPosition); 1416 1417 LayoutUnit start = startIsAuto ? LayoutUnit() : (direction == ForColumns) ? m_columnPositions[initialPosition.toInt()] : m_rowPositions[initialPosition.toInt()]; 1418 LayoutUnit end = endIsAuto ? (direction == ForColumns) ? logicalWidth() : logicalHeight() : (direction == ForColumns) ? m_columnPositions[finalPosition.next().toInt()] : m_rowPositions[finalPosition.next().toInt()]; 1419 1420 breadth = end - start; 1421 1422 if (startIsAuto) 1423 breadth -= (direction == ForColumns) ? borderStart() : borderBefore(); 1424 else 1425 start -= ((direction == ForColumns) ? borderStart() : borderBefore()); 1426 1427 if (endIsAuto) { 1428 breadth -= (direction == ForColumns) ? borderEnd() : borderAfter(); 1429 breadth -= scrollbarLogicalWidth(); 1430 } 1431 1432 offset = start; 1433 1434 if (child.parent() == this && !startIsAuto) { 1435 // If column/row start is "auto" the static position has been already set in prepareChildForPositionedLayout(). 1436 RenderLayer* childLayer = child.layer(); 1437 if (direction == ForColumns) 1438 childLayer->setStaticInlinePosition(borderStart() + offset); 1439 else 1440 childLayer->setStaticBlockPosition(borderBefore() + offset); 1441 } 1341 1442 } 1342 1443 -
trunk/Source/WebCore/rendering/RenderGrid.h
r191610 r192054 89 89 90 90 void layoutGridItems(); 91 void prepareChildForPositionedLayout(RenderBox&); 92 void layoutPositionedObject(RenderBox&, bool relayoutChildren, bool fixedPositionObjectsOnly) override; 93 void offsetAndBreadthForPositionedChild(const RenderBox&, GridTrackSizingDirection, LayoutUnit& offset, LayoutUnit& breadth); 91 94 void populateGridPositions(GridSizingData&); 92 95 void clearGrid(); -
trunk/Source/WebCore/rendering/style/GridResolvedPosition.cpp
r185059 r192054 59 59 } 60 60 61 static boolisNonExistentNamedLineOrArea(const String& lineName, const RenderStyle& style, GridPositionSide side)61 bool GridResolvedPosition::isNonExistentNamedLineOrArea(const String& lineName, const RenderStyle& style, GridPositionSide side) 62 62 { 63 63 const NamedGridLinesMap& gridLineNames = gridLinesForSide(style, side); … … 82 82 // GridResolvedPosition::resolveGrisPositionFromStyle() won't require the autoplacement to run, i.e., it'll always return a 83 83 // valid resolved position. 84 if (m_initialPosition.isNamedGridArea() && isNonExistentNamedLineOrArea(m_initialPosition.namedGridLine(), gridContainerStyle, m_initialPositionSide))84 if (m_initialPosition.isNamedGridArea() && GridResolvedPosition::isNonExistentNamedLineOrArea(m_initialPosition.namedGridLine(), gridContainerStyle, m_initialPositionSide)) 85 85 m_initialPosition.setAutoPosition(); 86 86 87 if (m_finalPosition.isNamedGridArea() && isNonExistentNamedLineOrArea(m_finalPosition.namedGridLine(), gridContainerStyle, m_finalPositionSide))87 if (m_finalPosition.isNamedGridArea() && GridResolvedPosition::isNonExistentNamedLineOrArea(m_finalPosition.namedGridLine(), gridContainerStyle, m_finalPositionSide)) 88 88 m_finalPosition.setAutoPosition(); 89 89 … … 273 273 // line to the grid item's placement. 274 274 String namedGridLine = position.namedGridLine(); 275 ASSERT(! isNonExistentNamedLineOrArea(namedGridLine, gridContainerStyle, side));275 ASSERT(!GridResolvedPosition::isNonExistentNamedLineOrArea(namedGridLine, gridContainerStyle, side)); 276 276 277 277 const NamedGridLinesMap& gridLineNames = gridLinesForSide(gridContainerStyle, side); -
trunk/Source/WebCore/rendering/style/GridResolvedPosition.h
r185059 r192054 139 139 static unsigned explicitGridColumnCount(const RenderStyle&); 140 140 static unsigned explicitGridRowCount(const RenderStyle&); 141 static bool isNonExistentNamedLineOrArea(const String& lineName, const RenderStyle&, GridPositionSide); 141 142 142 143 private:
Note: See TracChangeset
for help on using the changeset viewer.