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);
} |
Partager