summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Bursa <james@netsurf-browser.org>2005-02-20 12:24:18 +0000
committerJames Bursa <james@netsurf-browser.org>2005-02-20 12:24:18 +0000
commitc9b0e66246b905805a9e5d025771587a0e4f9a75 (patch)
tree7a4a55fcb9db9e1a83389b162074f7ade85d8252
parentafb3ee60c93f3d6ea31839bc379f284a40c09e5f (diff)
downloadlibrufl-c9b0e66246b905805a9e5d025771587a0e4f9a75.tar.gz
librufl-c9b0e66246b905805a9e5d025771587a0e4f9a75.tar.bz2
[project @ 2005-02-20 12:24:18 by bursa]
Implement rufl_invalidate_cache(). svn path=/import/rufl/; revision=2449
-rw-r--r--makefile2
-rw-r--r--rufl.h9
-rw-r--r--rufl_chars.c8
-rw-r--r--rufl_paint.c8
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
@@ -108,6 +108,15 @@ 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;