#include #include #include #define SIZE 380 #define NBR 20000 static double frand (void) { return ((double) rand() / RAND_MAX * SIZE); } static expose(GtkWidget *widget, GdkEventExpose *event, gpointer data) { cairo_surface_t *surface; cairo_t *cairo; int i; cairo = gdk_cairo_create(widget-> window); cairo_rectangle (cairo, 0, 0, SIZE, SIZE); cairo_set_source_rgba (cairo, 1, 1, 1, 0); cairo_fill (cairo); cairo_set_line_join (cairo, CAIRO_LINE_JOIN_ROUND); cairo_set_line_cap (cairo, CAIRO_LINE_CAP_ROUND); cairo_set_line_width (cairo, 1.0); cairo_set_source_rgba (cairo, 0., 0., 0., 1.0); cairo_move_to (cairo, frand(), frand()); for (i = 0; i < NBR; i++) cairo_line_to (cairo, frand(), frand ()); cairo_stroke (cairo); cairo_destroy (cairo); return 0; } int main (int argc, char **argv) { gtk_init(&argc, &argv); GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(win, "delete_event", gtk_main_quit, NULL); GtkWidget* area = gtk_drawing_area_new(); gtk_widget_set_size_request (area, SIZE, SIZE); g_signal_connect(G_OBJECT(area), "expose_event", G_CALLBACK(expose), NULL); gtk_container_add(GTK_CONTAINER(win), area); gtk_widget_show_all(win); gtk_main(); return 0; }