Bonjour, je souhaiterais imprimer le contenu d'une drawing area j'ai fait :

déclenche avec void impression
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ???
}
ça ne marche pas évidemment...

Quelqu'un a t'il déjà résolu ce problème ??