Changeset 261841 in webkit


Ignore:
Timestamp:
May 18, 2020 5:52:23 PM (4 years ago)
Author:
Oriol Brufau
Message:

[css-grid] Clear the override width for computing percent margins
https://bugs.webkit.org/show_bug.cgi?id=209461

Reviewed by Manuel Rego Casasnovas.

LayoutTests/imported/w3c:

Import new WPT tests and update existing ones.

  • web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages-expected.txt:
  • web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001-expected.txt: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-001.html:
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-002.html:
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-011-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-011.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-012-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-012.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-013-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-013.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-014-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-014.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html:
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html:
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-001.html:
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-002.html:
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-001.html:
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-002.html:
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-003-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-003.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-004-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-004.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-007-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-007.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-008-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-008.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-011-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-011.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-012-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-012.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-013-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-013.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-014-expected.xht: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-014.html: Added.
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html:
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html:
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html:
  • web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html:
  • web-platform-tests/css/css-grid/grid-items/w3c-import.log:

Source/WebCore:

When calculating the min-content contribution of a grid item of an auto
sized grid track we must consider the grid item's margin. When the grid
item's area is indefinite, a percent margin is resolved to zero.
However, when performing a relayout, the percent margin may be solved
against the previously computed grid area, since the grid item has
already an OverrideContainingBlockLogicalWidth value.

In order to re-compute the percent margin properly, we need to clear
the previously override value. It's important to be careful of not
clearing the override value set during intrinsic size, since we need
it for the actual layout phase. Hence, we only reset the 'override'
value when we are executing a definite strategy.

Tests: imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html

imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-011.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-012.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-013.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-014.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-003.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-004.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-007.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-008.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-011.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-012.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-013.html
imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-014.html

  • rendering/GridTrackSizingAlgorithm.cpp:

(WebCore::hasRelativeMarginOrPaddingForChild):
(WebCore::hasRelativeOrIntrinsicSizeForChild):
(WebCore::shouldClearOverrideContainingBlockContentSizeForChild):
(WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
(WebCore::GridTrackSizingAlgorithmStrategy::minLogicalSizeForChild const):
(WebCore::DefiniteSizeStrategy::minLogicalSizeForChild const):
(WebCore::DefiniteSizeStrategy::minContentForChild const):

  • rendering/GridTrackSizingAlgorithm.h:
Location:
trunk
Files:
50 added
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r261821 r261841  
     12020-05-18  Oriol Brufau  <obrufau@igalia.com>
     2
     3        [css-grid] Clear the override width for computing percent margins
     4        https://bugs.webkit.org/show_bug.cgi?id=209461
     5
     6        Reviewed by Manuel Rego Casasnovas.
     7
     8        Import new WPT tests and update existing ones.
     9
     10        * web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages-expected.txt:
     11        * web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001-expected.txt: Added.
     12        * web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html: Added.
     13        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-001.html:
     14        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-002.html:
     15        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003-expected.xht: Added.
     16        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003.html: Added.
     17        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004-expected.xht: Added.
     18        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004.html: Added.
     19        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005-expected.xht: Added.
     20        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005.html: Added.
     21        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006-expected.xht: Added.
     22        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006.html: Added.
     23        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007-expected.xht: Added.
     24        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007.html: Added.
     25        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008-expected.xht: Added.
     26        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008.html: Added.
     27        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009-expected.xht: Added.
     28        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009.html: Added.
     29        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010-expected.xht: Added.
     30        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010.html: Added.
     31        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-011-expected.xht: Added.
     32        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-011.html: Added.
     33        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-012-expected.xht: Added.
     34        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-012.html: Added.
     35        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-013-expected.xht: Added.
     36        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-013.html: Added.
     37        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-014-expected.xht: Added.
     38        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-014.html: Added.
     39        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html:
     40        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html:
     41        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-001.html:
     42        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-002.html:
     43        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-001.html:
     44        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-002.html:
     45        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-003-expected.xht: Added.
     46        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-003.html: Added.
     47        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-004-expected.xht: Added.
     48        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-004.html: Added.
     49        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005-expected.xht: Added.
     50        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005.html: Added.
     51        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006-expected.xht: Added.
     52        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006.html: Added.
     53        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-007-expected.xht: Added.
     54        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-007.html: Added.
     55        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-008-expected.xht: Added.
     56        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-008.html: Added.
     57        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009-expected.xht: Added.
     58        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009.html: Added.
     59        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010-expected.xht: Added.
     60        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010.html: Added.
     61        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-011-expected.xht: Added.
     62        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-011.html: Added.
     63        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-012-expected.xht: Added.
     64        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-012.html: Added.
     65        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-013-expected.xht: Added.
     66        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-013.html: Added.
     67        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-014-expected.xht: Added.
     68        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-014.html: Added.
     69        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html:
     70        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html:
     71        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html:
     72        * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html:
     73        * web-platform-tests/css/css-grid/grid-items/w3c-import.log:
     74
    1752020-05-18  Rob Buis  <rbuis@igalia.com>
    276
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages-expected.txt

    r261767 r261841  
    33PASS auto - rows
    44PASS min - columns
    5 FAIL min - rows assert_equals: grid-template-rows expected "50px" but got "150px"
     5PASS min - rows
    66PASS max - columns
    77PASS max - rows
     
    99PASS size - rows
    1010PASS min max - columns
    11 FAIL min max - rows assert_equals: grid-template-rows expected "50px" but got "150px"
     11PASS min max - rows
    1212PASS min size - columns
    13 FAIL min size - rows assert_equals: grid-template-rows expected "50px" but got "200px"
     13PASS min size - rows
    1414PASS max size - columns
    1515PASS max size - rows
    1616PASS min max size - columns
    17 FAIL min max size - rows assert_equals: grid-template-rows expected "50px" but got "150px"
     17PASS min max size - rows
    1818
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-001.html

    r253629 r261841  
    66<meta name="assert" content="Checks grid items percentage margins are resolved against the inline size of their grid area (in a fixed size track).">
    77<link rel="stylesheet" href="/css/support/grid.css">
     8<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
    89<style>
    910.grid {
     
    3031<script src="/resources/testharnessreport.js"></script>
    3132<script src="/resources/check-layout-th.js"></script>
     33<script type="text/javascript">
     34  setup({ explicit_done: true });
     35</script>
    3236
    33 <body onload="checkLayout('.grid')">
     37<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })">
    3438
    3539<div id="log"></div>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-002.html

    r253629 r261841  
    66<meta name="assert" content="Checks grid items percentage margins are resolved against the inline size of their grid area (in a track with fixed max sizing function and intrinsic min).">
    77<link rel="stylesheet" href="/css/support/grid.css">
     8<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
    89<style>
    910.grid {
     
    3031<script src="/resources/testharnessreport.js"></script>
    3132<script src="/resources/check-layout-th.js"></script>
     33<script type="text/javascript">
     34  setup({ explicit_done: true });
     35</script>
    3236
    33 <body onload="checkLayout('.grid')">
     37<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })">
    3438
    3539<div id="log"></div>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html

    r253629 r261841  
    66<meta name="assert" content="Checks grid items percentage margins are resolved against the inline size of their grid area (in a fixed size track) in a vertical-lr grid container.">
    77<link rel="stylesheet" href="/css/support/grid.css">
     8<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
    89<style>
    910.grid {
     
    3132<script src="/resources/testharnessreport.js"></script>
    3233<script src="/resources/check-layout-th.js"></script>
     34<script type="text/javascript">
     35  setup({ explicit_done: true });
     36</script>
    3337
    34 <body onload="checkLayout('.grid')">
     38<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })">
    3539
    3640<div id="log"></div>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html

    r253629 r261841  
    66<meta name="assert" content="Checks grid items percentage margins are resolved against the inline size of their grid area (in a track with fixed max sizing function and intrinsic min) in a vertical-lr grid container.">
    77<link rel="stylesheet" href="/css/support/grid.css">
     8<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
    89<style>
    910.grid {
     
    3132<script src="/resources/testharnessreport.js"></script>
    3233<script src="/resources/check-layout-th.js"></script>
     34<script type="text/javascript">
     35  setup({ explicit_done: true });
     36</script>
    3337
    34 <body onload="checkLayout('.grid')">
     38<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })">
    3539
    3640<div id="log"></div>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-001.html

    r253629 r261841  
    66<meta name="assert" content="Checks grid items percentage margins are resolved against the inline size of their grid area (in a fixed size track) in a vertical-rl grid container.">
    77<link rel="stylesheet" href="/css/support/grid.css">
     8<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
    89<style>
    910.grid {
     
    3132<script src="/resources/testharnessreport.js"></script>
    3233<script src="/resources/check-layout-th.js"></script>
     34<script type="text/javascript">
     35  setup({ explicit_done: true });
     36</script>
    3337
    34 <body onload="checkLayout('.grid')">
     38<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })">
    3539
    3640<div id="log"></div>
     
    7175
    7276<div class="grid directionRTL">
    73   <div class="marginLeft50Percent" data-expected-margin-left="50" data-expected-x="60" data-expected-width="10" data-expected-height="10">X</div>
     77  <div class="marginLeft50Percent" data-expected-margin-left="50" data-offset-x="60" data-expected-width="10" data-expected-height="10">X</div>
    7478  <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div>
    7579</div>
     
    7882
    7983<div class="grid directionRTL">
    80   <div class="marginRight50Percent" data-expected-margin-right="50" data-expected-x="10" data-expected-width="10" data-expected-height="10">X</div>
     84  <div class="marginRight50Percent" data-expected-margin-right="50" data-offset-x="10" data-expected-width="10" data-expected-height="10">X</div>
    8185  <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div>
    8286</div>
     
    8589
    8690<div class="grid directionRTL">
    87   <div class="marginTop50Percent" data-expected-margin-top="50" data-expected-y="490" data-expected-width="10" data-expected-height="10">X</div>
     91  <div class="marginTop50Percent" data-expected-margin-top="50" data-offset-y="490" data-expected-width="10" data-expected-height="10">X</div>
    8892  <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div>
    8993</div>
     
    9296
    9397<div class="grid directionRTL">
    94   <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-expected-y="440" data-expected-width="10" data-expected-height="10">X</div>
     98  <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-offset-y="440" data-expected-width="10" data-expected-height="10">X</div>
    9599  <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div>
    96100</div>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-002.html

    r253629 r261841  
    66<meta name="assert" content="Checks grid items percentage margins are resolved against the inline size of their grid area (in a track with fixed max sizing function and intrinsic min) in a vertical-rl grid container.">
    77<link rel="stylesheet" href="/css/support/grid.css">
     8<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
    89<style>
    910.grid {
     
    3132<script src="/resources/testharnessreport.js"></script>
    3233<script src="/resources/check-layout-th.js"></script>
     34<script type="text/javascript">
     35  setup({ explicit_done: true });
     36</script>
    3337
    34 <body onload="checkLayout('.grid')">
     38<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })">
    3539
    3640<div id="log"></div>
     
    7175
    7276<div class="grid directionRTL">
    73   <div class="marginLeft50Percent" data-expected-margin-left="50" data-expected-x="60" data-expected-width="10" data-expected-height="10">X</div>
     77  <div class="marginLeft50Percent" data-expected-margin-left="50" data-offset-x="60" data-expected-width="10" data-expected-height="10">X</div>
    7478  <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div>
    7579</div>
     
    7882
    7983<div class="grid directionRTL">
    80   <div class="marginRight50Percent" data-expected-margin-right="50" data-expected-x="10" data-expected-width="10" data-expected-height="10">X</div>
     84  <div class="marginRight50Percent" data-expected-margin-right="50" data-offset-x="10" data-expected-width="10" data-expected-height="10">X</div>
    8185  <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div>
    8286</div>
     
    8589
    8690<div class="grid directionRTL">
    87   <div class="marginTop50Percent" data-expected-margin-top="50" data-expected-y="490" data-expected-width="10" data-expected-height="10">X</div>
     91  <div class="marginTop50Percent" data-expected-margin-top="50" data-offset-y="490" data-expected-width="10" data-expected-height="10">X</div>
    8892  <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div>
    8993</div>
     
    9296
    9397<div class="grid directionRTL">
    94   <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-expected-y="440" data-expected-width="10" data-expected-height="10">X</div>
     98  <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-offset-y="440" data-expected-width="10" data-expected-height="10">X</div>
    9599  <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div>
    96100</div>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-001.html

    r253629 r261841  
    66<meta name="assert" content="Checks grid items percentage paddings are resolved against the inline size of their grid area (in a fixed size track).">
    77<link rel="stylesheet" href="/css/support/grid.css">
     8<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
    89<style>
    910.grid {
     
    3031<script src="/resources/testharnessreport.js"></script>
    3132<script src="/resources/check-layout-th.js"></script>
     33<script type="text/javascript">
     34  setup({ explicit_done: true });
     35</script>
    3236
    33 <body onload="checkLayout('.grid')">
     37<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })">
    3438
    3539<div id="log"></div>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-002.html

    r253629 r261841  
    66<meta name="assert" content="Checks grid items percentage paddings are resolved against the inline size of their grid area (in a track with fixed max sizing function and intrinsic min).">
    77<link rel="stylesheet" href="/css/support/grid.css">
     8<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
    89<style>
    910.grid {
     
    3031<script src="/resources/testharnessreport.js"></script>
    3132<script src="/resources/check-layout-th.js"></script>
     33<script type="text/javascript">
     34  setup({ explicit_done: true });
     35</script>
    3236
    33 <body onload="checkLayout('.grid')">
     37<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })">
    3438
    3539<div id="log"></div>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html

    r253629 r261841  
    66<meta name="assert" content="Checks grid items percentage paddings are resolved against the inline size of their grid area (in a fixed size track) in a vertical-lr grid container.">
    77<link rel="stylesheet" href="/css/support/grid.css">
     8<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
    89<style>
    910.grid {
     
    3132<script src="/resources/testharnessreport.js"></script>
    3233<script src="/resources/check-layout-th.js"></script>
     34<script type="text/javascript">
     35  setup({ explicit_done: true });
     36</script>
    3337
    34 <body onload="checkLayout('.grid')">
     38<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })">
    3539
    3640<div id="log"></div>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html

    r253629 r261841  
    66<meta name="assert" content="Checks grid items percentage paddings are resolved against the inline size of their grid area (in a track with fixed max sizing function and intrinsic min) in a vertical-lr grid container.">
    77<link rel="stylesheet" href="/css/support/grid.css">
     8<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
    89<style>
    910.grid {
     
    3132<script src="/resources/testharnessreport.js"></script>
    3233<script src="/resources/check-layout-th.js"></script>
     34<script type="text/javascript">
     35  setup({ explicit_done: true });
     36</script>
    3337
    34 <body onload="checkLayout('.grid')">
     38<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })">
    3539
    3640<div id="log"></div>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html

    r253629 r261841  
    66<meta name="assert" content="Checks grid items percentage paddings are resolved against the inline size of their grid area (in a fixed size track) in a vertical-rl grid container.">
    77<link rel="stylesheet" href="/css/support/grid.css">
     8<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
    89<style>
    910.grid {
     
    3132<script src="/resources/testharnessreport.js"></script>
    3233<script src="/resources/check-layout-th.js"></script>
     34<script type="text/javascript">
     35  setup({ explicit_done: true });
     36</script>
    3337
    34 <body onload="checkLayout('.grid')">
     38<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })">
    3539
    3640<div id="log"></div>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html

    r253629 r261841  
    66<meta name="assert" content="Checks grid items percentage paddings are resolved against the inline size of their grid area (in a track with fixed max sizing function and intrinsic min) in a vertical-rl grid container.">
    77<link rel="stylesheet" href="/css/support/grid.css">
     8<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
    89<style>
    910.grid {
     
    3132<script src="/resources/testharnessreport.js"></script>
    3233<script src="/resources/check-layout-th.js"></script>
     34<script type="text/javascript">
     35  setup({ explicit_done: true });
     36</script>
    3337
    34 <body onload="checkLayout('.grid')">
     38<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })">
    3539
    3640<div id="log"></div>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/w3c-import.log

    r238079 r261841  
    9595/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-001.html
    9696/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-002.html
     97/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003-expected.xht
     98/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003.html
     99/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004-expected.xht
     100/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004.html
     101/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005-expected.xht
     102/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005.html
     103/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006-expected.xht
     104/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006.html
     105/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007-expected.xht
     106/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007.html
     107/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008-expected.xht
     108/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008.html
     109/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009-expected.xht
     110/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009.html
     111/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010-expected.xht
     112/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010.html
     113/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-011-expected.xht
     114/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-011.html
     115/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-012-expected.xht
     116/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-012.html
     117/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-013-expected.xht
     118/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-013.html
     119/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-014-expected.xht
     120/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-014.html
    97121/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html
    98122/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html
     
    101125/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-001.html
    102126/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-002.html
     127/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-003-expected.xht
     128/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-003.html
     129/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-004-expected.xht
     130/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-004.html
     131/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005-expected.xht
     132/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005.html
     133/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006-expected.xht
     134/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006.html
     135/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-007-expected.xht
     136/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-007.html
     137/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-008-expected.xht
     138/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-008.html
     139/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009-expected.xht
     140/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009.html
     141/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010-expected.xht
     142/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010.html
     143/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-011-expected.xht
     144/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-011.html
     145/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-012-expected.xht
     146/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-012.html
     147/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-013-expected.xht
     148/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-013.html
     149/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-014-expected.xht
     150/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-014.html
    103151/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html
    104152/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html
  • trunk/Source/WebCore/ChangeLog

    r261840 r261841  
     12020-05-18  Oriol Brufau  <obrufau@igalia.com>
     2
     3        [css-grid] Clear the override width for computing percent margins
     4        https://bugs.webkit.org/show_bug.cgi?id=209461
     5
     6        Reviewed by Manuel Rego Casasnovas.
     7
     8        When calculating the min-content contribution of a grid item of an auto
     9        sized grid track we must consider the grid item's margin. When the grid
     10        item's area is indefinite, a percent margin is resolved to zero.
     11        However, when performing a relayout, the percent margin may be solved
     12        against the previously computed grid area, since the grid item has
     13        already an OverrideContainingBlockLogicalWidth value.
     14
     15        In order to re-compute the percent margin properly, we need to clear
     16        the previously override value. It's important to be careful of not
     17        clearing the override value set during intrinsic size, since we need
     18        it for the actual layout phase. Hence, we only reset the 'override'
     19        value when we are executing a definite strategy.
     20
     21        Tests: imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html
     22               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html
     23               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003.html
     24               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004.html
     25               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005.html
     26               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006.html
     27               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007.html
     28               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008.html
     29               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009.html
     30               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010.html
     31               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-011.html
     32               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-012.html
     33               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-013.html
     34               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-014.html
     35               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-003.html
     36               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-004.html
     37               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005.html
     38               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006.html
     39               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-007.html
     40               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-008.html
     41               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009.html
     42               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010.html
     43               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-011.html
     44               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-012.html
     45               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-013.html
     46               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-014.html
     47
     48        * rendering/GridTrackSizingAlgorithm.cpp:
     49        (WebCore::hasRelativeMarginOrPaddingForChild):
     50        (WebCore::hasRelativeOrIntrinsicSizeForChild):
     51        (WebCore::shouldClearOverrideContainingBlockContentSizeForChild):
     52        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
     53        (WebCore::GridTrackSizingAlgorithmStrategy::minLogicalSizeForChild const):
     54        (WebCore::DefiniteSizeStrategy::minLogicalSizeForChild const):
     55        (WebCore::DefiniteSizeStrategy::minContentForChild const):
     56        * rendering/GridTrackSizingAlgorithm.h:
     57
    1582020-05-18  David Kilzer  <ddkilzer@apple.com>
    259
  • trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp

    r261767 r261841  
    107107}
    108108
    109 static bool shouldClearOverrideContainingBlockContentSizeForChild(const RenderBox& child, GridTrackSizingDirection direction)
     109static bool hasRelativeMarginOrPaddingForChild(const RenderBox& child, GridTrackSizingDirection direction)
     110{
     111    if (direction == ForColumns)
     112        return child.style().marginStart().isPercentOrCalculated() || child.style().marginEnd().isPercentOrCalculated() || child.style().paddingStart().isPercentOrCalculated() || child.style().paddingEnd().isPercentOrCalculated();
     113    return child.style().marginBefore().isPercentOrCalculated() || child.style().marginAfter().isPercentOrCalculated() || child.style().paddingBefore().isPercentOrCalculated() || child.style().paddingAfter().isPercentOrCalculated();
     114}
     115static bool hasRelativeOrIntrinsicSizeForChild(const RenderBox& child, GridTrackSizingDirection direction)
    110116{
    111117    if (direction == ForColumns)
    112118        return child.hasRelativeLogicalWidth() || child.style().logicalWidth().isIntrinsicOrAuto();
    113119    return child.hasRelativeLogicalHeight() || child.style().logicalHeight().isIntrinsicOrAuto();
     120}
     121
     122static bool shouldClearOverrideContainingBlockContentSizeForChild(const RenderBox& child, GridTrackSizingDirection direction)
     123{
     124    return hasRelativeOrIntrinsicSizeForChild(child, direction) || hasRelativeMarginOrPaddingForChild(child, direction);
    114125}
    115126
     
    120131    else
    121132        child.setOverrideContainingBlockContentLogicalHeight(size);
    122 }
    123 
    124 // FIXME: we borrowed this from RenderBlock. We cannot call it from here because it's protected for RenderObjects.
    125 static LayoutUnit marginIntrinsicLogicalWidthForChild(const RenderGrid* renderGrid, RenderBox& child)
    126 {
    127     // A margin has three types: fixed, percentage, and auto (variable).
    128     // Auto and percentage margins become 0 when computing min/max width.
    129     // Fixed margins can be added in as is.
    130     Length marginLeft = child.style().marginStartUsing(&renderGrid->style());
    131     Length marginRight = child.style().marginEndUsing(&renderGrid->style());
    132     LayoutUnit margin;
    133     if (marginLeft.isFixed())
    134         margin += marginLeft.value();
    135     if (marginRight.isFixed())
    136         margin += marginRight.value();
    137     return margin;
    138133}
    139134
     
    833828
    834829    LayoutUnit gridAreaSize = m_algorithm.gridAreaBreadthForChild(child, childInlineDirection);
    835     if (isRowAxis)
    836         return minLogicalWidthForChild(child, childMinSize, gridAreaSize) + baselineShim;
    837 
    838     bool overrideSizeHasChanged = updateOverrideContainingBlockContentSizeForChild(child, childInlineDirection, gridAreaSize);
    839     layoutGridItemForMinSizeComputation(child, overrideSizeHasChanged);
    840 
    841     return child.computeLogicalHeightUsing(MinSize, childMinSize, WTF::nullopt).valueOr(0) + child.marginLogicalHeight() + child.scrollbarLogicalHeight() + baselineShim;
     830    return minLogicalSizeForChild(child, childMinSize, gridAreaSize) + baselineShim;
    842831}
    843832
     
    921910}
    922911
     912LayoutUnit GridTrackSizingAlgorithmStrategy::minLogicalSizeForChild(RenderBox& child, const Length& childMinSize, LayoutUnit availableSize) const
     913{
     914    GridTrackSizingDirection childInlineDirection = GridLayoutFunctions::flowAwareDirectionForChild(*renderGrid(), child, ForColumns);
     915    bool isRowAxis = direction() == childInlineDirection;
     916    if (isRowAxis)
     917        return child.computeLogicalWidthInFragmentUsing(MinSize, childMinSize, availableSize, *renderGrid(), nullptr) + GridLayoutFunctions::marginLogicalSizeForChild(*renderGrid(), childInlineDirection, child);
     918    bool overrideSizeHasChanged = updateOverrideContainingBlockContentSizeForChild(child, childInlineDirection, availableSize);
     919    layoutGridItemForMinSizeComputation(child, overrideSizeHasChanged);
     920    GridTrackSizingDirection childBlockDirection = GridLayoutFunctions::flowAwareDirectionForChild(*renderGrid(), child, ForRows);
     921    return child.computeLogicalHeightUsing(MinSize, childMinSize, WTF::nullopt).valueOr(0) + GridLayoutFunctions::marginLogicalSizeForChild(*renderGrid(), childBlockDirection, child);
     922}
     923
    923924class IndefiniteSizeStrategy final : public GridTrackSizingAlgorithmStrategy {
    924925public:
     
    927928
    928929private:
    929     LayoutUnit minLogicalWidthForChild(RenderBox&, Length childMinSize, LayoutUnit availableSize) const override;
    930930    void layoutGridItemForMinSizeComputation(RenderBox&, bool overrideSizeHasChanged) const override;
    931931    void maximizeTracks(Vector<GridTrack>&, Optional<LayoutUnit>& freeSpace) override;
     
    934934    LayoutUnit freeSpaceForStretchAutoTracksStep() const override;
    935935};
    936 
    937 LayoutUnit IndefiniteSizeStrategy::minLogicalWidthForChild(RenderBox& child, Length childMinSize, LayoutUnit availableSize) const
    938 {
    939     return child.computeLogicalWidthInFragmentUsing(MinSize, childMinSize, availableSize, *renderGrid(), nullptr) + marginIntrinsicLogicalWidthForChild(renderGrid(), child);
    940 }
    941936
    942937void IndefiniteSizeStrategy::layoutGridItemForMinSizeComputation(RenderBox& child, bool overrideSizeHasChanged) const
     
    10281023
    10291024private:
    1030     LayoutUnit minLogicalWidthForChild(RenderBox&, Length childMinSize, LayoutUnit availableSize) const override;
    10311025    void layoutGridItemForMinSizeComputation(RenderBox&, bool overrideSizeHasChanged) const override;
    10321026    void maximizeTracks(Vector<GridTrack>&, Optional<LayoutUnit>& freeSpace) override;
     
    10341028    bool recomputeUsedFlexFractionIfNeeded(double& flexFraction, LayoutUnit& totalGrowth) const override;
    10351029    LayoutUnit freeSpaceForStretchAutoTracksStep() const override;
     1030    LayoutUnit minContentForChild(RenderBox&) const override;
     1031    LayoutUnit minLogicalSizeForChild(RenderBox&, const Length& childMinSize, LayoutUnit availableSize) const override;
    10361032};
    10371033
     
    10481044}
    10491045
    1050 LayoutUnit DefiniteSizeStrategy::minLogicalWidthForChild(RenderBox& child, Length childMinSize, LayoutUnit availableSize) const
    1051 {
    1052     LayoutUnit marginLogicalWidth =
    1053         GridLayoutFunctions::computeMarginLogicalSizeForChild(*renderGrid(), ForColumns, child);
    1054     return child.computeLogicalWidthInFragmentUsing(MinSize, childMinSize, availableSize, *renderGrid(), nullptr) + marginLogicalWidth;
     1046LayoutUnit DefiniteSizeStrategy::minLogicalSizeForChild(RenderBox& child, const Length& childMinSize, LayoutUnit availableSize) const
     1047{
     1048    GridTrackSizingDirection childInlineDirection = GridLayoutFunctions::flowAwareDirectionForChild(*renderGrid(), child, ForColumns);
     1049    LayoutUnit indefiniteSize = direction() == childInlineDirection ? LayoutUnit() : LayoutUnit(-1);
     1050    GridTrackSizingDirection flowAwareDirection = GridLayoutFunctions::flowAwareDirectionForChild(*renderGrid(), child, direction());
     1051    if (hasRelativeMarginOrPaddingForChild(child, flowAwareDirection) || (direction() != childInlineDirection && hasRelativeOrIntrinsicSizeForChild(child, flowAwareDirection)))
     1052        setOverrideContainingBlockContentSizeForChild(child, direction(), indefiniteSize);
     1053    return GridTrackSizingAlgorithmStrategy::minLogicalSizeForChild(child, childMinSize, availableSize);
    10551054}
    10561055
     
    10891088{
    10901089    return m_algorithm.freeSpace(direction()).value();
     1090}
     1091
     1092LayoutUnit DefiniteSizeStrategy::minContentForChild(RenderBox& child) const
     1093{
     1094    GridTrackSizingDirection childInlineDirection = GridLayoutFunctions::flowAwareDirectionForChild(*renderGrid(), child, ForColumns);
     1095    if (direction() == childInlineDirection && child.needsLayout() && shouldClearOverrideContainingBlockContentSizeForChild(child, ForColumns))
     1096        setOverrideContainingBlockContentSizeForChild(child, childInlineDirection, LayoutUnit());
     1097    return GridTrackSizingAlgorithmStrategy::minContentForChild(child);
    10911098}
    10921099
  • trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.h

    r256826 r261841  
    253253    WTF_MAKE_FAST_ALLOCATED;
    254254public:
    255     LayoutUnit minContentForChild(RenderBox&) const;
     255    virtual LayoutUnit minContentForChild(RenderBox&) const;
    256256    LayoutUnit maxContentForChild(RenderBox&) const;
    257257    LayoutUnit minSizeForChild(RenderBox&) const;
     
    268268        : m_algorithm(algorithm) { }
    269269
    270     virtual LayoutUnit minLogicalWidthForChild(RenderBox&, Length childMinSize, LayoutUnit availableSize) const = 0;
     270    virtual LayoutUnit minLogicalSizeForChild(RenderBox&, const Length& childMinSize, LayoutUnit availableSize) const;
    271271    virtual void layoutGridItemForMinSizeComputation(RenderBox&, bool overrideSizeHasChanged) const = 0;
    272272
Note: See TracChangeset for help on using the changeset viewer.