From 54a02dedd55a21437b5882bb8e534612db5c68ac Mon Sep 17 00:00:00 2001 From: Mohan <167054270+mohan-bee@users.noreply.github.com> Date: Tue, 3 Mar 2026 12:15:19 +0530 Subject: [PATCH] Fix thumbnails not being updated for layers when they become empty (#3624) * fix: thumbnail render for empty layers * removed self import * fix: rename * Cleanup --------- Co-authored-by: Keavon Chambers --- editor/src/node_graph_executor/runtime.rs | 49 ++++++++++++----------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/editor/src/node_graph_executor/runtime.rs b/editor/src/node_graph_executor/runtime.rs index e4fb9a84..60b04c13 100644 --- a/editor/src/node_graph_executor/runtime.rs +++ b/editor/src/node_graph_executor/runtime.rs @@ -514,33 +514,36 @@ impl NodeRuntime { } let bounds = match graphic.bounding_box(DAffine2::IDENTITY, true) { - RenderBoundingBox::None => return, - RenderBoundingBox::Infinite => [DVec2::ZERO, DVec2::new(300., 200.)], - RenderBoundingBox::Rectangle(bounds) => bounds, + RenderBoundingBox::None => None, + RenderBoundingBox::Infinite => Some([DVec2::ZERO, DVec2::new(300., 200.)]), + RenderBoundingBox::Rectangle(bounds) => Some(bounds), }; - let footprint = Footprint { - transform: DAffine2::from_translation(DVec2::new(bounds[0].x, bounds[0].y)), - resolution: UVec2::new((bounds[1].x - bounds[0].x).abs() as u32, (bounds[1].y - bounds[0].y).abs() as u32), - quality: RenderQuality::Full, + let new_thumbnail_svg = if let Some(bounds) = bounds { + let footprint = Footprint { + transform: DAffine2::from_translation(DVec2::new(bounds[0].x, bounds[0].y)), + resolution: UVec2::new((bounds[1].x - bounds[0].x).abs() as u32, (bounds[1].y - bounds[0].y).abs() as u32), + quality: RenderQuality::Full, + }; + + // Render the thumbnail from a `Graphic` into an SVG string + let render_params = RenderParams { + footprint, + thumbnail: true, + ..Default::default() + }; + let mut render = SvgRender::new(); + graphic.render_svg(&mut render, &render_params); + + // And give the SVG a viewbox and outer ... wrapper tag + render.format_svg(bounds[0], bounds[1]); + + render.svg + } else { + Vec::new() }; - // Render the thumbnail from a `Graphic` into an SVG string - let render_params = RenderParams { - footprint, - thumbnail: true, - ..Default::default() - }; - let mut render = SvgRender::new(); - graphic.render_svg(&mut render, &render_params); - - // And give the SVG a viewbox and outer ... wrapper tag - render.format_svg(bounds[0], bounds[1]); - - // UPDATE FRONTEND THUMBNAIL - - let new_thumbnail_svg = render.svg; + // Update frontend thumbnail let old_thumbnail_svg = thumbnail_renders.entry(parent_network_node_id).or_default(); - if old_thumbnail_svg != &new_thumbnail_svg { responses.push_back(FrontendMessage::UpdateNodeThumbnail { id: parent_network_node_id,