From c9b0e66246b905805a9e5d025771587a0e4f9a75 Mon Sep 17 00:00:00 2001 From: James Bursa Date: Sun, 20 Feb 2005 12:24:18 +0000 Subject: [project @ 2005-02-20 12:24:18 by bursa] Implement rufl_invalidate_cache(). svn path=/import/rufl/; revision=2449 --- makefile | 2 +- rufl.h | 9 +++++++++ rufl_chars.c | 8 +++++++- rufl_paint.c | 8 ++------ 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/makefile b/makefile index 1468de9..7c53a67 100644 --- a/makefile +++ b/makefile @@ -15,7 +15,7 @@ LIBS = -L/home/riscos/env/lib -loslib SOURCE = rufl_init.c rufl_quit.c rufl_dump_state.c \ rufl_character_set_test.c rufl_substitution_lookup.c \ - rufl_paint.c rufl_glyph_map.c + rufl_paint.c rufl_glyph_map.c rufl_invalidate_cache.c all: rufl.o rufl_test,ff8 rufl_chars,ff8 diff --git a/rufl.h b/rufl.h index 7016dd6..38f481f 100644 --- a/rufl.h +++ b/rufl.h @@ -107,6 +107,15 @@ rufl_code rufl_x_to_offset(const char *font_family, rufl_style font_style, void rufl_dump_state(void); +/** + * Clear the internal font handle cache. + * + * Call this function on mode changes or output redirection changes. + */ + +void rufl_invalidate_cache(void); + + /** * Free all resources used by the library. */ diff --git a/rufl_chars.c b/rufl_chars.c index d79adb7..25c4edb 100644 --- a/rufl_chars.c +++ b/rufl_chars.c @@ -210,8 +210,14 @@ int main(void) case wimp_USER_MESSAGE: case wimp_USER_MESSAGE_RECORDED: - if (block.message.action == message_QUIT) + switch (block.message.action) { + case message_QUIT: quit = true; + break; + case message_MODE_CHANGE: + rufl_invalidate_cache(); + break; + } break; } } diff --git a/rufl_paint.c b/rufl_paint.c index de20ca0..af771bb 100644 --- a/rufl_paint.c +++ b/rufl_paint.c @@ -277,10 +277,8 @@ rufl_code rufl_process_span(rufl_action action, font_GIVEN_LENGTH | font_GIVEN_FONT | font_KERN | font_GIVEN16_BIT, *x, y, 0, trfm, n * 2); - if (rufl_fm_error) { - xfont_lose_font(f); + if (rufl_fm_error) return rufl_FONT_MANAGER_ERROR; - } } /* increment x by width of span */ @@ -302,10 +300,8 @@ rufl_code rufl_process_span(rufl_action action, 0x7fffffff, 0x7fffffff, 0, trfm, n * 2, 0, &x_out, &y_out, 0); } - if (rufl_fm_error) { - xfont_lose_font(f); + if (rufl_fm_error) return rufl_FONT_MANAGER_ERROR; - } *x += x_out / 400; return rufl_OK; -- cgit v1.2.3