|
| 1 | +use tiny_skia_path::Rect; |
| 2 | +use usvg::ImageKind; |
| 3 | +use crate::FillRule; |
| 4 | +use crate::image::Image; |
1 | 5 | use crate::surface::Surface;
|
2 |
| -use crate::svg::ProcessContext; |
| 6 | +use crate::svg::{group, ProcessContext}; |
| 7 | +use crate::util::RectExt; |
3 | 8 |
|
4 | 9 | /// Render an image into a surface.
|
5 | 10 | pub fn render(image: &usvg::Image, surface: &mut Surface, process_context: &mut ProcessContext) {
|
6 | 11 | if !image.is_visible() {
|
7 | 12 | return;
|
8 | 13 | }
|
9 | 14 |
|
10 |
| - unimplemented!(); |
11 |
| - // match image.kind() { |
12 |
| - // ImageKind::JPEG(d) => { |
13 |
| - // let dynamic_image = |
14 |
| - // image::load_from_memory_with_format(d.as_slice(), ImageFormat::Jpeg).unwrap(); |
15 |
| - // let d_image = Image::new(&dynamic_image); |
16 |
| - // surface.draw_image(d_image, image.size()); |
17 |
| - // } |
18 |
| - // ImageKind::PNG(d) => { |
19 |
| - // let dynamic_image = |
20 |
| - // image::load_from_memory_with_format(d.as_slice(), ImageFormat::Png).unwrap(); |
21 |
| - // let d_image = Image::new(&dynamic_image); |
22 |
| - // surface.draw_image(d_image, image.size()); |
23 |
| - // } |
24 |
| - // ImageKind::GIF(d) => { |
25 |
| - // let dynamic_image = |
26 |
| - // image::load_from_memory_with_format(d.as_slice(), ImageFormat::Gif).unwrap(); |
27 |
| - // let d_image = Image::new(&dynamic_image); |
28 |
| - // surface.draw_image(d_image, image.size()); |
29 |
| - // } |
30 |
| - // ImageKind::SVG(t) => { |
31 |
| - // surface.push_clip_path( |
32 |
| - // &Rect::from_xywh(0.0, 0.0, t.size().width(), t.size().height()) |
33 |
| - // .unwrap() |
34 |
| - // .to_clip_path(), |
35 |
| - // &FillRule::NonZero, |
36 |
| - // ); |
37 |
| - // group::render(t.root(), surface, process_context); |
38 |
| - // surface.pop(); |
39 |
| - // } |
40 |
| - // _ => unimplemented!(), |
41 |
| - // } |
| 15 | + match image.kind() { |
| 16 | + ImageKind::JPEG(d) => { |
| 17 | + // TODO: Remove unwraps |
| 18 | + let d_image = Image::from_jpeg(&d).unwrap(); |
| 19 | + surface.draw_image(d_image, image.size()); |
| 20 | + } |
| 21 | + ImageKind::PNG(d) => { |
| 22 | + let d_image = Image::from_png(&d).unwrap(); |
| 23 | + surface.draw_image(d_image, image.size()); |
| 24 | + } |
| 25 | + ImageKind::GIF(d) => { |
| 26 | + let d_image = Image::from_gif(&d).unwrap(); |
| 27 | + surface.draw_image(d_image, image.size()); |
| 28 | + } |
| 29 | + ImageKind::SVG(t) => { |
| 30 | + surface.push_clip_path( |
| 31 | + &Rect::from_xywh(0.0, 0.0, t.size().width(), t.size().height()) |
| 32 | + .unwrap() |
| 33 | + .to_clip_path(), |
| 34 | + &FillRule::NonZero, |
| 35 | + ); |
| 36 | + group::render(t.root(), surface, process_context); |
| 37 | + surface.pop(); |
| 38 | + } |
| 39 | + _ => unimplemented!(), |
| 40 | + } |
42 | 41 | }
|
0 commit comments