/** selection.c **/ #include GtkWidget *makeColorBox(); void showColorsel(GtkWidget *widget,gpointer data); void changeColor(GtkWidget *widget, GtkColorSelection *colorSel); void destroyColorsel(GtkWidget *widget, gpointer data); void helpColorsel(GtkWidget *widget,gpointer data); gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data); gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data); static GtkWidget *csDialog = NULL; static GtkWidget *area; int main(int argc,char *argv[]) { GtkWidget *app; GtkWidget *colorBox; gnome_init("selection","1.0",argc,argv); app = gnome_app_new("selection","Color Selection"); 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); colorBox = makeColorBox(); gnome_app_set_contents(GNOME_APP(app),colorBox); gtk_widget_show_all(app); gtk_main(); exit(0); } GtkWidget *makeColorBox() { GtkWidget *colorbox; GtkWidget *button; colorbox = gtk_vbox_new(FALSE,0); gtk_container_set_border_width( GTK_CONTAINER(colorbox),10); area = gtk_drawing_area_new(); gtk_widget_set_usize(area,300,200); gtk_box_pack_start(GTK_BOX(colorbox), area,FALSE,FALSE,0); button = gtk_button_new_with_label("Select"); gtk_box_pack_start(GTK_BOX(colorbox), button,FALSE,FALSE,0); gtk_signal_connect(GTK_OBJECT(button),"clicked", GTK_SIGNAL_FUNC(showColorsel),NULL); return(colorbox); } void showColorsel(GtkWidget *widget,gpointer data) { GtkWidget *colorSel; GtkWidget *button; if(csDialog == NULL) { csDialog = gtk_color_selection_dialog_new( "Selected color fills the rectangle"); gtk_signal_connect(GTK_OBJECT(csDialog), "destroy", GTK_SIGNAL_FUNC(destroyColorsel),NULL); colorSel = GTK_COLOR_SELECTION_DIALOG(csDialog)->colorsel; gtk_signal_connect(GTK_OBJECT(colorSel), "color_changed", GTK_SIGNAL_FUNC(changeColor),colorSel); button = GTK_COLOR_SELECTION_DIALOG( csDialog)->ok_button; gtk_signal_connect(GTK_OBJECT(button),"clicked", GTK_SIGNAL_FUNC(destroyColorsel),NULL); button = GTK_COLOR_SELECTION_DIALOG( csDialog)->cancel_button; gtk_signal_connect(GTK_OBJECT(button),"clicked", GTK_SIGNAL_FUNC(destroyColorsel),NULL); button = GTK_COLOR_SELECTION_DIALOG( csDialog)->help_button; gtk_signal_connect(GTK_OBJECT(button),"clicked", GTK_SIGNAL_FUNC(helpColorsel),NULL); } gtk_widget_show(csDialog); } void changeColor(GtkWidget *widget, GtkColorSelection *colorSel) { gdouble colorArray[4]; GdkColor color; GdkColormap *colormap; gtk_color_selection_get_color(colorSel,colorArray); color.red = (gushort)(0xFFFFF * colorArray[0]); color.green = (gushort)(0xFFFFF * colorArray[1]); color.blue = (gushort)(0xFFFFF * colorArray[2]); colormap = gdk_colormap_get_system(); gdk_color_alloc(colormap,&color); gdk_window_set_background(area->window,&color); gdk_window_clear(area->window); } void destroyColorsel(GtkWidget *widget,gpointer data) { if(csDialog != NULL) { gtk_widget_destroy(csDialog); csDialog = NULL; } } void helpColorsel(GtkWidget *widget,gpointer data) { gnome_ok_dialog("Sorry.\nNo help available"); } gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data) { return(FALSE); } gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data) { gtk_main_quit(); return(0); }