@@ -389,30 +389,29 @@ enum FitTo {
389
389
/// Keep original size.
390
390
Original ,
391
391
/// Scale to width.
392
- Width ( u32 ) ,
392
+ Width ( f32 ) ,
393
393
/// Scale to height.
394
- Height ( u32 ) ,
394
+ Height ( f32 ) ,
395
395
/// Scale to size.
396
- Size ( u32 , u32 ) ,
396
+ Size ( f32 , f32 ) ,
397
397
/// Zoom by factor.
398
398
Zoom ( f32 ) ,
399
399
}
400
400
401
401
impl FitTo {
402
- fn fit_to_size ( & self , size : tiny_skia:: IntSize ) -> Option < tiny_skia:: IntSize > {
402
+ fn fit_to_size ( & self , size : tiny_skia:: Size ) -> Option < tiny_skia:: Size > {
403
403
match * self {
404
404
FitTo :: Original => Some ( size) ,
405
405
FitTo :: Width ( w) => size. scale_to_width ( w) ,
406
406
FitTo :: Height ( h) => size. scale_to_height ( h) ,
407
- FitTo :: Size ( w, h) => tiny_skia:: IntSize :: from_wh ( w, h) . map ( |s| size. scale_to ( s) ) ,
407
+ FitTo :: Size ( w, h) => tiny_skia:: Size :: from_wh ( w, h) . map ( |s| size. scale_to ( s) ) ,
408
408
FitTo :: Zoom ( z) => size. scale_by ( z) ,
409
409
}
410
410
}
411
411
412
- fn fit_to_transform ( & self , size : tiny_skia:: IntSize ) -> tiny_skia:: Transform {
413
- let size1 = size. to_size ( ) ;
414
- let size2 = match self . fit_to_size ( size) {
415
- Some ( v) => v. to_size ( ) ,
412
+ fn fit_to_transform ( & self , size1 : tiny_skia:: Size ) -> tiny_skia:: Transform {
413
+ let size2 = match self . fit_to_size ( size1) {
414
+ Some ( v) => v,
416
415
None => return tiny_skia:: Transform :: default ( ) ,
417
416
} ;
418
417
tiny_skia:: Transform :: from_scale (
@@ -526,13 +525,13 @@ fn parse_args() -> Result<Args, String> {
526
525
let mut default_size = usvg:: Size :: from_wh ( 100.0 , 100.0 ) . unwrap ( ) ;
527
526
if let ( Some ( w) , Some ( h) ) = ( args. width , args. height ) {
528
527
default_size = usvg:: Size :: from_wh ( w as f32 , h as f32 ) . unwrap ( ) ;
529
- fit_to = FitTo :: Size ( w, h) ;
528
+ fit_to = FitTo :: Size ( w as f32 , h as f32 ) ;
530
529
} else if let Some ( w) = args. width {
531
530
default_size = usvg:: Size :: from_wh ( w as f32 , 100.0 ) . unwrap ( ) ;
532
- fit_to = FitTo :: Width ( w) ;
531
+ fit_to = FitTo :: Width ( w as f32 ) ;
533
532
} else if let Some ( h) = args. height {
534
533
default_size = usvg:: Size :: from_wh ( 100.0 , h as f32 ) . unwrap ( ) ;
535
- fit_to = FitTo :: Height ( h) ;
534
+ fit_to = FitTo :: Height ( h as f32 ) ;
536
535
} else if let Some ( z) = args. zoom {
537
536
fit_to = FitTo :: Zoom ( z) ;
538
537
}
@@ -681,19 +680,19 @@ fn render_svg(args: &Args, tree: &usvg::Tree) -> Result<tiny_skia::Pixmap, Strin
681
680
682
681
let size = args
683
682
. fit_to
684
- . fit_to_size ( bbox. size ( ) . to_int_size ( ) )
683
+ . fit_to_size ( bbox. size ( ) )
685
684
. ok_or_else ( || "target size is zero" . to_string ( ) ) ?;
686
685
687
686
// Unwrap is safe, because `size` is already valid.
688
- let mut pixmap = tiny_skia:: Pixmap :: new ( size. width ( ) , size. height ( ) ) . unwrap ( ) ;
687
+ let mut pixmap = tiny_skia:: Pixmap :: new ( size. width ( ) . ceil ( ) as u32 , size. height ( ) . ceil ( ) as u32 ) . unwrap ( ) ;
689
688
690
689
if !args. export_area_page {
691
690
if let Some ( background) = args. background {
692
691
pixmap. fill ( svg_to_skia_color ( background) ) ;
693
692
}
694
693
}
695
694
696
- let ts = args. fit_to . fit_to_transform ( tree. size ( ) . to_int_size ( ) ) ;
695
+ let ts = args. fit_to . fit_to_transform ( tree. size ( ) ) ;
697
696
698
697
resvg:: render_node ( node, ts, & mut pixmap. as_mut ( ) ) ;
699
698
@@ -702,11 +701,11 @@ fn render_svg(args: &Args, tree: &usvg::Tree) -> Result<tiny_skia::Pixmap, Strin
702
701
703
702
let size = args
704
703
. fit_to
705
- . fit_to_size ( tree. size ( ) . to_int_size ( ) )
704
+ . fit_to_size ( tree. size ( ) )
706
705
. ok_or_else ( || "target size is zero" . to_string ( ) ) ?;
707
706
708
707
// Unwrap is safe, because `size` is already valid.
709
- let mut page_pixmap = tiny_skia:: Pixmap :: new ( size. width ( ) , size. height ( ) ) . unwrap ( ) ;
708
+ let mut page_pixmap = tiny_skia:: Pixmap :: new ( size. width ( ) . ceil ( ) as u32 , size. height ( ) . ceil ( ) as u32 ) . unwrap ( ) ;
710
709
711
710
if let Some ( background) = args. background {
712
711
page_pixmap. fill ( svg_to_skia_color ( background) ) ;
@@ -727,17 +726,17 @@ fn render_svg(args: &Args, tree: &usvg::Tree) -> Result<tiny_skia::Pixmap, Strin
727
726
} else {
728
727
let size = args
729
728
. fit_to
730
- . fit_to_size ( tree. size ( ) . to_int_size ( ) )
729
+ . fit_to_size ( tree. size ( ) )
731
730
. ok_or_else ( || "target size is zero" . to_string ( ) ) ?;
732
731
733
732
// Unwrap is safe, because `size` is already valid.
734
- let mut pixmap = tiny_skia:: Pixmap :: new ( size. width ( ) , size. height ( ) ) . unwrap ( ) ;
733
+ let mut pixmap = tiny_skia:: Pixmap :: new ( size. width ( ) . ceil ( ) as u32 , size. height ( ) . ceil ( ) as u32 ) . unwrap ( ) ;
735
734
736
735
if let Some ( background) = args. background {
737
736
pixmap. fill ( svg_to_skia_color ( background) ) ;
738
737
}
739
738
740
- let ts = args. fit_to . fit_to_transform ( tree. size ( ) . to_int_size ( ) ) ;
739
+ let ts = args. fit_to . fit_to_transform ( tree. size ( ) ) ;
741
740
742
741
resvg:: render ( tree, ts, & mut pixmap. as_mut ( ) ) ;
743
742
0 commit comments