diff --git a/render-wasm/src/render.rs b/render-wasm/src/render.rs index a8ebedc90e..0769c2926c 100644 --- a/render-wasm/src/render.rs +++ b/render-wasm/src/render.rs @@ -443,7 +443,7 @@ impl RenderState { s.canvas().concat(&matrix); }); - if shape.fills.is_empty() && matches!(shape.shape_type, Type::Group(_)) { + if shape.fills.is_empty() && !matches!(shape.shape_type, Type::Group(_)) { if let Some(fills_to_render) = self.nested_fills.last() { let fills_to_render = fills_to_render.clone(); for fill in fills_to_render.iter() { @@ -664,7 +664,7 @@ impl RenderState { } } } - if let Type::Group(group) = element.shape_type { + if let Type::Group(_) = element.shape_type { self.nested_fills.pop(); } self.surfaces.canvas(SurfaceId::Current).restore(); diff --git a/render-wasm/src/render/strokes.rs b/render-wasm/src/render/strokes.rs index febbf594b9..d59c61792c 100644 --- a/render-wasm/src/render/strokes.rs +++ b/render-wasm/src/render/strokes.rs @@ -187,9 +187,11 @@ fn handle_stroke_caps( scale: f32, antialias: bool, ) { - let points_count = path.count_points(); - let mut points = vec![Point::default(); points_count]; - let c_points = path.get_points(&mut points); + let mut points = vec![Point::default(); path.count_points()]; + path.get_points(&mut points); + // Curves can have duplicated points, so let's remove consecutive duplicated points + points.dedup(); + let c_points = points.len(); // Closed shapes don't have caps if c_points >= 2 && is_open { @@ -213,7 +215,7 @@ fn handle_stroke_caps( stroke.width, &mut paint_stroke, last_point, - &points[points_count - 2], + &points[c_points - 2], ); } }