Index: trunk/src/font.c =================================================================== --- trunk/src/font.c (revision 7647) +++ trunk/src/font.c (revision 7648) @@ -201,7 +201,7 @@ } -pcb_font_t *pcb_font(pcb_board_t *pcb, pcb_font_id_t id, int fallback) +static pcb_font_t *pcb_font_(pcb_board_t *pcb, pcb_font_id_t id, int fallback, int unlink) { if (id <= 0) return &pcb->fontkit.dflt; @@ -208,8 +208,11 @@ if (pcb->fontkit.hash_inited) { pcb_font_t *f = htip_get(&pcb->fontkit.fonts, id); - if (f != NULL) + if (f != NULL) { + if (unlink) + htip_popentry(&pcb->fontkit.fonts, id); return f; + } } if (fallback) @@ -218,6 +221,17 @@ return NULL; } +pcb_font_t *pcb_font(pcb_board_t *pcb, pcb_font_id_t id, int fallback) +{ + return pcb_font_(pcb, id, fallback, 0); +} + +pcb_font_t *pcb_font_unlink(pcb_board_t *pcb, pcb_font_id_t id) +{ + return pcb_font_(pcb, id, 0, 1); +} + + static void hash_setup(pcb_fontkit_t *fk) { if (fk->hash_inited) Index: trunk/src/font.h =================================================================== --- trunk/src/font.h (revision 7647) +++ trunk/src/font.h (revision 7648) @@ -79,6 +79,9 @@ pcb_font_t *pcb_new_font(pcb_fontkit_t *fk, pcb_font_id_t id, const char *name); int pcb_del_font(pcb_fontkit_t *fk, pcb_font_id_t id); +/* Unlink the font from pcb, but do not free anything but return the font */ +pcb_font_t *pcb_font_unlink(pcb_board_t *pcb, pcb_font_id_t id); + #endif