@@ -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,21 @@ 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 =
688
+ tiny_skia:: Pixmap :: new ( size. width ( ) . ceil ( ) as u32 , size. height ( ) . ceil ( ) as u32 )
689
+ . unwrap ( ) ;
689
690
690
691
if !args. export_area_page {
691
692
if let Some ( background) = args. background {
692
693
pixmap. fill ( svg_to_skia_color ( background) ) ;
693
694
}
694
695
}
695
696
696
- let ts = args. fit_to . fit_to_transform ( tree. size ( ) . to_int_size ( ) ) ;
697
+ let ts = args. fit_to . fit_to_transform ( tree. size ( ) ) ;
697
698
698
699
resvg:: render_node ( node, ts, & mut pixmap. as_mut ( ) ) ;
699
700
@@ -702,11 +703,13 @@ fn render_svg(args: &Args, tree: &usvg::Tree) -> Result<tiny_skia::Pixmap, Strin
702
703
703
704
let size = args
704
705
. fit_to
705
- . fit_to_size ( tree. size ( ) . to_int_size ( ) )
706
+ . fit_to_size ( tree. size ( ) )
706
707
. ok_or_else ( || "target size is zero" . to_string ( ) ) ?;
707
708
708
709
// Unwrap is safe, because `size` is already valid.
709
- let mut page_pixmap = tiny_skia:: Pixmap :: new ( size. width ( ) , size. height ( ) ) . unwrap ( ) ;
710
+ let mut page_pixmap =
711
+ tiny_skia:: Pixmap :: new ( size. width ( ) . ceil ( ) as u32 , size. height ( ) . ceil ( ) as u32 )
712
+ . unwrap ( ) ;
710
713
711
714
if let Some ( background) = args. background {
712
715
page_pixmap. fill ( svg_to_skia_color ( background) ) ;
@@ -727,17 +730,19 @@ fn render_svg(args: &Args, tree: &usvg::Tree) -> Result<tiny_skia::Pixmap, Strin
727
730
} else {
728
731
let size = args
729
732
. fit_to
730
- . fit_to_size ( tree. size ( ) . to_int_size ( ) )
733
+ . fit_to_size ( tree. size ( ) )
731
734
. ok_or_else ( || "target size is zero" . to_string ( ) ) ?;
732
735
733
736
// Unwrap is safe, because `size` is already valid.
734
- let mut pixmap = tiny_skia:: Pixmap :: new ( size. width ( ) , size. height ( ) ) . unwrap ( ) ;
737
+ let mut pixmap =
738
+ tiny_skia:: Pixmap :: new ( size. width ( ) . ceil ( ) as u32 , size. height ( ) . ceil ( ) as u32 )
739
+ . unwrap ( ) ;
735
740
736
741
if let Some ( background) = args. background {
737
742
pixmap. fill ( svg_to_skia_color ( background) ) ;
738
743
}
739
744
740
- let ts = args. fit_to . fit_to_transform ( tree. size ( ) . to_int_size ( ) ) ;
745
+ let ts = args. fit_to . fit_to_transform ( tree. size ( ) ) ;
741
746
742
747
resvg:: render ( tree, ts, & mut pixmap. as_mut ( ) ) ;
743
748
0 commit comments