From e889413f263319b8f91e64b63bff92a4981c8abc Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Fri, 28 Nov 2025 09:48:44 +0100 Subject: [PATCH] :bug: Fix nested shadows clipping --- ...s-a-file-with-nested-clipping-frames-1.png | Bin 24421 -> 23765 bytes render-wasm/src/render.rs | 15 ++++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Renders-a-file-with-nested-clipping-frames-1.png b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Renders-a-file-with-nested-clipping-frames-1.png index 5d41d8eb513dd0d224e3177cdf3ff3dd3e6ff028..c0821c53f89ed5d53af8821c07e90d2c5088ed1d 100644 GIT binary patch literal 23765 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 diff --git a/render-wasm/src/render.rs b/render-wasm/src/render.rs index b1d3607fe7..4e8ade29d1 100644 --- a/render-wasm/src/render.rs +++ b/render-wasm/src/render.rs @@ -141,7 +141,20 @@ impl NodeRenderState { match &element.shape_type { Type::Frame(_) => { - let bounds = element.get_selrect_shadow_bounds(shadow); + let mut bounds = element.get_selrect_shadow_bounds(shadow); + let blur_inset = (shadow.blur * 2.).max(0.0); + if blur_inset > 0.0 { + let max_inset_x = (bounds.width() * 0.5).max(0.0); + let max_inset_y = (bounds.height() * 0.5).max(0.0); + // Clamp the inset so we never shrink more than half of the width/height; + // otherwise the rect could end up inverted on small frames. + let inset_x = blur_inset.min(max_inset_x); + let inset_y = blur_inset.min(max_inset_y); + if inset_x > 0.0 || inset_y > 0.0 { + bounds.inset((inset_x, inset_y)); + } + } + let mut transform = element.transform; transform.post_translate(element.center()); transform.pre_translate(-element.center());