From 4a8e02987f19c0a9494bd685bedac0d24c6524cf Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 13 Jan 2026 16:59:33 +0100 Subject: [PATCH] :bug: Fix mask erros on save/restore optimizations --- render-wasm/src/render.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/render-wasm/src/render.rs b/render-wasm/src/render.rs index 9e0fddeec3..e0d138d2f7 100644 --- a/render-wasm/src/render.rs +++ b/render-wasm/src/render.rs @@ -1174,7 +1174,10 @@ impl RenderState { // Only create save_layer if actually needed // For simple shapes with default opacity and blend mode, skip expensive save_layer - let needs_layer = element.needs_layer() || mask; + // Groups with masks need a layer to properly handle the mask rendering + let needs_layer = element.needs_layer() + || (matches!(element.shape_type, Type::Group(g) if g.masked)) + || mask; if needs_layer { let mut paint = skia::Paint::default(); @@ -1279,9 +1282,9 @@ impl RenderState { } // Only restore if we created a layer (optimization for simple shapes) - let needs_layer = element.needs_layer() - || (matches!(element.shape_type, Type::Group(_)) - && matches!(element.shape_type, Type::Group(g) if g.masked)); + // Groups with masks need restore to properly handle the mask rendering + let needs_layer = + element.needs_layer() || (matches!(element.shape_type, Type::Group(g) if g.masked)); if needs_layer { self.surfaces.canvas(SurfaceId::Current).restore();