/** boxbox.c (Gnome) **/ #include gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data); gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data); gboolean eventExpose(GtkWidget *widget, GdkEvent *event,gpointer data); gint eventConfigure(GtkWidget *widget, GdkEventConfigure *event,gpointer data); #define STEP 3 static char name[] = "BoxBox"; static int xBox1; static int yBox1; static int xBox2; static int yBox2; int main(int argc,char *argv[]) { GtkWidget *app; GtkWidget *area; gnome_init(name,"1.0",argc,argv); app = gnome_app_new(name,"Boxes in Boxes"); 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(); gnome_app_set_contents(GNOME_APP(app),area); gtk_signal_connect(GTK_OBJECT(area),"expose_event", GTK_SIGNAL_FUNC(eventExpose),NULL); gtk_signal_connect(GTK_OBJECT(area),"configure_event", GTK_SIGNAL_FUNC(eventConfigure),NULL); gtk_widget_show_all(app); gtk_main(); exit(0); } gboolean eventExpose(GtkWidget *widget, GdkEvent *event,gpointer data) { int x1; int y1; int x2; int y2; x1 = xBox1; y1 = yBox1; x2 = xBox2; y2 = yBox2; while((x1 < x2) && (y1 < y2)) { gdk_draw_line(widget->window, widget->style->black_gc, x1,y1,x2,y1); gdk_draw_line(widget->window, widget->style->black_gc, x2,y1,x2,y2); gdk_draw_line(widget->window, widget->style->black_gc, x2,y2,x1,y2); gdk_draw_line(widget->window, widget->style->black_gc, x1,y2,x1,y1); x1 += STEP; y1 += STEP; x2 -= STEP; y2 -= STEP; } return(TRUE); } gint eventConfigure(GtkWidget *widget, GdkEventConfigure *event,gpointer data) { xBox1 = 10; yBox1 = 10; xBox2 = event->width - 10; yBox2 = event->height - 10; 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); }