/** polygons.c **/ #include gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data); gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data); gboolean eventDraw(GtkWidget *widget, GdkEvent *event,gpointer data); #define HORIZ 20 #define VERT 20 #define WIDTH (HORIZ * 29) #define HEIGHT (VERT * 9) static GdkPoint points[] = { { 80, 20 }, { 20, 80 }, { 40, 80 }, { 60, 120 }, { 20, 160 }, { 80, 140 }, { 140, 160 }, { 100, 120 }, { 120, 80 }, { 140, 80 }, }; int main(int argc,char *argv[]) { GtkWidget *app; GtkWidget *area; gnome_init("polygons","1.0",argc,argv); app = gnome_app_new("polygons","Drawing Polygons"); gtk_signal_connect(GTK_OBJECT(app),"delete_event", GTK_SIGNAL_FUNC(eventDelete),NULL); gtk_signal_connect(GTK_OBJECT(app),"destroy", GTK_SIGNAL_FUNC(eventDestroy),NULL); area = gtk_drawing_area_new(); gtk_widget_set_usize(area,WIDTH,HEIGHT); gnome_app_set_contents(GNOME_APP(app),area); gtk_signal_connect(GTK_OBJECT(area),"event", GTK_SIGNAL_FUNC(eventDraw),NULL); gtk_widget_show_all(app); gtk_main(); exit(0); } gboolean eventDraw(GtkWidget *widget, GdkEvent *event,gpointer data) { gint i; GdkPoint *p = malloc(sizeof(points)); gint pointCount = sizeof(points)/sizeof(GdkPoint); for(i=0; iwindow, widget->style->black_gc, FALSE, p, pointCount); for(i=0; iwindow, widget->style->white_gc, TRUE, p, pointCount); for(i=0; iwindow, widget->style->black_gc, FALSE, p, pointCount); gdk_draw_polygon(widget->window, widget->style->white_gc, TRUE, p, pointCount); for(i=0; iwindow, widget->style->white_gc, TRUE, p, pointCount); gdk_draw_polygon(widget->window, widget->style->black_gc, FALSE, p, pointCount); free(p); return(TRUE); } gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data) { return(FALSE); } gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data) { gtk_main_quit(); return(0); }