Index: trunk/src_plugins/dialogs/dlg_fontsel.c =================================================================== --- trunk/src_plugins/dialogs/dlg_fontsel.c (revision 21372) +++ trunk/src_plugins/dialogs/dlg_fontsel.c (revision 21373) @@ -30,6 +30,7 @@ typedef struct{ PCB_DAD_DECL_NOINIT(dlg) pcb_board_t *pcb; + int wprev; int active; pcb_text_t *old_txt; @@ -61,17 +62,41 @@ { } +static void fontsel_preview_update(fontsel_ctx_t *ctx) +{ + pcb_hid_attr_val_t hv; + if ((ctx == NULL) || (!ctx->active)) + return; + + hv.str_value = NULL; + pcb_gui->attr_dlg_set_value(ctx->dlg_hid_ctx, ctx->wprev, &hv); +} + + static void btn_load_cb(void *hid_ctx, void *caller_data, pcb_hid_attribute_t *attr) { + pcb_actionl("LoadFontFrom", NULL); /* modal, blocking */ + fontsel_preview_update((fontsel_ctx_t *)caller_data); } static void btn_replace_cb(void *hid_ctx, void *caller_data, pcb_hid_attribute_t *attr) { + char file[1] = "", id[5]; + pcb_snprintf(id, sizeof(id), "%ld", conf_core.design.text_font_id); + pcb_actionl("LoadFontFrom", file, id, NULL); /* modal, blocking */ + fontsel_preview_update((fontsel_ctx_t *)caller_data); } static void btn_remove_cb(void *hid_ctx, void *caller_data, pcb_hid_attribute_t *attr) { + if (conf_core.design.text_font_id == 0) { + pcb_message(PCB_MSG_ERROR, "Can not remove the default font.\n"); + return; + } + pcb_del_font(&PCB->fontkit, conf_core.design.text_font_id); + conf_set(CFR_DESIGN, "design/text_font_id", 0, "0", POL_OVERWRITE); + fontsel_preview_update((fontsel_ctx_t *)caller_data); } @@ -86,6 +111,7 @@ PCB_DAD_COMPFLAG(fontsel_ctx.dlg, PCB_HATF_EXPFILL); PCB_DAD_PREVIEW(fontsel_ctx.dlg, fontsel_expose_cb, fontsel_mouse_cb, fontsel_free_cb, &vbox, 200, 200, &fontsel_ctx); PCB_DAD_COMPFLAG(fontsel_ctx.dlg, PCB_HATF_EXPFILL); + fontsel_ctx.wprev = PCB_DAD_CURRENT(fontsel_ctx.dlg); PCB_DAD_BEGIN_HBOX(fontsel_ctx.dlg); PCB_DAD_BUTTON(fontsel_ctx.dlg, "Load font"); PCB_DAD_CHANGE_CB(fontsel_ctx.dlg, btn_load_cb); Index: trunk/src_plugins/draw_fontsel/draw_fontsel.c =================================================================== --- trunk/src_plugins/draw_fontsel/draw_fontsel.c (revision 21372) +++ trunk/src_plugins/draw_fontsel/draw_fontsel.c (revision 21373) @@ -98,9 +98,6 @@ font_coord_t font_coord[MAX_FONT]; int font_coords; -int font_new_y1, font_new_y2; -int font_replace_y1, font_replace_y2; -int font_del_y1, font_del_y2; pcb_text_t *fontsel_txt = NULL; @@ -134,45 +131,17 @@ static void pcb_draw_fontsel(pcb_hid_gc_t gc, const pcb_hid_expose_ctx_t *e) { - int y = 10; + int y = 0; pcb_text_t *t; - 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); + pcb_draw_font(gc, &PCB->fontkit.dflt, 0, &y); if (PCB->fontkit.hash_inited) { htip_entry_t *e; for (e = htip_first(&PCB->fontkit.fonts); e; e = htip_next(&PCB->fontkit.fonts, e)) - pcb_draw_font(gc, e->value, 10, &y); + pcb_draw_font(gc, e->value, 0, &y); } - - /* New font */ - pcb_gui->set_color(gc, "#000000"); - t = dtext(5, y, 250, 0, "[Load font from file]"); - pcb_text_bbox(pcb_font(PCB, 0, 1), t); - font_new_y1 = y; - y += pcb_round(PCB_COORD_TO_MM(t->BoundingBox.Y2 - t->BoundingBox.Y1) + 0.5); - font_new_y2 = y; - - /* Replace font */ - pcb_gui->set_color(gc, "#000000"); - t = dtext(5, y, 250, 0, "[Replace font]"); - pcb_text_bbox(pcb_font(PCB, 0, 1), t); - font_replace_y1 = y; - y += pcb_round(PCB_COORD_TO_MM(t->BoundingBox.Y2 - t->BoundingBox.Y1) + 0.5); - font_replace_y2 = y; - - /* Del font */ - pcb_gui->set_color(gc, "#550000"); - t = dtext(5, y, 250, 0, "[Remove current font]"); - pcb_text_bbox(pcb_font(PCB, 0, 1), t); - font_del_y1 = y; - y += pcb_round(PCB_COORD_TO_MM(t->BoundingBox.Y2 - t->BoundingBox.Y1) + 0.5); - font_del_y2 = y; - } static pcb_font_id_t lookup_fid_for_coord(int ymm) @@ -210,25 +179,6 @@ } return 1; } - else if ((ymm >= font_new_y1) && (ymm <= font_new_y2)) { - pcb_actionl("LoadFontFrom", NULL); /* modal, blocking */ - return 1; - } - else if ((ymm >= font_replace_y1) && (ymm <= font_replace_y2)) { - char file[1] = "", id[5]; - pcb_snprintf(id, sizeof(id), "%ld", conf_core.design.text_font_id); - pcb_actionl("LoadFontFrom", file, id, NULL); /* modal, blocking */ - return 1; - } - else if ((ymm >= font_del_y1) && (ymm <= font_del_y2)) { - if (conf_core.design.text_font_id == 0) { - pcb_message(PCB_MSG_ERROR, "Can not remove the default font.\n"); - return 0; - } - pcb_del_font(&PCB->fontkit, conf_core.design.text_font_id); - conf_set(CFR_DESIGN, "design/text_font_id", 0, "0", POL_OVERWRITE); - return 1; - } } return 0; }