This commit is contained in:
elvis
2025-11-14 03:19:32 +01:00
parent 87cdc97987
commit f2f4c96e06

View File

@ -16,6 +16,7 @@ pub(crate) struct Svg {
image: egui::ColorImage, image: egui::ColorImage,
/// original size of the svg /// original size of the svg
svg_size: egui::Vec2, svg_size: egui::Vec2,
svg_scale: f32,
original: String, original: String,
@ -59,7 +60,7 @@ impl Svg {
| Err(err) => return Err(format!("{}", err)), | Err(err) => return Err(format!("{}", err)),
}; };
let (svg_size, scaling) = { let (svg_size, scale) = {
let width = svg_tree.size().width() as u32; let width = svg_tree.size().width() as u32;
let height = svg_tree.size().height() as u32; let height = svg_tree.size().height() as u32;
let max = std::cmp::max(width, height); let max = std::cmp::max(width, height);
@ -72,12 +73,12 @@ impl Svg {
(min, 1.) (min, 1.)
} }
}; };
if width == max { let size = if width == max {
(egui::vec2(larger as f32, smaller as f32), scale) egui::vec2(larger as f32, smaller as f32)
} else { } else {
(egui::vec2(smaller as f32, larger as f32), scale) egui::vec2(smaller as f32, larger as f32)
} };
// (egui::vec2(svg_tree.size().width(), svg_tree.size().height()), 1.) (size, scale)
}; };
// create the pixel map to render the svg in // create the pixel map to render the svg in
@ -88,8 +89,7 @@ impl Svg {
// render the tree inside the pixel map // render the tree inside the pixel map
resvg::render(&svg_tree, resvg::render(&svg_tree,
// scaling is compleately ignored by the library tiny_skia::Transform::from_scale(scale, scale),
tiny_skia::Transform::from_scale(scaling, scaling),
pixmap_mut); pixmap_mut);
let pixmap = pixmap_mut.to_owned(); let pixmap = pixmap_mut.to_owned();
@ -104,6 +104,7 @@ impl Svg {
image, image,
original: content, original: content,
svg_size, svg_size,
svg_scale: scale,
svg_texture: Arc::new(Mutex::new(None)), svg_texture: Arc::new(Mutex::new(None)),
}; };
@ -145,7 +146,10 @@ impl Svg {
) )
.expect("Could not allocate svg"); .expect("Could not allocate svg");
let pixmap_mut = &mut pixmap.as_mut(); let pixmap_mut = &mut pixmap.as_mut();
resvg::render(&svg_tree, Default::default(), pixmap_mut); resvg::render(&svg_tree,
tiny_skia::Transform::from_scale(self.svg_scale,
self.svg_scale),
pixmap_mut);
let pixmap = pixmap_mut.to_owned(); let pixmap = pixmap_mut.to_owned();
match pixmap.encode_png() { match pixmap.encode_png() {