1 /* gcc -Wall -g $(pkg-config --cflags --libs gtk+-2.0 cairo) olpc-boot.c -o olpc-boot */
6 typedef struct _state {
7 GtkWidget *drawing_area;
12 xoboot_expose_event (GtkWidget *widget,
13 GdkEventExpose *event,
16 state_t *state = closure;
19 cr = gdk_cairo_create (widget->window);
21 cairo_set_source_rgb (cr, state->progress, 0, 0);
30 create_window (state_t *state)
33 GtkWidget *drawing_area;
35 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
36 gtk_window_set_title (GTK_WINDOW (window), "OLPC Boot Animation Demo");
38 g_signal_connect (window, "destroy",
39 G_CALLBACK (gtk_main_quit), &window);
41 drawing_area = gtk_drawing_area_new ();
43 /* We want to force 640x480 to emulate the OLPC display */
44 gtk_widget_set_size_request (drawing_area, 640, 480);
46 gtk_container_add (GTK_CONTAINER (window), drawing_area);
48 g_signal_connect (drawing_area, "expose_event",
49 G_CALLBACK (xoboot_expose_event), state);
55 timeout_callback (gpointer closure)
57 state_t *state = closure;
59 state->progress += 0.01;
60 if (state->progress > 1.0)
61 state->progress = 1.0;
63 gtk_widget_queue_draw (state->drawing_area);
69 main (int argc, char *argv[])
73 gtk_init (&argc, &argv);
75 state.drawing_area = create_window (&state);
78 gtk_widget_show_all (gtk_widget_get_toplevel (state.drawing_area));
80 g_timeout_add (100, timeout_callback, &state);