@@ -9,7 +9,7 @@ use crate::{
9
9
} ;
10
10
use gtk4:: {
11
11
gdk, gio, glib, glib:: clone, prelude:: * , ArrowType , CornerType , PackType , PositionType ,
12
- PrintOperation , PrintOperationAction , Snapshot , Unit ,
12
+ PrintOperation , PrintOperationAction , Unit ,
13
13
} ;
14
14
15
15
/* Actions follow this principle:
@@ -558,77 +558,54 @@ pub fn setup_actions(appwindow: &RnoteAppWindow) {
558
558
. allow_async( true )
559
559
. build( ) ;
560
560
561
- /* print_op.connect_begin_print(clone!(@weak appwindow => move |print_op, print_cx| {
562
- print_op.set_n_pages(appwindow.canvas().sheet().calc_n_pages());
563
- })); */
564
-
565
- print_op. connect_draw_page( clone!( @weak appwindow => move |_print_op, print_cx, page_nr| {
566
- let cx = match print_cx. cairo_context( ) {
567
- None => {
568
- log:: error!( "failed to get cairo context in print_op.connect_draw_page()." ) ;
569
- return ;
570
- }
571
- Some ( cx) => { cx }
572
- } ;
573
-
574
- let ( margin_top, margin_bottom, margin_left, margin_right) = print_cx. hard_margins( ) . unwrap_or( ( 0.0 , 0.0 , 0.0 , 0.0 ) ) ;
575
-
576
- let width_scale = ( print_cx. width( ) + margin_left + margin_right) / f64 :: from( appwindow. canvas( ) . sheet( ) . format( ) . width( ) ) ;
577
- let height_scale = ( print_cx. height( ) + margin_top + margin_bottom) / f64 :: from( appwindow. canvas( ) . sheet( ) . format( ) . height( ) ) ;
578
- let print_zoom = width_scale. min( height_scale) ;
579
- let y_offset = - ( f64 :: from( page_nr * appwindow. canvas( ) . sheet( ) . format( ) . height( ) ) * print_zoom) ;
580
-
581
- let snapshot = Snapshot :: new( ) ;
582
-
583
- let format_bounds_scaled = p2d:: bounding_volume:: AABB :: new(
584
- na:: point![ 0.0 , 0.0 ] ,
585
- na:: point![ f64 :: from( appwindow. canvas( ) . sheet( ) . format( ) . width( ) ) * print_zoom, f64 :: from( appwindow. canvas( ) . sheet( ) . format( ) . height( ) ) * print_zoom]
586
- ) ;
587
- let sheet_bounds= p2d:: bounding_volume:: AABB :: new(
588
- na:: point![ 0.0 , 0.0 ] ,
589
- na:: point![
590
- f64 :: from( appwindow. canvas( ) . sheet( ) . width( ) ) ,
591
- f64 :: from( appwindow. canvas( ) . sheet( ) . height( ) )
592
- ]
593
- ) ;
594
-
561
+ let sheet_bounds= appwindow. canvas( ) . sheet( ) . bounds( ) ;
595
562
match appwindow. canvas( ) . sheet( ) . gen_svg( ) {
596
563
Ok ( svg_data) => {
597
564
let svg = render:: Svg {
598
565
bounds: sheet_bounds,
599
566
svg_data,
600
567
} ;
568
+ print_op. connect_draw_page( clone!( @weak appwindow => move |_print_op, print_cx, page_nr| {
569
+ let cx = match print_cx. cairo_context( ) {
570
+ None => {
571
+ log:: error!( "failed to get cairo context in print_op.connect_draw_page()." ) ;
572
+ return ;
573
+ }
574
+ Some ( cx) => { cx }
575
+ } ;
576
+
577
+ let ( margin_top, margin_bottom, margin_left, margin_right) = print_cx. hard_margins( ) . unwrap_or( ( 0.0 , 0.0 , 0.0 , 0.0 ) ) ;
578
+
579
+ let width_scale = ( print_cx. width( ) + margin_left + margin_right) / f64 :: from( appwindow. canvas( ) . sheet( ) . format( ) . width( ) ) ;
580
+ let height_scale = ( print_cx. height( ) + margin_top + margin_bottom) / f64 :: from( appwindow. canvas( ) . sheet( ) . format( ) . height( ) ) ;
581
+ let print_zoom = width_scale. min( height_scale) ;
582
+ let y_offset = - ( f64 :: from( page_nr * appwindow. canvas( ) . sheet( ) . format( ) . height( ) ) * print_zoom) ;
583
+
584
+ let format_bounds_scaled = p2d:: bounding_volume:: AABB :: new(
585
+ na:: point![ 0.0 , 0.0 ] ,
586
+ na:: point![ f64 :: from( appwindow. canvas( ) . sheet( ) . format( ) . width( ) ) * print_zoom, f64 :: from( appwindow. canvas( ) . sheet( ) . format( ) . height( ) ) * print_zoom]
587
+ ) ;
588
+
589
+ cx. rectangle(
590
+ format_bounds_scaled. mins[ 0 ] ,
591
+ format_bounds_scaled. mins[ 1 ] ,
592
+ format_bounds_scaled. extents( ) [ 0 ] ,
593
+ format_bounds_scaled. extents( ) [ 1 ]
594
+ ) ;
595
+ cx. clip( ) ;
596
+ cx. translate( 0.0 , y_offset) ;
597
+
598
+ if let Err ( e) = render:: draw_svgs_to_cairo_context( print_zoom, & vec![ svg. clone( ) ] , & cx) {
599
+ log:: error!( "render::draw_svgs_to_cairo_context() failed in draw_page() callback while printing page: {}, {}" , page_nr, e) ;
601
600
602
- match appwindow. canvas( ) . sheet( ) . strokes_state( ) . borrow( ) . renderer. read( ) . unwrap( ) . gen_image( print_zoom, & vec![ svg] , sheet_bounds) {
603
- Ok ( image) => {
604
- snapshot. append_node( & render:: image_to_rendernode( & image, print_zoom) ) ;
605
601
}
606
- Err ( e) => {
607
- log:: error!( "renderer.gen_rendernode() failed in draw_page() callback while printing page: {}, {}" , page_nr, e) ;
608
- }
609
- }
610
- } ,
602
+ } ) ) ;
603
+ } ,
611
604
Err ( e) => {
612
- log:: error!( "gen_svg() failed in draw_page() callback while printing page: {}, {}" , page_nr , e) ;
605
+ log:: error!( "gen_svg() failed in print-sheet action with Err {}" , e) ;
613
606
}
614
607
}
615
608
616
- cx. rectangle(
617
- format_bounds_scaled. mins[ 0 ] ,
618
- format_bounds_scaled. mins[ 1 ] ,
619
- format_bounds_scaled. extents( ) [ 0 ] ,
620
- format_bounds_scaled. extents( ) [ 1 ]
621
- ) ;
622
- cx. clip( ) ;
623
- cx. translate( 0.0 , y_offset) ;
624
-
625
- if let Some ( node) = snapshot. to_node( ) {
626
- node. draw( & cx) ;
627
- } else {
628
- log:: error!( "snapshot.to_node() for created snapshot while printing page: {}" , page_nr) ;
629
- } ;
630
- } ) ) ;
631
-
632
609
if let Err ( e) = print_op. run( PrintOperationAction :: PrintDialog , Some ( & appwindow) ) {
633
610
log:: error!( "print_op.run() failed with Err, {}" , e) ;
634
611
} ;
0 commit comments