Modified: trunk/Source/WebCore/ChangeLog (292220 => 292221)
--- trunk/Source/WebCore/ChangeLog 2022-04-01 14:39:36 UTC (rev 292220)
+++ trunk/Source/WebCore/ChangeLog 2022-04-01 14:45:00 UTC (rev 292221)
@@ -1,3 +1,22 @@
+2022-04-01 Rob Buis <[email protected]>
+
+ Add RenderGrid parameter to resolveGridPositionsFromStyle
+ https://bugs.webkit.org/show_bug.cgi?id=238660
+
+ Reviewed by Javier Fernandez.
+
+ The containing block of an out of flow grid item does
+ not have to be of type RenderGrid. To obtain the correct
+ RenderGrid pass it at the time the RenderGrid calls
+ resolveGridPositionsFromStyle.
+
+ * rendering/RenderGrid.cpp:
+ (WebCore::RenderGrid::populateExplicitGridAndOrderIterator const):
+ (WebCore::RenderGrid::computeGridPositionsForOutOfFlowChild const):
+ * rendering/style/GridPositionsResolver.cpp:
+ (WebCore::GridPositionsResolver::resolveGridPositionsFromStyle):
+ * rendering/style/GridPositionsResolver.h:
+
2022-04-01 Chris Dumez <[email protected]>
Unreviewed, update DerivedSources-output.xcfilelist to fix build.
Modified: trunk/Source/WebCore/rendering/RenderGrid.cpp (292220 => 292221)
--- trunk/Source/WebCore/rendering/RenderGrid.cpp 2022-04-01 14:39:36 UTC (rev 292220)
+++ trunk/Source/WebCore/rendering/RenderGrid.cpp 2022-04-01 14:45:00 UTC (rev 292221)
@@ -801,7 +801,7 @@
if (!populator.collectChild(*child))
continue;
- GridSpan rowPositions = GridPositionsResolver::resolveGridPositionsFromStyle(*child, ForRows);
+ GridSpan rowPositions = GridPositionsResolver::resolveGridPositionsFromStyle(*this, *child, ForRows);
if (!isSubgridRows()) {
if (!rowPositions.isIndefinite()) {
explicitRowStart = std::max<int>(explicitRowStart, -rowPositions.untranslatedStartLine());
@@ -813,7 +813,7 @@
}
}
- GridSpan columnPositions = GridPositionsResolver::resolveGridPositionsFromStyle(*child, ForColumns);
+ GridSpan columnPositions = GridPositionsResolver::resolveGridPositionsFromStyle(*this, *child, ForColumns);
if (!isSubgridColumns()) {
if (!columnPositions.isIndefinite()) {
explicitColumnStart = std::max<int>(explicitColumnStart, -columnPositions.untranslatedStartLine());
@@ -2052,7 +2052,7 @@
{
ASSERT(child.isOutOfFlowPositioned());
int lastLine = numTracks(direction, m_grid);
- GridSpan span = GridPositionsResolver::resolveGridPositionsFromStyle(child, direction);
+ GridSpan span = GridPositionsResolver::resolveGridPositionsFromStyle(*this, child, direction);
if (span.isIndefinite())
return false;
Modified: trunk/Source/WebCore/rendering/style/GridPositionsResolver.cpp (292220 => 292221)
--- trunk/Source/WebCore/rendering/style/GridPositionsResolver.cpp 2022-04-01 14:39:36 UTC (rev 292220)
+++ trunk/Source/WebCore/rendering/style/GridPositionsResolver.cpp 2022-04-01 14:45:00 UTC (rev 292221)
@@ -595,11 +595,8 @@
return 0;
}
-GridSpan GridPositionsResolver::resolveGridPositionsFromStyle(const RenderBox& gridItem, GridTrackSizingDirection direction)
+GridSpan GridPositionsResolver::resolveGridPositionsFromStyle(const RenderGrid& gridContainer, const RenderBox& gridItem, GridTrackSizingDirection direction)
{
- auto* gridContainer = downcast<RenderGrid>(gridItem.containingBlock());
- ASSERT(gridContainer);
-
GridPosition initialPosition, finalPosition;
adjustGridPositionsFromStyle(gridItem, direction, initialPosition, finalPosition);
@@ -612,18 +609,18 @@
if (initialPosition.shouldBeResolvedAgainstOppositePosition()) {
// Infer the position from the final position ('auto / 1' or 'span 2 / 3' case).
- auto endLine = resolveGridPositionFromStyle(*gridContainer, finalPosition, finalSide);
- return resolveGridPositionAgainstOppositePosition(*gridContainer, endLine, initialPosition, initialSide);
+ auto endLine = resolveGridPositionFromStyle(gridContainer, finalPosition, finalSide);
+ return resolveGridPositionAgainstOppositePosition(gridContainer, endLine, initialPosition, initialSide);
}
if (finalPosition.shouldBeResolvedAgainstOppositePosition()) {
// Infer our position from the initial position ('1 / auto' or '3 / span 2' case).
- auto startLine = resolveGridPositionFromStyle(*gridContainer, initialPosition, initialSide);
- return resolveGridPositionAgainstOppositePosition(*gridContainer, startLine, finalPosition, finalSide);
+ auto startLine = resolveGridPositionFromStyle(gridContainer, initialPosition, initialSide);
+ return resolveGridPositionAgainstOppositePosition(gridContainer, startLine, finalPosition, finalSide);
}
- int startLine = resolveGridPositionFromStyle(*gridContainer, initialPosition, initialSide);
- int endLine = resolveGridPositionFromStyle(*gridContainer, finalPosition, finalSide);
+ int startLine = resolveGridPositionFromStyle(gridContainer, initialPosition, initialSide);
+ int endLine = resolveGridPositionFromStyle(gridContainer, finalPosition, finalSide);
if (startLine > endLine)
std::swap(startLine, endLine);
Modified: trunk/Source/WebCore/rendering/style/GridPositionsResolver.h (292220 => 292221)
--- trunk/Source/WebCore/rendering/style/GridPositionsResolver.h 2022-04-01 14:39:36 UTC (rev 292220)
+++ trunk/Source/WebCore/rendering/style/GridPositionsResolver.h 2022-04-01 14:45:00 UTC (rev 292221)
@@ -91,7 +91,7 @@
static GridPositionSide initialPositionSide(GridTrackSizingDirection);
static GridPositionSide finalPositionSide(GridTrackSizingDirection);
static unsigned spanSizeForAutoPlacedItem(const RenderBox&, GridTrackSizingDirection);
- static GridSpan resolveGridPositionsFromStyle(const RenderBox&, GridTrackSizingDirection);
+ static GridSpan resolveGridPositionsFromStyle(const RenderGrid& gridContainer, const RenderBox&, GridTrackSizingDirection);
static unsigned explicitGridColumnCount(const RenderGrid&);
static unsigned explicitGridRowCount(const RenderGrid&);
};