Index: work/gtk/layersel/layersel.c =================================================================== --- work/gtk/layersel/layersel.c (revision 8512) +++ work/gtk/layersel/layersel.c (revision 8513) @@ -1,12 +1,8 @@ + +#include #include "layersel.h" #include "lib_gtk_common/compat.h" -typedef struct layersel_grp_s { - GtkWidget *grp_row, *grp_closed, *grp_open; - - GtkWidget *layer[4], *vis_on[4], *vis_off[4]; -} layersel_grp_t; - /*** Layer visibility widget rendering ***/ #define set_pixel(dst, r, g, b, a) \ do { \ @@ -86,7 +82,7 @@ /*** Row builder ***/ -static GtkWidget *build_grp(layersel_grp_t *ls, const char *gname) +static GtkWidget *build_grp(pcb_gtk_layersel_t *ls, layersel_grp_t *lsg, const char *gname) { GtkWidget *gn_vert, *grp_layers, *vlabel, *spring, *vis_box, *vis_ebox; int n; @@ -104,16 +100,16 @@ |+-----------------------+ | +--------------------------+ */ - ls->grp_row = gtkc_vbox_new(0, 0); - ls->grp_closed = gtkc_hbox_new(0, 0); - ls->grp_open = gtkc_hbox_new(0, 0); - gtk_box_pack_start(GTK_BOX(ls->grp_row), ls->grp_closed, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(ls->grp_row), ls->grp_open, FALSE, FALSE, 0); + lsg->grp_row = gtkc_vbox_new(0, 0); + lsg->grp_closed = gtkc_hbox_new(0, 0); + lsg->grp_open = gtkc_hbox_new(0, 0); + gtk_box_pack_start(GTK_BOX(lsg->grp_row), lsg->grp_closed, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(lsg->grp_row), lsg->grp_open, FALSE, FALSE, 0); gn_vert = gtkc_vbox_new(0, 0); grp_layers = gtkc_vbox_new(0, 0); - gtk_box_pack_start(GTK_BOX(ls->grp_open), gn_vert, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(ls->grp_open), grp_layers, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(lsg->grp_open), gn_vert, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(lsg->grp_open), grp_layers, FALSE, FALSE, 0); /* install group name */ @@ -123,44 +119,43 @@ gtk_misc_set_alignment(GTK_MISC(vlabel), 0, 1); gtk_widget_set_size_request(vlabel, 32, 1); - gtk_box_pack_start(GTK_BOX(ls->grp_closed), gtk_label_new(gname), FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(lsg->grp_closed), gtk_label_new(gname), FALSE, FALSE, 0); /* install layers */ for(n = 0; n < 4; n++) { - ls->layer[n] = gtkc_hbox_new(0, 0); - gtk_box_pack_start(GTK_BOX(grp_layers), ls->layer[n], FALSE, FALSE, 0); + lsg->layer[n] = gtkc_hbox_new(0, 0); + gtk_box_pack_start(GTK_BOX(grp_layers), lsg->layer[n], FALSE, FALSE, 0); sprintf(tmp, "layer %d", n); /* sensitive layer visibility widgets */ vis_box = gtkc_hbox_new(0, 0); - ls->vis_on[n] = layer_vis_box(1, "#ff0000"); - gtk_box_pack_start(GTK_BOX(vis_box), ls->vis_on[n], FALSE, FALSE, 0); - ls->vis_off[n] = layer_vis_box(0, "#ff0000"); - gtk_box_pack_start(GTK_BOX(vis_box), ls->vis_off[n], FALSE, FALSE, 0); + lsg->vis_on[n] = layer_vis_box(1, "#ff0000"); + gtk_box_pack_start(GTK_BOX(vis_box), lsg->vis_on[n], FALSE, FALSE, 0); + lsg->vis_off[n] = layer_vis_box(0, "#ff0000"); + gtk_box_pack_start(GTK_BOX(vis_box), lsg->vis_off[n], FALSE, FALSE, 0); vis_ebox = wrap_bind_click(vis_box, G_CALLBACK(group_button_press_cb), NULL); - gtk_box_pack_start(GTK_BOX(ls->layer[n]), vis_ebox, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(lsg->layer[n]), vis_ebox, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(ls->layer[n]), gtk_label_new(tmp), FALSE, FALSE, 10); + gtk_box_pack_start(GTK_BOX(lsg->layer[n]), gtk_label_new(tmp), FALSE, FALSE, 10); spring = gtkc_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(ls->layer[n]), spring, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(lsg->layer[n]), spring, TRUE, TRUE, 0); } - return ls->grp_row; + return lsg->grp_row; } /*** Layer selector widget building function ***/ -GtkWidget *pcb_gtk_layersel_build(void) +GtkWidget *pcb_gtk_layersel_build(pcb_gtk_layersel_t *ls) { GtkWidget *main_box; GtkWidget *spring; - layersel_grp_t grp[3]; main_box = gtkc_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(main_box), build_grp(&grp[0], "group0"), FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(main_box), build_grp(&grp[1], "group1"), FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(main_box), build_grp(&grp[2], "group2longnamed"), FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(main_box), build_grp(ls, &ls->grp[0], "group0"), FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(main_box), build_grp(ls, &ls->grp[1], "group1"), FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(main_box), build_grp(ls, &ls->grp[2], "group2longnamed"), FALSE, FALSE, 0); spring = gtkc_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(main_box), spring, TRUE, TRUE, 0); Index: work/gtk/layersel/layersel.h =================================================================== --- work/gtk/layersel/layersel.h (revision 8512) +++ work/gtk/layersel/layersel.h (revision 8513) @@ -1,4 +1,19 @@ +#ifndef PCB_GTK_LAYERSEL_H +#define PCB_GTK_LAYERSEL_H + #include +typedef struct layersel_grp_s { + GtkWidget *grp_row, *grp_closed, *grp_open; + + GtkWidget *layer[4], *vis_on[4], *vis_off[4]; +} layersel_grp_t; -GtkWidget *pcb_gtk_layersel_build(void); + +typedef struct pcb_gtk_layersel_s { + layersel_grp_t grp[3]; +} pcb_gtk_layersel_t; + +GtkWidget *pcb_gtk_layersel_build(pcb_gtk_layersel_t *ls); + +#endif Index: work/gtk/layersel/layersel_demo.c =================================================================== --- work/gtk/layersel/layersel_demo.c (revision 8512) +++ work/gtk/layersel/layersel_demo.c (revision 8513) @@ -6,6 +6,7 @@ { GtkWidget *mainwin; GtkWidget *layer_selector; + pcb_gtk_layersel_t ls; /* Initialize the widget set */ gtk_init(&argc, &argv); @@ -15,7 +16,7 @@ g_signal_connect(G_OBJECT(mainwin), "destroy", G_CALLBACK(gtk_main_quit), NULL); /* Set up GUI elements */ - layer_selector = pcb_gtk_layersel_build(); + layer_selector = pcb_gtk_layersel_build(&ls); gtk_container_add(GTK_CONTAINER(mainwin), layer_selector); /* Show the application window */