Index: trunk/src/Makefile.dep =================================================================== --- trunk/src/Makefile.dep (revision 7072) +++ trunk/src/Makefile.dep (revision 7073) @@ -335,7 +335,11 @@ layer_grp.h library.h rats_patch.h board.h build_run.h data.h \ crosshair.h vtonpoint.h hid.h error.h drc.h buffer.h draw.h font.h \ obj_all.h plugins.h stub_draw.h pcb-printf.h \ - ../src_3rd/genvector/gds_char.h compat_misc.h obj_text.h obj_text_draw.h + ../src_3rd/genvector/gds_char.h compat_misc.h conf_core.h conf.h \ + pcb-printf.h ../src_3rd/liblihata/lihata.h ../src_3rd/liblihata/dom.h \ + ../src_3rd/liblihata/lihata.h ../src_3rd/liblihata/parser.h \ + ../src_3rd/liblihata/genht/htsp.h ../src_3rd/genvector/vtp0.h \ + list_conf.h obj_text.h obj_text_draw.h ../src_plugins/export_bboard/bboard.o: \ ../src_plugins/export_bboard/bboard.c ../config.h math_helper.h board.h \ const.h macro.h global_typedefs.h pcb_bool.h unit.h vtroutestyle.h \ @@ -2250,7 +2254,7 @@ ../src_plugins/lib_gtk_common/in_mouse.h hid_cfg_input.h \ ../src_3rd/liblihata/dom.h ../src_3rd/liblihata/lihata.h \ ../src_3rd/liblihata/parser.h ../src_3rd/liblihata/genht/htsp.h \ - hid_cfg.h + hid_cfg.h stub_draw.h hid.h ../src_plugins/lib_gtk_common/dlg_input.o: \ ../src_plugins/lib_gtk_common/dlg_input.c ../config.h \ ../src_plugins/lib_gtk_common/dlg_input.h Index: trunk/src/stub_draw.h =================================================================== --- trunk/src/stub_draw.h (revision 7072) +++ trunk/src/stub_draw.h (revision 7073) @@ -43,5 +43,6 @@ /* fontsel */ extern void (*pcb_stub_draw_fontsel)(pcb_hid_gc_t gc); +extern pcb_bool (*pcb_stub_draw_fontsel_mouse_ev)(void *widget, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y); #endif Index: trunk/src_plugins/draw_fontsel/draw_fontsel.c =================================================================== --- trunk/src_plugins/draw_fontsel/draw_fontsel.c (revision 7072) +++ trunk/src_plugins/draw_fontsel/draw_fontsel.c (revision 7073) @@ -88,6 +88,13 @@ } } +#define MAX_FONT 128 +typedef struct { + int y1, y2; + pcb_font_id_t fid; +} font_coord_t; +font_coord_t font_coord[MAX_FONT]; +int font_coords; static void pcb_draw_font(pcb_hid_gc_t gc, pcb_font_t *f, int x, int *y) { @@ -94,6 +101,7 @@ char txt[256]; pcb_text_t *t; const char *nm; + int y_old = *y; nm = (f->name == NULL) ? "" : f->name; pcb_snprintf(txt, sizeof(txt), "#%d [abc ABC 123] %s", f->id, nm); @@ -105,6 +113,13 @@ pcb_text_bbox(pcb_font(PCB, f->id, 1), t); *y += pcb_round(PCB_COORD_TO_MM(t->BoundingBox.Y2 - t->BoundingBox.Y1) + 0.5); + + if (font_coords < MAX_FONT) { + font_coord[font_coords].y1 = y_old; + font_coord[font_coords].y2 = *y; + font_coord[font_coords].fid = f->id; + font_coords++; + } } @@ -115,7 +130,7 @@ pcb_gui->set_color(gc, "#FF0000"); dtext(0, 0, 300, 0, "Select font"); - + font_coords = 0; pcb_draw_font(gc, &PCB->fontkit.dflt, 10, &y); if (PCB->fontkit.hash_inited) { @@ -123,9 +138,31 @@ for (e = htip_first(&PCB->fontkit.fonts); e; e = htip_next(&PCB->fontkit.fonts, e)) pcb_draw_font(gc, e->value, 10, &y); } +} +static pcb_font_id_t lookup_fid_for_coord(pcb_coord_t y) +{ + int n, ymm; + + ymm = PCB_COORD_TO_MM(y); + for(n = 0; n < font_coords; n++) + if ((ymm >= font_coord[n].y1) && (ymm <= font_coord[n].y2)) + return font_coord[n].fid; + return -1; } +static pcb_bool pcb_mouse_fontsel(void *widget, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y) +{ + pcb_font_id_t fid; + switch(kind) { + case PCB_HID_MOUSE_PRESS: + fid = lookup_fid_for_coord(y); + if (fid >= 0) + pcb_trace("CLICK on %d\n", fid); + } + return 0; +} + static void hid_draw_fontsel_uninit(void) { } @@ -133,5 +170,7 @@ pcb_uninit_t hid_draw_fontsel_init(void) { pcb_stub_draw_fontsel = pcb_draw_fontsel; + pcb_stub_draw_fontsel_mouse_ev = pcb_mouse_fontsel; + return hid_draw_fontsel_uninit; } Index: trunk/src_plugins/lib_gtk_common/dlg_fontsel.c =================================================================== --- trunk/src_plugins/lib_gtk_common/dlg_fontsel.c (revision 7072) +++ trunk/src_plugins/lib_gtk_common/dlg_fontsel.c (revision 7073) @@ -31,6 +31,7 @@ #include "bu_box.h" #include "layer.h" #include "wt_preview.h" +#include "stub_draw.h" void pcb_gtk_dlg_fontsel(void *gport, GtkWidget *top_window, pcb_font_t *fnt, int modal) { @@ -61,8 +62,8 @@ prv = pcb_gtk_preview_layer_new(gport, ghid_init_drawing_widget, ghid_preview_expose, lid); gtk_box_pack_start(GTK_BOX(vbox), prv, TRUE, TRUE, 0); p = (pcb_gtk_preview_t *) prv; -/* p->mouse_cb = pcb_stub_draw_csect_mouse_ev; - p->overlay_draw_cb = pcb_stub_draw_csect_overlay;*/ + p->mouse_cb = pcb_stub_draw_fontsel_mouse_ev; +/* p->overlay_draw_cb = pcb_stub_draw_csect_overlay;*/ gtk_widget_set_size_request(prv, 200, 200); }