diff options
21 files changed, 35 insertions, 38 deletions
diff --git a/components/layout_2020/display_list/stacking_context.rs b/components/layout_2020/display_list/stacking_context.rs index 63fefd0c4f4..a231ab088a7 100644 --- a/components/layout_2020/display_list/stacking_context.rs +++ b/components/layout_2020/display_list/stacking_context.rs @@ -200,6 +200,11 @@ pub(crate) enum StackingContextType { PseudoAtomicInline, } +/// A [StackingContext] represents either a stacking context or a stacking +/// container according to the definitions outlined in +/// <https://drafts.csswg.org/css-position-4/#painting-order> +/// Stacking containers are sometimes called "pseudo-stacking contexts" +/// in the Servo source. pub struct StackingContext { /// The spatial id of this fragment. This is used to properly handle /// things like preserve-3d. @@ -218,7 +223,19 @@ pub struct StackingContext { /// of this stacking context. stacking_contexts: Vec<StackingContext>, - /// All float pseudo stacking context children of this stacking context. + /// All float stacking container children of this stacking context. + /// These are stored separately because they should not be passed up to + /// their real stacking context ancestors. From the definition of stacking + /// containers from <https://drafts.csswg.org/css-position-4#painting-order>: + /// + /// > To paint a stacking container, given a box root and a canvas canvas: + /// > 1. Paint a stacking context given root and canvas, treating root as + /// > if it created a new stacking context, but omitting any positioned + /// > descendants or descendants that actually create a stacking context + /// > (letting the parent stacking context paint them, instead). + /// + /// Note that all stacking containers / pseudo stacking contexts are passed up + /// to parent stacking contexts, except in the case of floats. float_stacking_contexts: Vec<StackingContext>, } @@ -249,6 +266,15 @@ impl StackingContext { } } + /// Add a child stacking context to this stacking context. + fn add_stacking_context(&mut self, stacking_context: StackingContext) { + if stacking_context.context_type == StackingContextType::PseudoFloat { + self.float_stacking_contexts.push(stacking_context); + } else { + self.stacking_contexts.push(stacking_context); + } + } + fn z_index(&self) -> i32 { self.initializing_fragment_style .as_ref() @@ -754,9 +780,7 @@ impl BoxFragment { } child_stacking_context.sort(); - parent_stacking_context - .stacking_contexts - .push(child_stacking_context); + parent_stacking_context.add_stacking_context(child_stacking_context); parent_stacking_context .stacking_contexts .append(&mut stolen_children); diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/css1/c414-flt-wrap-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/css1/c414-flt-wrap-001.xht.ini new file mode 100644 index 00000000000..b07643272b6 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/CSS2/css1/c414-flt-wrap-001.xht.ini @@ -0,0 +1,2 @@ +[c414-flt-wrap-001.xht] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats-clear/clear-clearance-calculation-003.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats-clear/clear-clearance-calculation-003.xht.ini deleted file mode 100644 index 73ce7f8a1eb..00000000000 --- a/tests/wpt/metadata-layout-2020/css/CSS2/floats-clear/clear-clearance-calculation-003.xht.ini +++ /dev/null @@ -1,2 +0,0 @@ -[clear-clearance-calculation-003.xht] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-001.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-001.html.ini deleted file mode 100644 index 17aa43d18b1..00000000000 --- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-001.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[floats-placement-001.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-002.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-002.html.ini deleted file mode 100644 index 4e00856c08e..00000000000 --- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-002.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[floats-placement-002.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-003.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-003.html.ini deleted file mode 100644 index 90225d8f4d4..00000000000 --- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-003.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[floats-placement-003.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-008.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-008.html.ini deleted file mode 100644 index 5a1e705388f..00000000000 --- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-008.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[floats-placement-008.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-001.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-001.html.ini new file mode 100644 index 00000000000..0842d0b5727 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-001.html.ini @@ -0,0 +1,3 @@ +[hit-test-floats-001.html] + [hit-test-floats-001] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-001.xht.ini deleted file mode 100644 index 51b3c04a7f4..00000000000 --- a/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-001.xht.ini +++ /dev/null @@ -1,2 +0,0 @@ -[stack-floats-001.xht] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-002.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-002.xht.ini deleted file mode 100644 index 413e005eeda..00000000000 --- a/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-002.xht.ini +++ /dev/null @@ -1,2 +0,0 @@ -[stack-floats-002.xht] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-004.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-004.xht.ini deleted file mode 100644 index 0e8029cf3cb..00000000000 --- a/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-004.xht.ini +++ /dev/null @@ -1,2 +0,0 @@ -[stack-floats-004.xht] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-center.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-center.html.ini deleted file mode 100644 index dcb5578932d..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-center.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[flex-align-content-center.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-end.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-end.html.ini deleted file mode 100644 index d813a3dbc90..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-end.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[flex-align-content-end.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-space-around.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-space-around.html.ini deleted file mode 100644 index 0df689e3f18..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-space-around.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[flex-align-content-space-around.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-space-between.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-space-between.html.ini deleted file mode 100644 index e10b2f33ae2..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-space-between.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[flex-align-content-space-between.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-start.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-start.html.ini deleted file mode 100644 index 19e606aada8..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-start.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[flex-align-content-start.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/flexbox_flex-formatting-interop.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/flexbox_flex-formatting-interop.html.ini new file mode 100644 index 00000000000..0a5916356e7 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/flexbox_flex-formatting-interop.html.ini @@ -0,0 +1,2 @@ +[flexbox_flex-formatting-interop.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-position/position-absolute-dynamic-static-position-floats-004.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/position-absolute-dynamic-static-position-floats-004.html.ini deleted file mode 100644 index e488c064bb1..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-position/position-absolute-dynamic-static-position-floats-004.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[position-absolute-dynamic-static-position-floats-004.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-004.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-004.html.ini deleted file mode 100644 index 972f6697b03..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-004.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[inline-level-absolute-in-block-level-context-004.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-009.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-009.html.ini deleted file mode 100644 index 0653a572396..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-009.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[inline-level-absolute-in-block-level-context-009.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-010.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-010.html.ini deleted file mode 100644 index 2035850bdc8..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-010.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[inline-level-absolute-in-block-level-context-010.html] - expected: FAIL |