1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
void impression(void){
GtkPrintOperation *print;
GtkPrintOperationResult res;
print = gtk_print_operation_new ();
GtkPrintSettings *settings = gtk_print_settings_new();
GtkPageSetup *setup = gtk_page_setup_new();
gtk_print_settings_set_resolution(settings, 100);//100 dpi
gtk_page_setup_set_orientation(setup, GTK_PAGE_ORIENTATION_LANDSCAPE);
gtk_page_setup_set_top_margin(setup, 15,GTK_UNIT_MM);
gtk_page_setup_set_left_margin(setup, 15,GTK_UNIT_MM);
gtk_print_operation_set_default_page_setup(print, setup);
gtk_print_operation_set_print_settings(print,settings);
if (settings != NULL)
gtk_print_operation_set_print_settings (print, settings);
g_signal_connect (print, "begin_print", G_CALLBACK (begin_print), NULL);
g_signal_connect (print, "draw_page", G_CALLBACK (draw_page), NULL);
res = gtk_print_operation_run (print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW (getWidget("fenetre")), NULL);
if (res == GTK_PRINT_OPERATION_RESULT_APPLY)
{
if (settings != NULL) g_object_unref (settings);
settings = g_object_ref (gtk_print_operation_get_print_settings (print));
}
g_object_unref (print);
}
void begin_print(GtkPrintOperation *operation, GtkPrintContext *context, gpointer user_data)
{
gtk_print_operation_set_n_pages (operation,1);
}
void draw_page(GtkPrintOperation *operation, GtkPrintContext *context, gint page_nr, gpointer user_data)
{
printf("impression en cours\n");
GdkPixmap* pix = gtk_widget_get_snapshot(getWidget("sortie"), NULL); //getWidget("sortie") = ma drawing area
cairo_t* crp = gtk_print_context_get_cairo_context (context);
gdk_cairo_set_source_pixmap(crp,pix,0,0);
g_object_unref( pix );
//destroy crp quelque part ???
} |
Partager