]> www.fi.muni.cz Git - evince.git/commitdiff
[printing] Scale according to paper size before rendering for printing
authorCarlos Garcia Campos <carlosgc@gnome.org>
Fri, 5 Jun 2009 16:56:29 +0000 (18:56 +0200)
committerCarlos Garcia Campos <carlosgc@gnome.org>
Fri, 5 Jun 2009 16:56:29 +0000 (18:56 +0200)
shell/ev-print-operation.c

index 9f34fd7ce713c96863f983456ba60eda8126e40a..e737d296be3d7f1dabf03421151491c86f7e42a4 100644 (file)
@@ -1546,6 +1546,8 @@ ev_print_operation_print_draw_page (EvPrintOperationPrint *print,
 {
        EvPrintOperation *op = EV_PRINT_OPERATION (print);
        cairo_t          *cr;
+       gdouble           cr_width, cr_height;
+       gint              width, height;
 
        gtk_print_operation_set_defer_drawing (print->op);
 
@@ -1562,8 +1564,14 @@ ev_print_operation_print_draw_page (EvPrintOperationPrint *print,
        ev_job_print_set_page (EV_JOB_PRINT (print->job_print), page);
 
        cr = gtk_print_context_get_cairo_context (context);
-       ev_job_print_set_cairo (EV_JOB_PRINT (print->job_print), cr);
+       cr_width = gtk_print_context_get_width (context);
+       cr_height = gtk_print_context_get_height (context);
+       ev_page_cache_get_size (ev_page_cache_get (op->document),
+                               page, 0, 1.0,
+                               &width, &height);
+       cairo_scale (cr, cr_width / (gdouble)width, cr_height / (gdouble)height);
 
+       ev_job_print_set_cairo (EV_JOB_PRINT (print->job_print), cr);
        ev_job_scheduler_push_job (print->job_print, EV_JOB_PRIORITY_NONE);
 }