From 851fde01c10740d7d18d7981c3fbb5da396f664c Mon Sep 17 00:00:00 2001 From: Aitor Moreno Date: Wed, 1 Jul 2026 14:08:54 +0200 Subject: [PATCH] :bug: Fix SVG Raw not being saved (#10492) --- render-wasm/src/main.rs | 4 ++++ render-wasm/src/render.rs | 14 ++------------ render-wasm/src/shapes.rs | 17 +++++++++++++++++ 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/render-wasm/src/main.rs b/render-wasm/src/main.rs index 0aa3fae930..ffa8d34ca3 100644 --- a/render-wasm/src/main.rs +++ b/render-wasm/src/main.rs @@ -733,7 +733,11 @@ pub extern "C" fn set_shape_svg_raw_content() -> Result<()> { .map_err(|e| Error::RecoverableError(e.to_string()))? .trim_end_matches('\0') .to_string(); + + let render_state = get_render_state(); + let font_manager = skia::FontMgr::from(render_state.fonts().font_provider().clone()); shape.set_svg_raw_content(svg_raw_content); + shape.update_svg_raw_content(font_manager); }); Ok(()) diff --git a/render-wasm/src/render.rs b/render-wasm/src/render.rs index a4a2e38eb1..53d5b65312 100644 --- a/render-wasm/src/render.rs +++ b/render-wasm/src/render.rs @@ -1398,7 +1398,7 @@ impl RenderState { } match &shape.shape_type { - Type::SVGRaw(sr) => { + Type::SVGRaw(_) => { if let Some(svg_transform) = shape.svg_transform() { matrix.pre_concat(&svg_transform); } @@ -1410,17 +1410,7 @@ impl RenderState { if let Some(svg) = shape.svg.as_ref() { svg.render(self.surfaces.canvas_and_mark_dirty(fills_surface_id)); } else { - let font_manager = skia::FontMgr::from(self.fonts().font_provider().clone()); - let dom_result = skia::svg::Dom::from_str(&sr.content, font_manager); - match dom_result { - Ok(dom) => { - dom.render(self.surfaces.canvas_and_mark_dirty(fills_surface_id)); - shape.to_mut().set_svg(dom); - } - Err(e) => { - eprintln!("Error parsing SVG. Error: {}", e); - } - } + panic!("SVG should be available"); } } diff --git a/render-wasm/src/shapes.rs b/render-wasm/src/shapes.rs index 95c704ceff..92d49c7c30 100644 --- a/render-wasm/src/shapes.rs +++ b/render-wasm/src/shapes.rs @@ -722,6 +722,23 @@ impl Shape { self.invalidate_extrect(); } + pub fn update_svg_raw_content(&mut self, font_manager: skia::FontMgr) { + match &self.shape_type { + Type::SVGRaw(sr) => { + let dom_result = skia::svg::Dom::from_str(&sr.content, font_manager); + match dom_result { + Ok(dom) => { + self.set_svg(dom); + } + Err(e) => { + eprintln!("Error parsing SVG. Error: {}", e); + } + } + } + _ => panic!("Updating SVG raw content on non SVG Raw shape"), + } + } + pub fn set_svg_raw_content(&mut self, content: String) { self.shape_type = Type::SVGRaw(SVGRaw::from_content(content)); }