Commit e424a134 authored by svillar@igalia.com's avatar svillar@igalia.com

This is a follow up of r174021 where we added support for placing grid items

using named grid lines. We left unfixed the case of the author using non
existent named grid lines. The truth is that it was already partially fixed
by some previous changes.

Instead of forcing resolveGridPositionFromStyle() to return a non resolved
grid position (like 'auto') we try to detect the usage of a non existent
named grid line before trying to resolve the grid position.

Review URL: https://codereview.chromium.org/309393002

git-svn-id: svn://svn.chromium.org/blink/trunk@176022 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 43aaa9fc
...@@ -15,9 +15,16 @@ static const NamedGridLinesMap& gridLinesForSide(const RenderStyle& style, GridP ...@@ -15,9 +15,16 @@ static const NamedGridLinesMap& gridLinesForSide(const RenderStyle& style, GridP
return (side == ColumnStartSide || side == ColumnEndSide) ? style.namedGridColumnLines() : style.namedGridRowLines(); return (side == ColumnStartSide || side == ColumnEndSide) ? style.namedGridColumnLines() : style.namedGridRowLines();
} }
static inline bool isNonExistentNamedLineOrArea(const String& lineName, const RenderStyle& style, GridPositionSide side) static inline String implicitNamedGridLineForSide(const String& lineName, GridPositionSide side)
{ {
return !style.namedGridArea().contains(lineName) && !gridLinesForSide(style, side).contains(lineName); return lineName + ((side == ColumnStartSide || side == RowStartSide) ? "-start" : "-end");
}
static bool isValidNamedLineOrArea(const String& lineName, const RenderStyle& style, GridPositionSide side)
{
const NamedGridLinesMap& gridLineNames = gridLinesForSide(style, side);
return gridLineNames.contains(implicitNamedGridLineForSide(lineName, side)) || gridLineNames.contains(lineName);
} }
static GridPositionSide calculateInitialPositionSide(GridTrackSizingDirection direction) static GridPositionSide calculateInitialPositionSide(GridTrackSizingDirection direction)
...@@ -42,10 +49,12 @@ void GridResolvedPosition::initialAndFinalPositionsFromStyle(const RenderStyle& ...@@ -42,10 +49,12 @@ void GridResolvedPosition::initialAndFinalPositionsFromStyle(const RenderStyle&
if (initialPosition.isSpan() && finalPosition.isSpan()) if (initialPosition.isSpan() && finalPosition.isSpan())
finalPosition.setAutoPosition(); finalPosition.setAutoPosition();
if (initialPosition.isNamedGridArea() && isNonExistentNamedLineOrArea(initialPosition.namedGridLine(), gridContainerStyle, initialPositionSide)) // Try to early detect the case of non existing named grid lines. This way we could assume later that
// GridResolvedPosition::resolveGrisPositionFromStyle() always return a valid resolved position.
if (initialPosition.isNamedGridArea() && !isValidNamedLineOrArea(initialPosition.namedGridLine(), gridContainerStyle, initialPositionSide))
initialPosition.setAutoPosition(); initialPosition.setAutoPosition();
if (finalPosition.isNamedGridArea() && isNonExistentNamedLineOrArea(finalPosition.namedGridLine(), gridContainerStyle, finalPositionSide)) if (finalPosition.isNamedGridArea() && !isValidNamedLineOrArea(finalPosition.namedGridLine(), gridContainerStyle, finalPositionSide))
finalPosition.setAutoPosition(); finalPosition.setAutoPosition();
} }
...@@ -172,9 +181,10 @@ GridResolvedPosition GridResolvedPosition::resolveGridPositionFromStyle(const Re ...@@ -172,9 +181,10 @@ GridResolvedPosition GridResolvedPosition::resolveGridPositionFromStyle(const Re
// ''<custom-ident>-start (for grid-*-start) / <custom-ident>-end'' (for grid-*-end), contributes the first such // ''<custom-ident>-start (for grid-*-start) / <custom-ident>-end'' (for grid-*-end), contributes the first such
// line to the grid item’s placement. // line to the grid item’s placement.
String namedGridLine = position.namedGridLine(); String namedGridLine = position.namedGridLine();
String implicitNamedGridLine = namedGridLine + ((side == ColumnStartSide || side == RowStartSide) ? "-start" : "-end"); ASSERT(isValidNamedLineOrArea(namedGridLine, gridContainerStyle, side));
const NamedGridLinesMap& gridLineNames = gridLinesForSide(gridContainerStyle, side); const NamedGridLinesMap& gridLineNames = gridLinesForSide(gridContainerStyle, side);
NamedGridLinesMap::const_iterator implicitLineIter = gridLineNames.find(implicitNamedGridLine); NamedGridLinesMap::const_iterator implicitLineIter = gridLineNames.find(implicitNamedGridLineForSide(namedGridLine, side));
if (implicitLineIter != gridLineNames.end()) if (implicitLineIter != gridLineNames.end())
return adjustGridPositionForSide(implicitLineIter->value[0], side); return adjustGridPositionForSide(implicitLineIter->value[0], side);
...@@ -184,8 +194,10 @@ GridResolvedPosition GridResolvedPosition::resolveGridPositionFromStyle(const Re ...@@ -184,8 +194,10 @@ GridResolvedPosition GridResolvedPosition::resolveGridPositionFromStyle(const Re
if (explicitLineIter != gridLineNames.end()) if (explicitLineIter != gridLineNames.end())
return adjustGridPositionForSide(explicitLineIter->value[0], side); return adjustGridPositionForSide(explicitLineIter->value[0], side);
// FIXME: if none of the above works specs mandate us to treat it as auto. We cannot return auto right here // If none of the above works specs mandate us to treat it as auto BUT we should have detected it before calling
// right now because callers expect a resolved position. We need deeper changes to support this use case. // this function in GridResolvedPosition::resolveGridPositionsFromStyle(). We should be also covered by the
// ASSERT at the beginning of this block.
ASSERT_NOT_REACHED();
return GridResolvedPosition(0); return GridResolvedPosition(0);
} }
case AutoPosition: case AutoPosition:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment