/* demo2g.c : demos de EZ-Draw reecrits en gtk+ 2.x * * Edouard.Thiel@lif.univ-mrs.fr - 13/05/2009 - version 0.9 * * Compilation sous Unix : * gcc -Wall demo2g.c ez-gtk.c -o demo2g `pkg-config gtk+-2.0 --cflags --libs` * * This program is free software under the terms of the * GNU Lesser General Public License (LGPL) version 2.1. */ #include "ez-gtk.h" /* * Appele'e par gtk_main lorsqu'il faut tout redessiner. */ gint area1_onExpose (GtkWidget *widget, GdkEventExpose *ev) { /* On recupere le contexte graphique associe' au widget */ GdkGC *gc = ezg_get_gc (widget); /* On cree un layout pour dessiner du texte */ PangoLayout *layout = gtk_widget_create_pango_layout (widget, NULL); /* On dessine le fond en blanc */ ezg_set_color (gc, EZG_WHITE); gdk_draw_rectangle (widget->window, gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height); ezg_set_color (gc, EZG_MAGENTA); ezg_draw_text (widget, gc, layout, EZG_BL, 10, 20, "draw epaisseur 1 :"); ezg_set_thick (gc, 1); gdk_draw_point (widget->window, gc, 30, 50); gdk_draw_line (widget->window, gc, 60, 35, 130, 70); gdk_draw_rectangle (widget->window, gc, FALSE, 160, 30, 220-160, 70-30); gdk_draw_arc (widget->window, gc, FALSE, 240, 30, 300-240, 70-30, 0, 360*64); ezg_draw_triangle (widget->window, gc, FALSE, 320, 30, 380, 40, 350, 70); ezg_set_color (gc, EZG_BLACK); ezg_draw_text (widget, gc, layout, EZG_BL, 10, 100, "draw epaisseur 2 :"); ezg_set_color (gc, EZG_CYAN); ezg_set_thick (gc, 2); gdk_draw_arc (widget->window, gc, TRUE, 30-1, 130-1, 2+1, 2+1, 0, 360*64); gdk_draw_line (widget->window, gc, 60, 115, 130, 150); gdk_draw_rectangle (widget->window, gc, FALSE, 160, 110, 220-160, 150-110); gdk_draw_arc (widget->window, gc, FALSE, 240, 110, 300-240, 150-110, 0, 360*64); ezg_draw_triangle (widget->window, gc, FALSE, 320, 110, 380, 120, 350, 150); ezg_set_color (gc, EZG_BLUE); ezg_draw_text (widget, gc, layout, EZG_BL, 10, 180, "draw epaisseur 9 :"); ezg_set_color (gc, EZG_GREEN); ezg_set_thick (gc, 9); gdk_draw_arc (widget->window, gc, TRUE, 30-4, 210-4, 9+1, 9+1, 0, 360*64); gdk_draw_line (widget->window, gc, 60, 195, 130, 230); gdk_draw_rectangle (widget->window, gc, FALSE, 160, 190, 220-160, 230-190); gdk_draw_arc (widget->window, gc, FALSE, 240, 190, 300-240, 230-190, 0, 360*64); ezg_draw_triangle (widget->window, gc, FALSE, 320, 190, 380, 200, 350, 230); ezg_set_color (gc, EZG_RED); ezg_draw_text (widget, gc, layout, EZG_BL, 10, 260, "fill :"); ezg_set_color (gc, EZG_YELLOW); gdk_draw_rectangle (widget->window, gc, TRUE, 160, 270, 220-160+1, 310-270+1); gdk_draw_arc (widget->window, gc, TRUE, 240, 270, 300-240+1, 310-270+1, 0, 360*64); ezg_draw_triangle (widget->window, gc, TRUE, 320, 270, 380, 280, 350, 310); /* Libere la memoire */ g_object_unref (G_OBJECT (layout)); return TRUE; /* L'evenement a ete traite' */ } /* * Appele'e par gtk_main lorsqu'une touche a ete presse'e. */ gint area1_onKeyPress (GtkWidget *widget, GdkEventKey *ev) { /* ev->keyval contient le symbole de la touche pressee */ switch (ev->keyval) { case GDK_q : gtk_main_quit (); break; /* touche 'q' */ } return TRUE; /* L'evenement a ete traite' */ } int main (int argc, char *argv[]) { GtkWidget *win1, *area1; /* Initialise gtk et analyse la ligne de commande */ gtk_init (&argc, &argv); /* Cree une fenetre, donne un titre et une taille */ win1 = ezg_window_create (400, 320, "Demo 2g : tous les dessins"); /* La destruction de la fenetre fera sortir de gtk_main */ g_signal_connect (G_OBJECT (win1), "destroy", gtk_main_quit, NULL); /* On cree une zone de dessin, qui prend toute la place dans la fenetre */ area1 = ezg_area_create (win1); /* On autorise certains evenements */ GTK_WIDGET_SET_FLAGS (area1, GTK_CAN_FOCUS); gtk_widget_set_events (area1, GDK_EXPOSURE_MASK | GDK_KEY_PRESS_MASK); /* On attache des callbacks pour gerer certains evenements */ g_signal_connect (G_OBJECT (area1), "expose_event" , G_CALLBACK (area1_onExpose) , NULL); g_signal_connect (G_OBJECT (area1), "key_press_event", G_CALLBACK (area1_onKeyPress), NULL); /* Rend visibles la fenetre et son contenu */ gtk_widget_show_all (win1); /* Boucle d'evenements qui fait "vivre" la fenetre */ gtk_main (); exit (0); }