Commit 87317b87 authored by Manuel Rego Casasnovas's avatar Manuel Rego Casasnovas Committed by Commit Bot

[css-grid] Fix positioned items in a grid with calc() gutters

In r543079 we added support for calc() in grid gutters.
In that patch we modified LayoutGrid::GridGap() but we forgot
to do the same in LayoutGrid::AvailableSpaceForGutters().

This patch just changes the IsPercent() call by IsPercentOrCalc()
that way calc() gutters are considered too when looking
for the available space.

BUG=816300
TEST=external/wpt/css/css-grid/abspos/grid-positioned-items-gaps-002.html
TEST=external/wpt/css/css-grid/abspos/grid-positioned-items-gaps-002-rtl.html

Change-Id: I3237d5dc73f508cea6d904b9f1fd3822bb9efe55
Reviewed-on: https://chromium-review.googlesource.com/1112237Reviewed-by: default avatarSergio Villar <svillar@igalia.com>
Commit-Queue: Manuel Rego Casasnovas <rego@igalia.com>
Cr-Commit-Position: refs/heads/master@{#569733}
parent 4f3171f7
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Grid Layout Test: Grid positioned items percentage and calc() gaps</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#abspos">
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#gutters">
<meta name="assert" content="This test checks the behavior of the positioned items in a grid container with percentage and calc() gaps.">
<link rel="stylesheet" href="support/grid.css">
<style>
.grid {
grid-template-columns: 100px 100px 100px 100px;
grid-template-rows: 50px 50px 50px 50px;
width: 800px;
height: 600px;
border: 5px solid black;
margin: 30px;
padding: 15px;
/* Ensures that the grid container is the containing block of the absolutely positioned grid children. */
position: relative;
}
.grid > div {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: lime;
}
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<body onload="checkLayout('.grid')">
<div id="log"></div>
<div class="grid directionRTL" style="gap: 10%;">
<div style="grid-column: 2 / 4; grid-row: 2 / 4;"
data-offset-x="355" data-offset-y="125" data-expected-width="280" data-expected-height="160">
</div>
</div>
<div class="grid directionRTL" style="gap: calc(10% + 25px);">
<div style="grid-column: 2 / 4; grid-row: 2 / 4;"
data-offset-x="305" data-offset-y="150" data-expected-width="305" data-expected-height="185">
</div>
</div>
</body>
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Grid Layout Test: Grid positioned items percentage and calc() gaps</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#abspos">
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#gutters">
<meta name="assert" content="This test checks the behavior of the positioned items in a grid container with percentage and calc() gaps.">
<link rel="stylesheet" href="support/grid.css">
<style>
.grid {
grid-template-columns: 100px 100px 100px 100px;
grid-template-rows: 50px 50px 50px 50px;
width: 800px;
height: 600px;
border: 5px solid black;
margin: 30px;
padding: 15px;
/* Ensures that the grid container is the containing block of the absolutely positioned grid children. */
position: relative;
}
.grid > div {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: lime;
}
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<body onload="checkLayout('.grid')">
<div id="log"></div>
<div class="grid" style="gap: 10%;">
<div style="grid-column: 2 / 4; grid-row: 2 / 4;"
data-offset-x="195" data-offset-y="125" data-expected-width="280" data-expected-height="160">
</div>
</div>
<div class="grid" style="gap: calc(10% + 25px);">
<div style="grid-column: 2 / 4; grid-row: 2 / 4;"
data-offset-x="220" data-offset-y="150" data-expected-width="305" data-expected-height="185">
</div>
</div>
</body>
...@@ -205,7 +205,7 @@ base::Optional<LayoutUnit> LayoutGrid::AvailableSpaceForGutters( ...@@ -205,7 +205,7 @@ base::Optional<LayoutUnit> LayoutGrid::AvailableSpaceForGutters(
const GapLength& gap = const GapLength& gap =
is_row_axis ? StyleRef().ColumnGap() : StyleRef().RowGap(); is_row_axis ? StyleRef().ColumnGap() : StyleRef().RowGap();
if (!gap.IsNormal() && !gap.GetLength().IsPercent()) if (!gap.IsNormal() && !gap.GetLength().IsPercentOrCalc())
return base::nullopt; return base::nullopt;
return is_row_axis ? AvailableLogicalWidth() return is_row_axis ? AvailableLogicalWidth()
......
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