X-Git-Url: http://winboard.nl/cgi-bin?p=xboard.git;a=blobdiff_plain;f=gtk%2Fxoptions.c;h=79e5617a4896a61d9acf4462f7c1db44e9cb025f;hp=9dbb7ecad4e2570d9ce8af9526f9d0b8020b67ec;hb=6c09cbad6fd5630f883937303fc5e10a5ef8e3dc;hpb=3f60a3f82c6b793b7364508784fe0b68a2d0a05f diff --git a/gtk/xoptions.c b/gtk/xoptions.c index 9dbb7ec..79e5617 100644 --- a/gtk/xoptions.c +++ b/gtk/xoptions.c @@ -285,6 +285,29 @@ ApplyFont (Option *opt, char *font) if(w && font) SetWidgetFont(w, &font); } +GtkWidget *fbutton; + +void +FontCallback (GtkWidget *widget, gpointer gdata) +{ + Option *opt = (Option *) gdata; + gchar *p = (char *) gtk_font_button_get_font_name(GTK_FONT_BUTTON(fbutton)); + SetWidgetText(opt, p, TransientDlg); + ApplyFont(opt, p); +} + +void +ColorCallback (GtkWidget *widget, gpointer gdata) +{ + Option *opt = (Option *) gdata; + GdkColor rgba; + char buf[MSG_SIZ]; + gtk_color_button_get_color(GTK_COLOR_BUTTON(widget), &rgba); + snprintf(buf, MSG_SIZ, "#%02x%02x%02x", rgba.red>>8, rgba.green>>8, rgba.blue>>8); + gtk_widget_modify_bg ( GTK_WIDGET(opt[1].handle), GTK_STATE_NORMAL, &rgba ); + SetWidgetText(opt, buf, TransientDlg); +} + void SetListBoxItem (GtkListStore *store, int n, char *msg) { @@ -1002,6 +1025,7 @@ GraphEventProc(GtkWidget *widget, GdkEvent *event, gpointer gdata) case GDK_SCROLL: if(sevent->direction == GDK_SCROLL_UP) button = 4; if(sevent->direction == GDK_SCROLL_DOWN) button = 5; + w = h = 0; // to keep Clang happy break; case GDK_MOTION_NOTIFY: f = 0; @@ -1500,12 +1524,12 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); /* Left Justify */ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); SetWidgetFont(label, option[i].font); + gtk_widget_set_size_request(label, option[i].max ? option[i].max : -1, -1); if(option[i].min & BORDER) { GtkWidget *frame = gtk_frame_new(NULL); gtk_container_add(GTK_CONTAINER(frame), label); label = frame; } - gtk_widget_set_size_request(label, option[i].max ? option[i].max : -1, -1); if(option[i].target || dlgNr != ErrorDlg && option[i].name) { // allow user to specify event handler for button presses button = gtk_event_box_new(); gtk_container_add(GTK_CONTAINER(button), label); @@ -1520,6 +1544,21 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); break; case SaveButton: case Button: + if(!strcmp(option[i].name, "fontsel")) { + option[i].handle = (void *) (fbutton = gtk_font_button_new()); + Pack(hbox, table, fbutton, left, left+r, top, 0); + break; + } + if(!strcmp(option[i].name, "R") || !strcmp(option[i].name, "G") || !strcmp(option[i].name, "B")) { + break; + } else + if(!strcmp(option[i].name, "D")) { + GdkColor color; + char *name; + GetWidgetText(&option[i-5], &name); + gdk_color_parse(name, &color); + option[i].handle = (void *) (button = gtk_color_button_new_with_color(&color)); + } else button = gtk_button_new_with_label (_(option[i].name)); SetWidgetFont(gtk_bin_get_child(GTK_BIN(button)), option[i].font); @@ -1544,6 +1583,12 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); } Pack(hbox, table, button, left, left+1, top, 0); + if(!strcmp(option[i].name, "D")) // color button + g_signal_connect (button, "color-set", G_CALLBACK (ColorCallback), (gpointer) &option[i-5]); + else + if(option[i].value == 666 && !strcmp(option[i].name, "*")) // font-assignment buttons + g_signal_connect (button, "clicked", G_CALLBACK (FontCallback), (gpointer) &option[i-5]); + else g_signal_connect (button, "clicked", G_CALLBACK (GenericCallback), (gpointer)(intptr_t) i + (dlgNr<<16)); g_signal_connect(button, "button-press-event", G_CALLBACK (HelpEvent), (gpointer) option[i].name ); option[i].handle = (void*)button; @@ -1625,10 +1670,6 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); case Graph: option[i].handle = (void*) (graph = gtk_drawing_area_new()); gtk_widget_set_size_request(graph, option[i].max, option[i].value); - if(0){ GtkAllocation a; - a.x = 0; a.y = 0; a.width = option[i].max, a.height = option[i].value; - gtk_widget_set_allocation(graph, &a); - } g_signal_connect (graph, "expose-event", G_CALLBACK (GraphEventProc), (gpointer) &option[i]); gtk_widget_add_events(GTK_WIDGET(graph), GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK); g_signal_connect (graph, "button-press-event", G_CALLBACK (GraphEventProc), (gpointer) &option[i]); @@ -1785,8 +1826,10 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); gtk_window_resize(GTK_WINDOW(dialog), wp[dlgNr]->width, wp[dlgNr]->height); } - for(i=0; option[i].type != EndMark; i++) if(option[i].type == Graph) + for(i=0; option[i].type != EndMark; i++) if(option[i].type == Graph || dlgNr == BoardWindow && option[i].handle) { gtk_widget_set_size_request(option[i].handle, -1, -1); // remove size requests after realization, so user can shrink + if(option[i].type == Label) gtk_label_set_ellipsize(option[i].handle, PANGO_ELLIPSIZE_END); + } return 1; // tells caller he must do initialization (e.g. add specific event handlers) }