/* flasher.cc */ #include gint eventDelete(GtkWidget *widget, GdkEvent *event, gpointer data); gint eventDestroy(GtkWidget *widget, GdkEvent *event, gpointer data); gint drawRandomRectangle(gpointer data); const int WIDTH=400, HEIGHT=300, 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; }