From fbcfd98c16d5bd100c02add8d671d0b39746c54b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Fri, 14 Dec 2018 21:58:00 +0100 Subject: [PATCH] batch: Use the right clip rect for drop shadows. We don't really want to translate the clip, and furthermore, the picture clip rect for these pictures is always the max rect, so it's not really what we want. https://searchfox.org/mozilla-central/rev/49e78df13e7a505827a3a86daae9efdf827133c6/gfx/wr/webrender/src/display_list_flattener.rs#1472 This fixes https://bugzilla.mozilla.org/show_bug.cgi?id=1496019 --- webrender/src/batch.rs | 4 +--- .../filters/filter-drop-shadow-clip.png | Bin 0 -> 10005 bytes .../filters/filter-drop-shadow-clip.yaml | 22 ++++++++++++++++++ wrench/reftests/filters/reftest.list | 1 + 4 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 wrench/reftests/filters/filter-drop-shadow-clip.png create mode 100644 wrench/reftests/filters/filter-drop-shadow-clip.yaml diff --git a/webrender/src/batch.rs b/webrender/src/batch.rs index e3ed1c4453..f4c1102aa4 100644 --- a/webrender/src/batch.rs +++ b/webrender/src/batch.rs @@ -1155,12 +1155,10 @@ impl AlphaBatchBuilder { get_shader_opacity(1.0), ]); - let shadow_rect = picture.local_rect.translate(&offset); - let shadow_clip_rect = picture.local_clip_rect.translate(&offset); + let shadow_rect = prim_header.local_rect.translate(&offset); let shadow_prim_header = PrimitiveHeader { local_rect: shadow_rect, - local_clip_rect: shadow_clip_rect, specific_prim_address: shadow_prim_address, ..prim_header }; diff --git a/wrench/reftests/filters/filter-drop-shadow-clip.png b/wrench/reftests/filters/filter-drop-shadow-clip.png new file mode 100644 index 0000000000000000000000000000000000000000..538a53636170a4b3951c5c041864069caa0b2d1e GIT binary patch literal 10005 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 literal 0 HcmV?d00001 diff --git a/wrench/reftests/filters/filter-drop-shadow-clip.yaml b/wrench/reftests/filters/filter-drop-shadow-clip.yaml new file mode 100644 index 0000000000..98361c90c7 --- /dev/null +++ b/wrench/reftests/filters/filter-drop-shadow-clip.yaml @@ -0,0 +1,22 @@ +--- +root: + items: + - type: clip + id: 2 + bounds: [100, 100, 2000, 2000] + clip-rect: [100, 100, 2000, 2000] + items: + - type: stacking-context + bounds: [10, 10, 0, 0] + filters: drop-shadow([10, 10], 20, red) + clip-node: 2 + items: + - type: clip + bounds: [0, 0, 256, 256] + complex: + - rect: [0, 0, 256, 256] + radius: 16 + items: + - type: rect + bounds: 0 0 256 256 + color: green diff --git a/wrench/reftests/filters/reftest.list b/wrench/reftests/filters/reftest.list index 61e5515351..fdbb3fbf6c 100644 --- a/wrench/reftests/filters/reftest.list +++ b/wrench/reftests/filters/reftest.list @@ -33,6 +33,7 @@ fuzzy(1,14) == filter-long-chain.yaml filter-long-chain.png platform(linux,mac) == filter-drop-shadow.yaml filter-drop-shadow.png platform(linux,mac) == filter-drop-shadow-on-viewport-edge.yaml filter-drop-shadow-on-viewport-edge.png platform(linux,mac) == blend-clipped.yaml blend-clipped.png +platform(linux,mac) == filter-drop-shadow-clip.yaml filter-drop-shadow-clip.png == filter-segments.yaml filter-segments-ref.yaml == iframe-dropshadow.yaml iframe-dropshadow-ref.yaml == filter-mix-blend-mode.yaml filter-mix-blend-mode-ref.yaml