diff --git a/crates/c-api/lib.rs b/crates/c-api/lib.rs index bb03cd03a..8aa2b68eb 100644 --- a/crates/c-api/lib.rs +++ b/crates/c-api/lib.rs @@ -887,6 +887,7 @@ pub extern "C" fn resvg_render( let mut pixmap = tiny_skia::PixmapMut::from_bytes(pixmap, width, height).unwrap(); resvg::render(&tree.0, transform.to_tiny_skia(), &mut pixmap) + .expect("Failed to render to pixmap"); } /// @brief Renders a Node by ID onto the image. diff --git a/crates/resvg/examples/minimal.rs b/crates/resvg/examples/minimal.rs index 2b122270e..c44cf4391 100644 --- a/crates/resvg/examples/minimal.rs +++ b/crates/resvg/examples/minimal.rs @@ -24,6 +24,7 @@ fn main() { let pixmap_size = tree.size().to_int_size(); let mut pixmap = tiny_skia::Pixmap::new(pixmap_size.width(), pixmap_size.height()).unwrap(); - resvg::render(&tree, tiny_skia::Transform::default(), &mut pixmap.as_mut()); + resvg::render(&tree, tiny_skia::Transform::default(), &mut pixmap.as_mut()) + .expect("Failed to render"); pixmap.save_png(&args[2]).unwrap(); } diff --git a/crates/resvg/src/image.rs b/crates/resvg/src/image.rs index 698cbf5e2..42011b51f 100644 --- a/crates/resvg/src/image.rs +++ b/crates/resvg/src/image.rs @@ -40,7 +40,7 @@ fn render_vector( pixmap: &mut tiny_skia::PixmapMut, ) -> Option<()> { let mut sub_pixmap = tiny_skia::Pixmap::new(pixmap.width(), pixmap.height()).unwrap(); - crate::render(tree, transform, &mut sub_pixmap.as_mut()); + crate::render(tree, transform, &mut sub_pixmap.as_mut())?; pixmap.draw_pixmap( 0, 0, diff --git a/crates/resvg/src/lib.rs b/crates/resvg/src/lib.rs index 45a4d9d6c..b7141c2bd 100644 --- a/crates/resvg/src/lib.rs +++ b/crates/resvg/src/lib.rs @@ -31,22 +31,23 @@ mod render; /// Can be used to position SVG inside the `pixmap`. /// /// The produced content is in the sRGB color space. +#[must_use] pub fn render( tree: &usvg::Tree, transform: tiny_skia::Transform, pixmap: &mut tiny_skia::PixmapMut, -) { +) -> Option<()> { let target_size = tiny_skia::IntSize::from_wh(pixmap.width(), pixmap.height()).unwrap(); let max_bbox = tiny_skia::IntRect::from_xywh( - -(target_size.width() as i32) * 2, - -(target_size.height() as i32) * 2, - target_size.width() * 5, - target_size.height() * 5, - ) - .unwrap(); + (-(target_size.width() as i32)).checked_add(2)?, + (-(target_size.height() as i32)).checked_add(2)?, + target_size.width().checked_mul(5)?, + target_size.height().checked_mul(5)?, + )?; let ctx = render::Context { max_bbox }; render::render_nodes(tree.root(), &ctx, transform, pixmap); + Some(()) } /// Renders a node onto the pixmap. diff --git a/crates/resvg/src/main.rs b/crates/resvg/src/main.rs index 896d60cc0..b31ba4eb4 100644 --- a/crates/resvg/src/main.rs +++ b/crates/resvg/src/main.rs @@ -739,7 +739,7 @@ fn render_svg(args: &Args, tree: &usvg::Tree) -> Result usize { size.width() as f32 / tree.size().width() as f32, size.height() as f32 / tree.size().height() as f32, ); - resvg::render(&tree, render_ts, &mut pixmap.as_mut()); + resvg::render(&tree, render_ts, &mut pixmap.as_mut()).expect("Failed to render"); } TestMode::Node(id) => { let node = tree.node_by_id(id).unwrap(); @@ -97,7 +97,7 @@ pub fn render_inner(name: &str, test_mode: TestMode) -> usize { size = tree.size().to_int_size().scale_by(scale).unwrap(); pixmap = tiny_skia::Pixmap::new(size.width(), size.height()).unwrap(); let render_ts = tiny_skia::Transform::from_scale(scale, scale); - resvg::render(&tree, render_ts, &mut pixmap.as_mut()); + resvg::render(&tree, render_ts, &mut pixmap.as_mut()).expect("Failed to render"); } }