/** flasher.c **/ #include gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data); gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data); gint drawRandomRectangle(gpointer data); #define WIDTH 400 #define HEIGHT 300 #define INTERVAL 30 int main(int argc,char *argv[]) { GtkWidget *app; GtkWidget *area; gnome_init("flasher","1.0",argc,argv); app = gnome_app_new("flasher","Creating Colors"); 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_timeout_add(INTERVAL,drawRandomRectangle,area); gtk_widget_show_all(app); gtk_main(); exit(0); } gint drawRandomRectangle(gpointer data) { static GdkColormap *colormap = NULL; static GdkGC *gc = NULL; GdkColor color; GtkWidget *widget = GTK_WIDGET(data); gint x = 20; gint y = 20; gint width = 40; gint height = 40; if(colormap == NULL) { colormap = gdk_colormap_get_system(); gc = gdk_gc_new(widget->window); } color.red += (((double)rand()*0xFFFF)/RAND_MAX); color.green += (((double)rand()*0xFFFF)/RAND_MAX); color.blue += (((double)rand()*0xFFFF)/RAND_MAX); gdk_color_alloc(colormap,&color); gdk_gc_set_foreground(gc,&color); x = (((double)rand()*WIDTH)/RAND_MAX) - (WIDTH/4); y = (((double)rand()*HEIGHT)/RAND_MAX) - (HEIGHT/4); width = (((double)rand()*(WIDTH/2))/RAND_MAX); height = (((double)rand()*(HEIGHT/2))/RAND_MAX); gdk_draw_rectangle(widget->window, gc, TRUE, x,y, width,height); 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); }