Skip to content

Commit

Permalink
Scale SVGs to fit space computed by layout when rendering
Browse files Browse the repository at this point in the history
  • Loading branch information
nicoburns committed Aug 14, 2024
1 parent 6aeb464 commit eaed187
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions packages/blitz/src/renderer/render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -600,12 +600,22 @@ impl ElementCx<'_> {
}

fn draw_svg(&self, scene: &mut Scene) {
let Some(svg) = self.svg else {
return;
};

let width = self.frame.inner_rect.width() as u32;
let height = self.frame.inner_rect.height() as u32;
let svg_size = svg.size();

let x_scale = width as f64 / svg_size.width() as f64;
let y_scale = height as f64 / svg_size.height() as f64;

let transform = Affine::translate((self.pos.x * self.scale, self.pos.y * self.scale))
.pre_scale(self.scale);
if let Some(svg) = self.svg {
let fragment = vello_svg::render_tree(svg);
scene.append(&fragment, Some(transform));
}
.pre_scale_non_uniform(x_scale, y_scale);

let fragment = vello_svg::render_tree(svg);
scene.append(&fragment, Some(transform));
}

fn draw_image(&self, scene: &mut Scene) {
Expand Down

0 comments on commit eaed187

Please sign in to comment.