Changeset 197857 in webkit
- Timestamp:
- Mar 9, 2016 6:26:39 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r197856 r197857 1 2016-03-09 Manuel Rego Casasnovas <rego@igalia.com> 2 3 [css-grid] Allow to place positioned grid items on the padding 4 https://bugs.webkit.org/show_bug.cgi?id=155199 5 6 Reviewed by Sergio Villar Senin. 7 8 Add new tests and updated results in a current one. 9 10 * fast/css-grid-layout/grid-positioned-items-implicit-grid.html: 11 * fast/css-grid-layout/grid-positioned-items-padding-expected.txt: Added. 12 * fast/css-grid-layout/grid-positioned-items-padding.html: Added. 13 * fast/css-grid-layout/grid-positioned-items-within-grid-implicit-track-expected.txt: Added. 14 * fast/css-grid-layout/grid-positioned-items-within-grid-implicit-track.html: Added. 15 1 16 2016-03-09 Andreas Kling <akling@apple.com> 2 17 -
trunk/LayoutTests/fast/css-grid-layout/grid-positioned-items-implicit-grid.html
r192054 r197857 43 43 <div class="grid grid-columns-rows"> 44 44 <div class="sizedToGridArea absolute secondRowSecondColumn" 45 data-offset-x="1 5" data-offset-y="15" data-expected-width="230" data-expected-height="230">45 data-offset-x="115" data-offset-y="65" data-expected-width="115" data-expected-height="165"> 46 46 </div> 47 47 <div class="sizedToGridArea absolute endSecondRowEndSecondColumn" … … 49 49 </div> 50 50 <div class="sizedToGridArea absolute onlySecondRowOnlySecondColumn" 51 data-offset-x="1 5" data-offset-y="15" data-expected-width="230" data-expected-height="230">51 data-offset-x="115" data-offset-y="65" data-expected-width="115" data-expected-height="165"> 52 52 </div> 53 53 </div> -
trunk/Source/WebCore/ChangeLog
r197856 r197857 1 2016-03-09 Manuel Rego Casasnovas <rego@igalia.com> 2 3 [css-grid] Allow to place positioned grid items on the padding 4 https://bugs.webkit.org/show_bug.cgi?id=155199 5 6 Reviewed by Sergio Villar Senin. 7 8 According to the following discussion on the CSS WG mailing list, 9 we should be able to place positioned grid items on the padding directly: 10 https://lists.w3.org/Archives/Public/www-style/2015Nov/0070.html 11 12 This means that a positioned grid item can be placed on the padding itself. 13 The "auto" value resolves to the padding edges (0th and -0th lines). 14 So if a positioned item is placed with: grid-column: auto / 1; 15 it'd be placed on the padding, from line 0th to 1st line. 16 17 On top of that, we've to detect properly the first and last explicit 18 grid lines during the layout of positioned grid items. 19 We have to consider that the grid can have implicit tracks created 20 previously by regular grid items. 21 22 Tests: fast/css-grid-layout/grid-positioned-items-padding.html 23 fast/css-grid-layout/grid-positioned-items-within-grid-implicit-track.html 24 25 * rendering/RenderGrid.cpp: 26 (WebCore::RenderGrid::offsetAndBreadthForPositionedChild): 27 1 28 2016-03-09 Andreas Kling <akling@apple.com> 2 29 -
trunk/Source/WebCore/rendering/RenderGrid.cpp
r197854 r197857 1485 1485 { 1486 1486 ASSERT(child.isHorizontalWritingMode() == isHorizontalWritingMode()); 1487 bool isRowAxis = direction == ForColumns; 1487 1488 1488 1489 GridSpan positions = GridResolvedPosition::resolveGridPositionsFromStyle(style(), child, direction); 1489 1490 if (positions.isIndefinite()) { 1490 1491 offset = LayoutUnit(); 1491 breadth = (direction == ForColumns)? clientLogicalWidth() : clientLogicalHeight();1492 breadth = isRowAxis ? clientLogicalWidth() : clientLogicalHeight(); 1492 1493 return; 1493 1494 } 1494 positions.translate(direction == ForColumns ? m_smallestColumnStart : m_smallestRowStart); 1495 1496 GridPosition startPosition = (direction == ForColumns) ? child.style().gridItemColumnStart() : child.style().gridItemRowStart(); 1497 GridPosition endPosition = (direction == ForColumns) ? child.style().gridItemColumnEnd() : child.style().gridItemRowEnd(); 1498 size_t lastTrackIndex = (direction == ForColumns ? gridColumnCount() : gridRowCount()) - 1; 1495 1496 // For positioned items we cannot use GridSpan::translate() because we could end up with negative values, as the positioned items do not create implicit tracks per spec. 1497 int smallestStart = std::abs(isRowAxis ? m_smallestColumnStart : m_smallestRowStart); 1498 int resolvedInitialPosition = positions.untranslatedResolvedInitialPosition() + smallestStart; 1499 int resolvedFinalPosition = positions.untranslatedResolvedFinalPosition() + smallestStart; 1500 1501 GridPosition startPosition = isRowAxis ? child.style().gridItemColumnStart() : child.style().gridItemRowStart(); 1502 GridPosition endPosition = isRowAxis ? child.style().gridItemColumnEnd() : child.style().gridItemRowEnd(); 1503 int firstExplicitLine = smallestStart; 1504 int lastExplicitLine = (isRowAxis ? GridResolvedPosition::explicitGridColumnCount(style()) : GridResolvedPosition::explicitGridRowCount(style())) + smallestStart; 1499 1505 1500 1506 bool startIsAuto = startPosition.isAuto() 1501 1507 || (startPosition.isNamedGridArea() && GridResolvedPosition::isNonExistentNamedLineOrArea(startPosition.namedGridLine(), style(), (direction == ForColumns) ? ColumnStartSide : RowStartSide)) 1502 || (positions.resolvedInitialPosition() > lastTrackIndex); 1508 || (resolvedInitialPosition < firstExplicitLine) 1509 || (resolvedInitialPosition > lastExplicitLine); 1503 1510 bool endIsAuto = endPosition.isAuto() 1504 1511 || (endPosition.isNamedGridArea() && GridResolvedPosition::isNonExistentNamedLineOrArea(endPosition.namedGridLine(), style(), (direction == ForColumns) ? ColumnEndSide : RowEndSide)) 1505 || (positions.resolvedFinalPosition() - 1 > lastTrackIndex); 1506 1507 unsigned firstPosition = 0; 1508 unsigned initialPosition = startIsAuto ? firstPosition : positions.resolvedInitialPosition(); 1509 unsigned lastPosition = lastTrackIndex; 1510 unsigned finalPosition = endIsAuto ? lastPosition : positions.resolvedFinalPosition() - 1; 1511 1512 // Positioned children do not grow the grid, so we need to clamp the positions to avoid ending up outside of it. 1513 initialPosition = std::min(initialPosition, lastPosition); 1514 finalPosition = std::min(finalPosition, lastPosition); 1515 1516 LayoutUnit start = startIsAuto ? LayoutUnit() : (direction == ForColumns) ? m_columnPositions[initialPosition] : m_rowPositions[initialPosition]; 1517 LayoutUnit end = endIsAuto ? (direction == ForColumns) ? logicalWidth() : logicalHeight() : (direction == ForColumns) ? m_columnPositions[finalPosition + 1] : m_rowPositions[finalPosition + 1]; 1512 || (resolvedFinalPosition < firstExplicitLine) 1513 || (resolvedFinalPosition > lastExplicitLine); 1514 1515 unsigned initialPosition = startIsAuto ? 0 : resolvedInitialPosition; 1516 unsigned finalPosition = endIsAuto ? lastExplicitLine : resolvedFinalPosition; 1517 1518 LayoutUnit start = startIsAuto ? LayoutUnit() : isRowAxis ? m_columnPositions[initialPosition] : m_rowPositions[initialPosition]; 1519 LayoutUnit end = endIsAuto ? (isRowAxis ? logicalWidth() : logicalHeight()) : (isRowAxis ? m_columnPositions[finalPosition] : m_rowPositions[finalPosition]); 1518 1520 1519 1521 breadth = end - start; 1520 1522 1521 1523 if (startIsAuto) 1522 breadth -= (direction == ForColumns)? borderStart() : borderBefore();1524 breadth -= isRowAxis ? borderStart() : borderBefore(); 1523 1525 else 1524 start -= ((direction == ForColumns) ? borderStart() : borderBefore());1526 start -= isRowAxis ? borderStart() : borderBefore(); 1525 1527 1526 1528 if (endIsAuto) { 1527 breadth -= (direction == ForColumns)? borderEnd() : borderAfter();1529 breadth -= isRowAxis ? borderEnd() : borderAfter(); 1528 1530 breadth -= scrollbarLogicalWidth(); 1529 1531 } … … 1534 1536 // If column/row start is "auto" the static position has been already set in prepareChildForPositionedLayout(). 1535 1537 RenderLayer* childLayer = child.layer(); 1536 if ( direction == ForColumns)1538 if (isRowAxis) 1537 1539 childLayer->setStaticInlinePosition(borderStart() + offset); 1538 1540 else
Note: See TracChangeset
for help on using the changeset viewer.