Bonjour,

Presentation de mon probleme:
Je selectionne dans un menu les courbes à tracer, puis je les traces dans une nouvelle fenetre.
Pas de probleme jusque la.
Cependant si je retourne dans mon menu et que je selectionne de nouvelle courbes, les nouvelles sont bien tracée mais les anciennes que j'ai déselectionné reste affichée...

Comment faire pour retracer ma draw area completement depuis le debut?


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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
 
 
void callback_tracer(GtkWidget *pBtn, gpointer pdata)
{
    MYGTK *mygtk= (MYGTK*) pdata;
    GtkWidget *p_main_window = NULL;
    GtkWidget *p_drawing_area = NULL;
    COORDONNEES coord;
 
    /* Code "inutile" */
 
    /* Trace */
 
    p_main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(p_main_window), LONGUEUR_ECRAN, LARGEUR_ECRAN);
 
    p_drawing_area = gtk_drawing_area_new ();
    g_signal_connect (G_OBJECT (p_drawing_area), "expose_event",G_CALLBACK (callback_expose_event),(gpointer) &coord);
    gtk_container_add (GTK_CONTAINER (p_main_window), p_drawing_area);
    gtk_widget_show_all (p_main_window);
}
 
 
 
void callback_expose_event(GtkWidget *widget,GdkEventExpose *event,gpointer pdata)
{
    cairo_t *cr;
    COORDONNEES *coord=(COORDONNEES *) pdata;
    COLOR colors[NB_RES_MAX];
    int cptmes,cptres,cpt,i;
    int echelle[6];
    char s_echelle[20];
 
    creercouleur(colors);
 
    cr = gdk_cairo_create (widget->window);
//    cairo_rectangle (cr,event->area.x, event->area.y,event->area.width, event->area.height);
//    cairo_clip (cr);
 
    /* Trace les courbes selectionnees */
 
    cairo_set_line_width(cr, 1);
 
    for (cptres=0;cptres<NB_RES_MAX;cptres++)
    {
        if (coord->courbes[cptres]==1)
        {
            cairo_set_source_rgb(cr, colors[cptres].red, colors[cptres].green, colors[cptres].blue);
            //cairo_move_to(cr,coord->x[cptres][0],coord->x[cptres][0]);
            for (cptmes=0;cptmes<coord->nbpoints[cptres]-1;cptmes++)
            {
                cairo_line_to(cr, coord->x[cptres][cptmes], coord->y[cptres][cptmes]);
            }
            cairo_close_path(cr);
            cairo_stroke(cr);
        }
    }
 
    /* Trace les angles et les cercles */
 
    cairo_set_source_rgb(cr, 0.5, 0.5, 0.5); //Gris
    cairo_arc(cr,LONGUEUR_ECRAN/2,LARGEUR_ECRAN/2,LARGEUR_ECRAN/12,0,2*M_PI);
    cairo_stroke(cr);
    cairo_arc(cr,LONGUEUR_ECRAN/2,LARGEUR_ECRAN/2,LARGEUR_ECRAN/6,0,2*M_PI);
    cairo_stroke(cr);
    cairo_arc(cr,LONGUEUR_ECRAN/2,LARGEUR_ECRAN/2,LARGEUR_ECRAN/4,0,2*M_PI);
    cairo_stroke(cr);
    cairo_arc(cr,LONGUEUR_ECRAN/2,LARGEUR_ECRAN/2,LARGEUR_ECRAN/3,0,2*M_PI);
    cairo_stroke(cr);
    cairo_arc(cr,LONGUEUR_ECRAN/2,LARGEUR_ECRAN/2,5*LARGEUR_ECRAN/12,0,2*M_PI);
    cairo_stroke(cr);
    cairo_arc(cr,LONGUEUR_ECRAN/2,LARGEUR_ECRAN/2,LARGEUR_ECRAN/2,0,2*M_PI);
    cairo_stroke(cr);
 
 
    for (cpt=0;cpt<36;cpt++)
    {
        cairo_move_to(cr,LONGUEUR_ECRAN/2,LARGEUR_ECRAN/2);
        cairo_line_to(cr,LONGUEUR_ECRAN/2+LARGEUR_ECRAN/2*cos(M_PI*cpt/18),LARGEUR_ECRAN/2+LARGEUR_ECRAN/2*sin(M_PI*cpt/18));
        cairo_close_path(cr);
        cairo_stroke(cr);
    }
 
    /* Trace l'echelle */
 
    cairo_select_font_face(cr, "Purisa",CAIRO_FONT_SLANT_NORMAL,CAIRO_FONT_WEIGHT_BOLD);
 
    cairo_set_font_size(cr, 13);
    echelle[0]=coord->arronditmax;
    cairo_move_to(cr, LONGUEUR_ECRAN/2+5, 20);
    i=sprintf(s_echelle,"%d",echelle[0]);
    cairo_show_text(cr, s_echelle);
 
    for (cpt=1;cpt<6;cpt++)
    {
        echelle[cpt]=echelle[cpt-1]-5;
        cairo_move_to(cr, LONGUEUR_ECRAN/2+5, cpt*LARGEUR_ECRAN/12+20);
        i=sprintf(s_echelle,"%d",echelle[cpt]);
        cairo_show_text(cr, s_echelle);
    }
 
    cairo_destroy(cr);
}
Merci de votre aide.

Cordialement