Layout: Implement CSS Grid using taffy (#32619)

* Add layout.grid.enabled pref

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Add taffy dependency

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Import taffy <-> stylo conversion code from taffy_stylo crate

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Add `Grid` variant to DisplayInside

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Implement CSS Grid using Taffy

Signed-off-by: Nico Burns <nico@nicoburns.com>

Import full stylo_taffy crate

Signed-off-by: Nico Burns <nico@nicoburns.com>

Squashed PR feedback changes

Deduplicate is_document_only_whitespace

Signed-off-by: Nico Burns <nico@nicoburns.com>

Import taffy::AvailableSpace

Signed-off-by: Nico Burns <nico@nicoburns.com>

Rename FlexContext to TaffyContainerContext

Signed-off-by: Nico Burns <nico@nicoburns.com>

Eliminate references to flexbox in taffy/layout module

Signed-off-by: Nico Burns <nico@nicoburns.com>

Use constructors for geom types

Signed-off-by: Nico Burns <nico@nicoburns.com>

Remove comment about abspos elements splitting contiguous text runs

Signed-off-by: Nico Burns <nico@nicoburns.com>

Remove reference to flexbox in taffy/construct

Signed-off-by: Nico Burns <nico@nicoburns.com>

Deduplicate construction of flexbox/grid containers

Signed-off-by: Nico Burns <nico@nicoburns.com>

Make anonymous text runs InFlow

Signed-off-by: Nico Burns <nico@nicoburns.com>

Remove commented code

Signed-off-by: Nico Burns <nico@nicoburns.com>

Update comments

Signed-off-by: Nico Burns <nico@nicoburns.com>

Inline/vendor the stylo/taffy interop code

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Update test expectations

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Fix nits from PR review

Signed-off-by: Nico Burns <nico@nicoburns.com>

---------

Signed-off-by: Nico Burns <nico@nicoburns.com>
This commit is contained in:
Nico Burns 2024-11-22 09:21:01 +13:00 committed by GitHub
parent 339062c890
commit 6cbd89dbb0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
508 changed files with 2057 additions and 10408 deletions

View file

@ -1,2 +0,0 @@
[anonymous-grid-item-001.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[aspect-ratio-001.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[aspect-ratio-002.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[aspect-ratio-003.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[aspect-ratio-004.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-inline-items-001.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-inline-items-002.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-inline-items-003.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-inline-order-property-auto-placement-001.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-inline-order-property-auto-placement-002.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-inline-order-property-auto-placement-003.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-inline-order-property-auto-placement-004.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-inline-order-property-auto-placement-005.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-inline-order-property-painting-001.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-inline-order-property-painting-002.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-inline-order-property-painting-003.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-inline-order-property-painting-004.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-inline-order-property-painting-005.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[grid-intrinsic-maximums.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-item-containing-block-001.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-item-containing-block-002.html]
expected: FAIL

View file

@ -1,6 +1,6 @@
[grid-item-dynamic-min-contribution-001.html]
[Minimum size: auto]
[Minimum size: 200%]
expected: FAIL
[Minimum size: 0%]
[Minimum size: 300%]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-item-inline-contribution-002.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-item-inline-contribution-003.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[grid-item-margins-and-writing-modes-001.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-items-003.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-items-contribution-negative-margins.html]
expected: FAIL

View file

@ -1,10 +1,4 @@
[grid-items-percentage-margins-001.html]
[.grid 1]
expected: FAIL
[.grid 2]
expected: FAIL
[.grid 3]
expected: FAIL

View file

@ -1,10 +1,4 @@
[grid-items-percentage-margins-002.html]
[.grid 1]
expected: FAIL
[.grid 2]
expected: FAIL
[.grid 3]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-items-percentage-margins-003.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-items-percentage-margins-004.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-items-percentage-margins-005.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-items-percentage-margins-006.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-items-percentage-margins-011.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-items-percentage-margins-012.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-items-percentage-margins-013.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-items-percentage-margins-014.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-items-percentage-paddings-007.html]
expected: FAIL

View file

@ -1,7 +1,4 @@
[grid-items-relative-offsets-001.html]
[.grid 1]
expected: FAIL
[.grid 2]
expected: FAIL

View file

@ -1,7 +1,4 @@
[grid-items-relative-offsets-002.html]
[.grid 1]
expected: FAIL
[.grid 2]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-layout-grid-in-grid.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-minimum-size-grid-items-001.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-minimum-size-grid-items-002.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-minimum-size-grid-items-007.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-minimum-size-grid-items-009.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-minimum-size-grid-items-010.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-minimum-size-grid-items-011.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-minimum-size-grid-items-012.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-minimum-size-grid-items-013.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-minimum-size-grid-items-014.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-minimum-size-grid-items-016.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-minimum-size-grid-items-017.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-minimum-size-grid-items-018.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-minimum-size-grid-items-019.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-minimum-size-grid-items-020.html]
expected: FAIL

View file

@ -1,10 +1,4 @@
[grid-minimum-size-grid-items-021.html]
[grid-1.width]
expected: FAIL
[grid-1.height]
expected: FAIL
[grid-1.gridTemplateColumns]
expected: FAIL
@ -17,9 +11,6 @@
[grid-2.gridTemplateRows]
expected: FAIL
[grid-3.height]
expected: FAIL
[grid-3.gridTemplateColumns]
expected: FAIL
@ -59,12 +50,6 @@
[img-6.height]
expected: FAIL
[grid-7.width]
expected: FAIL
[grid-7.height]
expected: FAIL
[grid-7.gridTemplateColumns]
expected: FAIL
@ -77,9 +62,6 @@
[grid-8.gridTemplateRows]
expected: FAIL
[grid-9.height]
expected: FAIL
[grid-9.gridTemplateColumns]
expected: FAIL
@ -119,12 +101,6 @@
[img-12.height]
expected: FAIL
[grid-13.width]
expected: FAIL
[grid-13.height]
expected: FAIL
[grid-13.gridTemplateColumns]
expected: FAIL
@ -137,9 +113,6 @@
[grid-14.gridTemplateRows]
expected: FAIL
[grid-15.height]
expected: FAIL
[grid-15.gridTemplateColumns]
expected: FAIL
@ -152,9 +125,6 @@
[grid-16.gridTemplateRows]
expected: FAIL
[grid-17.height]
expected: FAIL
[grid-17.gridTemplateColumns]
expected: FAIL
@ -167,12 +137,6 @@
[grid-18.gridTemplateRows]
expected: FAIL
[grid-19.width]
expected: FAIL
[grid-19.height]
expected: FAIL
[grid-19.gridTemplateColumns]
expected: FAIL
@ -185,9 +149,6 @@
[grid-20.gridTemplateRows]
expected: FAIL
[grid-21.height]
expected: FAIL
[grid-21.gridTemplateColumns]
expected: FAIL
@ -200,9 +161,6 @@
[grid-22.gridTemplateRows]
expected: FAIL
[grid-23.height]
expected: FAIL
[grid-23.gridTemplateColumns]
expected: FAIL

View file

@ -1,135 +1,63 @@
[grid-minimum-size-grid-items-022.html]
[.grid 1]
expected: FAIL
[.grid 2]
expected: FAIL
[.grid 3]
expected: FAIL
[.grid 4]
expected: FAIL
[.grid 5]
expected: FAIL
[.grid 6]
expected: FAIL
[.grid 7]
expected: FAIL
[.grid 8]
expected: FAIL
[.grid 9]
expected: FAIL
[.grid 10]
expected: FAIL
[.grid 11]
expected: FAIL
[.grid 12]
expected: FAIL
[.grid 13]
expected: FAIL
[.grid 14]
expected: FAIL
[.grid 15]
expected: FAIL
[.grid 16]
expected: FAIL
[.grid 17]
expected: FAIL
[.grid 18]
expected: FAIL
[.grid 19]
expected: FAIL
[.grid 20]
expected: FAIL
[.grid 21]
expected: FAIL
[.grid 22]
expected: FAIL
[.grid 23]
expected: FAIL
[.grid 24]
expected: FAIL
[.grid 25]
expected: FAIL
[.grid 26]
expected: FAIL
[.grid 27]
expected: FAIL
[.grid 28]
expected: FAIL
[.grid 29]
expected: FAIL
[.grid 30]
expected: FAIL
[.grid 31]
expected: FAIL
[.grid 32]
expected: FAIL
[.grid 33]
expected: FAIL
[.grid 34]
expected: FAIL
[.grid 35]
expected: FAIL
[.grid 36]
expected: FAIL
[.grid 37]
expected: FAIL
[.grid 38]
expected: FAIL
[.grid 39]
expected: FAIL
[.grid 40]
expected: FAIL
[.grid 41]
expected: FAIL
[.grid 42]
expected: FAIL
[.grid 43]
expected: FAIL
[.grid 44]
expected: FAIL
[.grid 45]
expected: FAIL

View file

@ -2,179 +2,83 @@
[.grid 1]
expected: FAIL
[.grid 2]
expected: FAIL
[.grid 3]
expected: FAIL
[.grid 4]
expected: FAIL
[.grid 5]
expected: FAIL
[.grid 6]
expected: FAIL
[.grid 7]
expected: FAIL
[.grid 8]
expected: FAIL
[.grid 9]
expected: FAIL
[.grid 10]
expected: FAIL
[.grid 11]
expected: FAIL
[.grid 12]
expected: FAIL
[.grid 13]
expected: FAIL
[.grid 14]
expected: FAIL
[.grid 15]
expected: FAIL
[.grid 16]
expected: FAIL
[.grid 17]
expected: FAIL
[.grid 18]
expected: FAIL
[.grid 19]
expected: FAIL
[.grid 20]
expected: FAIL
[.grid 21]
expected: FAIL
[.grid 22]
expected: FAIL
[.grid 23]
expected: FAIL
[.grid 24]
expected: FAIL
[.grid 25]
expected: FAIL
[.grid 26]
expected: FAIL
[.grid 27]
expected: FAIL
[.grid 28]
expected: FAIL
[.grid 29]
expected: FAIL
[.grid 30]
expected: FAIL
[.grid 31]
expected: FAIL
[.grid 32]
expected: FAIL
[.grid 33]
expected: FAIL
[.grid 34]
expected: FAIL
[.grid 35]
expected: FAIL
[.grid 36]
expected: FAIL
[.grid 37]
expected: FAIL
[.grid 38]
expected: FAIL
[.grid 39]
expected: FAIL
[.grid 40]
expected: FAIL
[.grid 41]
expected: FAIL
[.grid 42]
expected: FAIL
[.grid 43]
expected: FAIL
[.grid 44]
expected: FAIL
[.grid 45]
expected: FAIL
[.grid 46]
expected: FAIL
[.grid 47]
expected: FAIL
[.grid 48]
expected: FAIL
[.grid 49]
expected: FAIL
[.grid 50]
expected: FAIL
[.grid 51]
expected: FAIL
[.grid 52]
expected: FAIL
[.grid 53]
expected: FAIL
[.grid 54]
expected: FAIL
[.grid 55]
expected: FAIL
[.grid 56]
expected: FAIL
[.grid 57]
expected: FAIL
[.grid 58]
expected: FAIL
[.grid 59]
expected: FAIL
[.grid 60]
expected: FAIL

View file

@ -1,49 +1,19 @@
[grid-minimum-size-grid-items-024.html]
[.grid 1]
expected: FAIL
[.grid 2]
expected: FAIL
[.grid 3]
expected: FAIL
[.grid 4]
expected: FAIL
[.grid 5]
expected: FAIL
[.grid 6]
expected: FAIL
[.grid 7]
expected: FAIL
[.grid 8]
expected: FAIL
[.grid 9]
expected: FAIL
[.grid 10]
expected: FAIL
[.grid 11]
expected: FAIL
[.grid 12]
expected: FAIL
[.grid 13]
expected: FAIL
[.grid 14]
expected: FAIL
[.grid 15]
expected: FAIL
[.grid 16]
expected: FAIL

View file

@ -2,93 +2,39 @@
[.grid 1]
expected: FAIL
[.grid 2]
expected: FAIL
[.grid 3]
expected: FAIL
[.grid 4]
expected: FAIL
[.grid 5]
expected: FAIL
[.grid 6]
expected: FAIL
[.grid 7]
expected: FAIL
[.grid 8]
expected: FAIL
[.grid 9]
expected: FAIL
[.grid 10]
expected: FAIL
[.grid 11]
expected: FAIL
[.grid 12]
expected: FAIL
[.grid 13]
expected: FAIL
[.grid 14]
expected: FAIL
[.grid 15]
expected: FAIL
[.grid 16]
expected: FAIL
[.grid 17]
expected: FAIL
[.grid 18]
expected: FAIL
[.grid 19]
expected: FAIL
[.grid 20]
expected: FAIL
[.grid 21]
expected: FAIL
[.grid 22]
expected: FAIL
[.grid 23]
expected: FAIL
[.grid 24]
expected: FAIL
[.grid 25]
expected: FAIL
[.grid 26]
expected: FAIL
[.grid 27]
expected: FAIL
[.grid 28]
expected: FAIL
[.grid 29]
expected: FAIL
[.grid 30]
expected: FAIL
[.grid 31]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-order-property-painting-001.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-order-property-painting-002.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-order-property-painting-003.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-order-property-painting-004.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[grid-order-property-painting-005.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[percentage-margin-dynamic.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[percentage-size-indefinite-replaced.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[percentage-size-replaced-subitems-001.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[percentage-size-subitems-001.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[percentage-size-subitems-002.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[replaced-element-011.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[replaced-element-012.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[replaced-element-013.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[replaced-element-014.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[whitespace-in-grid-item-001.html]
expected: FAIL