From b026dae8ac244be8b9682b119c5bf13e53d1cdb7 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Mon, 27 Jul 2020 23:15:46 -0700 Subject: [PATCH] Only apply clip() to positioned elements --- .../display_list/stacking_context.rs | 29 +++++++++++-------- .../clip-not-absolute-positioned-001.html.ini | 2 -- .../clip-not-absolute-positioned-002.html.ini | 2 -- .../clip-not-absolute-positioned-003.html.ini | 2 -- .../clip-not-absolute-positioned-004.html.ini | 2 -- 5 files changed, 17 insertions(+), 20 deletions(-) delete mode 100644 tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-001.html.ini delete mode 100644 tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-002.html.ini delete mode 100644 tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-003.html.ini delete mode 100644 tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-004.html.ini diff --git a/components/layout_2020/display_list/stacking_context.rs b/components/layout_2020/display_list/stacking_context.rs index 5c95b3168dc..a76b607fa6d 100644 --- a/components/layout_2020/display_list/stacking_context.rs +++ b/components/layout_2020/display_list/stacking_context.rs @@ -715,19 +715,24 @@ impl BoxFragment { builder: &mut StackingContextBuilder, containing_block_info: &ContainingBlockInfo, ) { - let clip = self.style.get_effects().clip; - if let ClipRectOrAuto::Rect(r) = clip { - let border_rect = self - .border_rect() - .to_physical(self.style.writing_mode, &containing_block_info.rect); - let clip_rect = r - .for_border_rect(border_rect) - .translate(containing_block_info.rect.origin.to_vector()) - .to_webrender(); + let position = self.style.get_box().position; + // https://drafts.csswg.org/css2/#clipping + // The clip property applies only to absolutely positioned elements + if position == ComputedPosition::Absolute || position == ComputedPosition::Fixed { + let clip = self.style.get_effects().clip; + if let ClipRectOrAuto::Rect(r) = clip { + let border_rect = self + .border_rect() + .to_physical(self.style.writing_mode, &containing_block_info.rect); + let clip_rect = r + .for_border_rect(border_rect) + .translate(containing_block_info.rect.origin.to_vector()) + .to_webrender(); - let parent = builder.current_space_and_clip; - builder.current_space_and_clip.clip_id = - builder.wr.define_clip_rect(&parent, clip_rect); + let parent = builder.current_space_and_clip; + builder.current_space_and_clip.clip_id = + builder.wr.define_clip_rect(&parent, clip_rect); + } } } diff --git a/tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-001.html.ini deleted file mode 100644 index 57f7fa26349..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-001.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[clip-not-absolute-positioned-001.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-002.html.ini b/tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-002.html.ini deleted file mode 100644 index 118d113a23f..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-002.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[clip-not-absolute-positioned-002.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-003.html.ini b/tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-003.html.ini deleted file mode 100644 index e0b8b1aa04f..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-003.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[clip-not-absolute-positioned-003.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-004.html.ini b/tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-004.html.ini deleted file mode 100644 index 99b0e02d4a4..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-masking/clip/clip-not-absolute-positioned-004.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[clip-not-absolute-positioned-004.html] - expected: FAIL