Changeset 290007 in webkit
- Timestamp:
- Feb 17, 2022 1:53:19 AM (5 months ago)
- Location:
- trunk
- Files:
-
- 10 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/TestExpectations (modified) (3 diffs)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/rendering/GridLayoutFunctions.cpp (modified) (2 diffs)
-
Source/WebCore/rendering/GridLayoutFunctions.h (modified) (2 diffs)
-
Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp (modified) (2 diffs)
-
Source/WebCore/rendering/GridTrackSizingAlgorithm.h (modified) (1 diff)
-
Source/WebCore/rendering/RenderBoxModelObject.h (modified) (1 diff)
-
Source/WebCore/rendering/RenderGrid.cpp (modified) (4 diffs)
-
Source/WebCore/rendering/RenderGrid.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r290003 r290007 1 2022-02-17 Matt Woodrow <mattwoodrow@apple.com> 2 3 Copy track sizes from parent grid into subgrid 4 https://bugs.webkit.org/show_bug.cgi?id=236336 5 6 Reviewed by Dean Jackson. 7 8 Existing test expectations updated. 9 10 * TestExpectations: 11 1 12 2022-02-16 Antoine Quint <graouts@webkit.org> 2 13 -
trunk/LayoutTests/TestExpectations
r289999 r290007 1393 1393 imported/w3c/web-platform-tests/css/css-grid/masonry/tentative/masonry-subgrid-002.html [ ImageOnlyFailure ] 1394 1394 1395 imported/w3c/web-platform-tests/css/css-grid/subgrid/auto-track-sizing-001.html [ ImageOnlyFailure ] 1395 1396 imported/w3c/web-platform-tests/css/css-grid/subgrid/abs-pos-002.html [ ImageOnlyFailure ] 1396 1397 imported/w3c/web-platform-tests/css/css-grid/subgrid/abs-pos-003.html [ ImageOnlyFailure ] … … 1401 1402 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-003.html [ ImageOnlyFailure ] 1402 1403 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-004.html [ ImageOnlyFailure ] 1403 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-005.html [ ImageOnlyFailure ]1404 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-006.html [ ImageOnlyFailure ]1405 1404 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-007.html [ ImageOnlyFailure ] 1406 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-008.html [ ImageOnlyFailure ]1407 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-009.html [ ImageOnlyFailure ]1408 1405 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-larger-001.html [ ImageOnlyFailure ] 1409 1406 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-larger-002.html [ ImageOnlyFailure ] 1410 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-normal-001.html [ ImageOnlyFailure ]1411 1407 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-smaller-001.html [ ImageOnlyFailure ] 1412 1408 imported/w3c/web-platform-tests/css/css-grid/subgrid/item-percentage-height-001.html [ ImageOnlyFailure ] 1413 imported/w3c/web-platform-tests/css/css-grid/subgrid/line-names-002.html [ ImageOnlyFailure ]1414 1409 imported/w3c/web-platform-tests/css/css-grid/subgrid/line-names-007.html [ ImageOnlyFailure ] 1415 1410 imported/w3c/web-platform-tests/css/css-grid/subgrid/orthogonal-writing-mode-001.html [ ImageOnlyFailure ] … … 1420 1415 imported/w3c/web-platform-tests/css/css-grid/subgrid/parent-repeat-auto-fit-002.html [ ImageOnlyFailure ] 1421 1416 imported/w3c/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-003.html [ ImageOnlyFailure ] 1417 imported/w3c/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004.html [ ImageOnlyFailure ] 1422 1418 imported/w3c/web-platform-tests/css/css-grid/subgrid/subgrid-item-block-size-001.html [ ImageOnlyFailure ] 1423 1419 imported/w3c/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001.html [ ImageOnlyFailure ] -
trunk/Source/WebCore/ChangeLog
r290005 r290007 1 2022-02-17 Matt Woodrow <mattwoodrow@apple.com> 2 3 Copy track sizes from parent grid into subgrid 4 https://bugs.webkit.org/show_bug.cgi?id=236336 5 6 Reviewed by Dean Jackson. 7 8 Copies track sizes from the parent RenderGrid's track sizing algorithm for axes 9 that are subgridded, rather than doing its own sizing. 10 Accounts for differences between the subgrid's grid-gap and the parent's grid gap, 11 as well as space occupied by the subgrid element's margin/border/padding. 12 13 Existing test expectations updated. 14 15 * rendering/GridTrackSizingAlgorithm.cpp: 16 (WebCore::GridTrackSizingAlgorithm::run): 17 * rendering/RenderGrid.cpp: 18 (WebCore::RenderGrid::layoutBlock): 19 (WebCore::RenderGrid::gridGap const): 20 (WebCore::RenderGrid::populateGridPositionsForDirection): 21 * rendering/RenderGrid.h: 22 1 23 2022-02-17 Jean-Yves Avenard <jya@apple.com> 2 24 -
trunk/Source/WebCore/rendering/GridLayoutFunctions.cpp
r289986 r290007 83 83 } 84 84 85 bool isOrthogonalParent(const RenderGrid& grid, const RenderElement& parent) 86 { 87 return parent.isHorizontalWritingMode() != grid.isHorizontalWritingMode(); 88 } 89 85 90 bool isAspectRatioBlockSizeDependentChild(const RenderBox& child) 86 91 { … … 91 96 { 92 97 return !isOrthogonalChild(grid, child) ? direction : (direction == ForColumns ? ForRows : ForColumns); 98 } 99 100 GridTrackSizingDirection flowAwareDirectionForParent(const RenderGrid& grid, const RenderElement& parent, GridTrackSizingDirection direction) 101 { 102 return isOrthogonalParent(grid, parent) ? (direction == ForColumns ? ForRows : ForColumns) : direction; 93 103 } 94 104 -
trunk/Source/WebCore/rendering/GridLayoutFunctions.h
r289986 r290007 32 32 33 33 class RenderBox; 34 class RenderElement; 34 35 class RenderGrid; 35 36 … … 41 42 LayoutUnit marginLogicalSizeForChild(const RenderGrid&, GridTrackSizingDirection, const RenderBox&); 42 43 bool isOrthogonalChild(const RenderGrid&, const RenderBox&); 44 bool isOrthogonalParent(const RenderGrid&, const RenderElement& parent); 43 45 bool isAspectRatioBlockSizeDependentChild(const RenderBox&); 44 46 GridTrackSizingDirection flowAwareDirectionForChild(const RenderGrid&, const RenderBox&, GridTrackSizingDirection); 47 GridTrackSizingDirection flowAwareDirectionForParent(const RenderGrid&, const RenderElement& parent, GridTrackSizingDirection); 45 48 bool hasOverridingContainingBlockContentSizeForChild(const RenderBox&, GridTrackSizingDirection); 46 49 std::optional<LayoutUnit> overridingContainingBlockContentSizeForChild(const RenderBox&, GridTrackSizingDirection); -
trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp
r287977 r290007 1400 1400 } 1401 1401 1402 static void removeSubgridMarginBorderPaddingFromTracks(Vector<GridTrack>& tracks, LayoutUnit mbp, bool forwards) 1403 { 1404 int numTracks = tracks.size(); 1405 int i = forwards ? 0 : numTracks - 1; 1406 while (mbp > 0 && (forwards ? i < numTracks : i >= 0)) { 1407 LayoutUnit size = tracks[i].baseSize(); 1408 if (size > mbp) { 1409 size -= mbp; 1410 mbp = 0; 1411 } else { 1412 mbp -= size; 1413 size = 0; 1414 } 1415 tracks[i].setBaseSize(size); 1416 1417 forwards ? i++ : i--; 1418 } 1419 } 1420 1421 bool GridTrackSizingAlgorithm::copyUsedTrackSizesForSubgrid() 1422 { 1423 ASSERT(is<RenderGrid>(m_renderGrid->parent())); 1424 RenderGrid* outer = downcast<RenderGrid>(m_renderGrid->parent()); 1425 GridTrackSizingAlgorithm& parentAlgo = outer->m_trackSizingAlgorithm; 1426 GridTrackSizingDirection direction = GridLayoutFunctions::flowAwareDirectionForParent(*m_renderGrid, *outer, m_direction); 1427 Vector<GridTrack>& parentTracks = parentAlgo.tracks(direction); 1428 1429 if (!parentTracks.size()) 1430 return false; 1431 1432 GridSpan span = outer->gridSpanForChild(*m_renderGrid, direction); 1433 Vector<GridTrack>& allTracks = tracks(m_direction); 1434 int numTracks = allTracks.size(); 1435 for (int i = 0; i < numTracks; i++) 1436 allTracks[i] = parentTracks[i + span.startLine()]; 1437 1438 if (GridLayoutFunctions::isSubgridReversedDirection(*outer, direction, *m_renderGrid)) 1439 allTracks.reverse(); 1440 1441 LayoutUnit startMBP = (m_direction == ForColumns) ? m_renderGrid->marginAndBorderAndPaddingStart() : m_renderGrid->marginAndBorderAndPaddingBefore(); 1442 removeSubgridMarginBorderPaddingFromTracks(allTracks, startMBP, true); 1443 LayoutUnit endMBP = (m_direction == ForColumns) ? m_renderGrid->marginAndBorderAndPaddingEnd() : m_renderGrid->marginAndBorderAndPaddingAfter(); 1444 removeSubgridMarginBorderPaddingFromTracks(allTracks, endMBP, false); 1445 1446 LayoutUnit gapDifference = (m_renderGrid->gridGap(m_direction) - outer->gridGap(direction)) / 2; 1447 for (int i = 0; i < numTracks; i++) { 1448 LayoutUnit size = allTracks[i].baseSize(); 1449 if (i) 1450 size -= gapDifference; 1451 if (i != numTracks - 1) 1452 size -= gapDifference; 1453 allTracks[i].setBaseSize(std::max(size, 0_lu)); 1454 } 1455 return true; 1456 } 1457 1402 1458 void GridTrackSizingAlgorithm::run() 1403 1459 { 1404 1460 ASSERT(wasSetup()); 1405 1461 StateMachine stateMachine(*this); 1462 1463 if (m_renderGrid->isSubgrid(m_direction) && copyUsedTrackSizesForSubgrid()) 1464 return; 1406 1465 1407 1466 // Step 1. … … 1454 1513 bool GridTrackSizingAlgorithm::tracksAreWiderThanMinTrackBreadth() const 1455 1514 { 1515 // Subgrids inherit their sizing directly from the parent, so may be unrelated 1516 // to their initial base size. 1517 if (m_renderGrid->isSubgrid(m_direction)) 1518 return true; 1519 1456 1520 const Vector<GridTrack>& allTracks = tracks(m_direction); 1457 1521 for (size_t i = 0; i < allTracks.size(); ++i) { -
trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.h
r286148 r290007 194 194 void stretchAutoTracks(); 195 195 196 bool copyUsedTrackSizesForSubgrid(); 197 196 198 // State machine. 197 199 void advanceNextState(); -
trunk/Source/WebCore/rendering/RenderBoxModelObject.h
r289606 r290007 178 178 LayoutUnit borderAndPaddingAfter() const { return borderAfter() + paddingAfter(); } 179 179 180 LayoutUnit marginAndBorderAndPaddingStart() const { return marginStart() + borderStart() + paddingStart(); } 181 LayoutUnit marginAndBorderAndPaddingEnd() const { return marginEnd() + borderEnd() + paddingEnd(); } 182 LayoutUnit marginAndBorderAndPaddingBefore() const { return marginBefore() + borderBefore() + paddingBefore(); } 183 LayoutUnit marginAndBorderAndPaddingAfter() const { return marginAfter() + borderAfter() + paddingAfter(); } 184 180 185 LayoutUnit verticalBorderAndPaddingExtent() const { return borderTop() + borderBottom() + paddingTop() + paddingBottom(); } 181 186 LayoutUnit horizontalBorderAndPaddingExtent() const { return borderLeft() + borderRight() + paddingLeft() + paddingRight(); } -
trunk/Source/WebCore/rendering/RenderGrid.cpp
r289998 r290007 330 330 331 331 layoutGridItems(); 332 m_trackSizingAlgorithm.reset();333 332 334 333 endAndCommitUpdateScrollInfoAfterLayoutTransaction(); … … 341 340 342 341 layoutPositionedObjects(relayoutChildren || isDocumentElementRenderer()); 342 m_trackSizingAlgorithm.reset(); 343 343 344 344 computeOverflow(clientLogicalRightAndBottomAfterRepositioning().height()); … … 363 363 ASSERT(!availableSize || *availableSize >= 0); 364 364 const GapLength& gapLength = direction == ForColumns? style().columnGap() : style().rowGap(); 365 if (gapLength.isNormal()) 366 return 0_lu; 365 if (gapLength.isNormal()) { 366 if (!isSubgrid(direction)) 367 return 0_lu; 368 369 GridTrackSizingDirection parentDirection = GridLayoutFunctions::flowAwareDirectionForParent(*this, *parent(), direction); 370 if (!availableSize) 371 return downcast<RenderGrid>(parent())->gridGap(parentDirection, std::nullopt); 372 return downcast<RenderGrid>(parent())->gridGap(parentDirection); 373 } 367 374 368 375 return valueForLength(gapLength.length(), availableSize.value_or(0)); … … 1129 1136 LayoutUnit gap = !hasCollapsedTracks ? gridGap(direction) : 0_lu; 1130 1137 unsigned nextToLastLine = numberOfLines - 2; 1138 1131 1139 for (unsigned i = 0; i < nextToLastLine; ++i) 1132 1140 positions[i + 1] = positions[i] + offset.distributionOffset + tracks[i].baseSize() + gap; -
trunk/Source/WebCore/rendering/RenderGrid.h
r289998 r290007 108 108 109 109 private: 110 friend class GridTrackSizingAlgorithm; 111 110 112 ItemPosition selfAlignmentNormalBehavior(const RenderBox* child = nullptr) const override 111 113 {
Note: See TracChangeset
for help on using the changeset viewer.