From 4a37e170373bcf5ea978698371bacfde6829435c Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Wed, 29 Sep 2004 20:13:42 +0000 Subject: [project @ 2004-09-29 20:13:42 by jmb] Write heuristically-generated font names to choices file - should speed up program load a bit. Heuristic is re-run each time the choices file is saved. svn path=/import/netsurf/; revision=1294 --- riscos/dialog.c | 2 +- riscos/font.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- riscos/gui.c | 2 +- 3 files changed, 141 insertions(+), 4 deletions(-) (limited to 'riscos') diff --git a/riscos/dialog.c b/riscos/dialog.c index 47b587945..e3e40eb48 100644 --- a/riscos/dialog.c +++ b/riscos/dialog.c @@ -717,7 +717,7 @@ void ro_gui_dialog_click_config(wimp_pointer *pointer) void ro_gui_save_options(void) { - nsfont_fill_nametable(); + nsfont_fill_nametable(true); /* NCOS doesnt have the fancy Universal Boot vars; so select * the path to the choices file based on the build options */ #ifndef NCOS diff --git a/riscos/font.c b/riscos/font.c index 141518a9b..5ebfa0054 100644 --- a/riscos/font.c +++ b/riscos/font.c @@ -773,8 +773,11 @@ void nsfont_txtenum(struct font_data *font, const char *text, /** * Fill in the font_table, based on the user's options + * + * \param force_rescan Indicate whether to rescan font names + * and update options */ -void nsfont_fill_nametable(void) +void nsfont_fill_nametable(bool force_rescan) { int i; char *name = NULL, *created = NULL; @@ -862,7 +865,7 @@ void nsfont_fill_nametable(void) break; } - if (name && name[0] != '\0') { + if ((!force_rescan || (force_rescan && i == ((i / FONT_FACES) * FONT_FACES))) && name && name[0] != '\0') { /* got a configured font name => use it */ strncpy(font_table[i], name, FONT_MAX_NAME); } @@ -899,6 +902,140 @@ void nsfont_fill_nametable(void) } free(name); + + /* don't modify options if not rescanning */ + if (!force_rescan) + continue; + + /* write the relevant option string */ + switch (i) { + /* default */ + case FONT_DEFAULT: + if (option_font_default) + free(option_font_default); + option_font_default = strdup(font_table[i]); + break; + case FONT_DEFAULT + FONT_SLANTED: + if (option_font_default_italic) + free(option_font_default_italic); + option_font_default_italic = strdup(font_table[i]); + break; + case FONT_DEFAULT + FONT_BOLD: + if (option_font_default_bold) + free(option_font_default_bold); + option_font_default_bold = strdup(font_table[i]); + break; + case FONT_DEFAULT + FONT_BOLD + FONT_SLANTED: + if (option_font_default_bold_italic) + free(option_font_default_bold_italic); + option_font_default_bold_italic = strdup(font_table[i]); + break; + /* sans */ + case FONT_SANS_SERIF: + if (option_font_sans) + free(option_font_sans); + option_font_sans = strdup(font_table[i]); + break; + case FONT_SANS_SERIF + FONT_SLANTED: + if (option_font_sans_italic) + free(option_font_sans_italic); + option_font_sans_italic = strdup(font_table[i]); + break; + case FONT_SANS_SERIF + FONT_BOLD: + if (option_font_sans_bold) + free(option_font_sans_bold); + option_font_sans_bold = strdup(font_table[i]); + break; + case FONT_SANS_SERIF + FONT_BOLD + FONT_SLANTED: + if (option_font_sans_bold_italic) + free(option_font_sans_bold_italic); + option_font_sans_bold_italic = strdup(font_table[i]); + break; + /* serif */ + case FONT_SERIF: + if (option_font_serif) + free(option_font_serif); + option_font_serif = strdup(font_table[i]); + break; + case FONT_SERIF + FONT_SLANTED: + if (option_font_serif_italic) + free(option_font_serif_italic); + option_font_serif_italic = strdup(font_table[i]); + break; + case FONT_SERIF + FONT_BOLD: + if (option_font_serif_bold) + free(option_font_serif_bold); + option_font_serif_bold = strdup(font_table[i]); + break; + case FONT_SERIF + FONT_BOLD + FONT_SLANTED: + if (option_font_serif_bold_italic) + free(option_font_serif_bold_italic); + option_font_serif_bold_italic = strdup(font_table[i]); + break; + /* mono */ + case FONT_MONOSPACE: + if (option_font_mono) + free(option_font_mono); + option_font_mono = strdup(font_table[i]); + break; + case FONT_MONOSPACE + FONT_SLANTED: + if (option_font_mono_italic) + free(option_font_mono_italic); + option_font_mono_italic = strdup(font_table[i]); + break; + case FONT_MONOSPACE + FONT_BOLD: + if (option_font_mono_bold) + free(option_font_mono_bold); + option_font_mono_bold = strdup(font_table[i]); + break; + case FONT_MONOSPACE + FONT_BOLD + FONT_SLANTED: + if (option_font_mono_bold_italic) + free(option_font_mono_bold_italic); + option_font_mono_bold_italic = strdup(font_table[i]); + break; + /* cursive */ + case FONT_CURSIVE: + if (option_font_cursive) + free(option_font_cursive); + option_font_cursive = strdup(font_table[i]);; + break; + case FONT_CURSIVE + FONT_SLANTED: + if (option_font_cursive_italic) + free(option_font_cursive_italic); + option_font_cursive_italic = strdup(font_table[i]); + break; + case FONT_CURSIVE + FONT_BOLD: + if (option_font_cursive_bold) + free(option_font_cursive_bold); + option_font_cursive_bold = strdup(font_table[i]); + break; + case FONT_CURSIVE + FONT_BOLD + FONT_SLANTED: + if (option_font_cursive_bold_italic) + free(option_font_cursive_bold_italic); + option_font_cursive_bold_italic = strdup(font_table[i]); + break; + /* fantasy */ + case FONT_FANTASY: + if (option_font_fantasy) + free(option_font_fantasy); + option_font_fantasy = strdup(font_table[i]); + break; + case FONT_FANTASY + FONT_SLANTED: + if (option_font_fantasy_italic) + free(option_font_fantasy_italic); + option_font_fantasy_italic = strdup(font_table[i]); + break; + case FONT_FANTASY + FONT_BOLD: + if (option_font_fantasy_bold) + free(option_font_fantasy_bold); + option_font_fantasy_bold = strdup(font_table[i]); + break; + case FONT_FANTASY + FONT_BOLD + FONT_SLANTED: + if (option_font_fantasy_bold_italic) + free(option_font_fantasy_bold_italic); + option_font_fantasy_bold_italic = strdup(font_table[i]); + break; + } } } } diff --git a/riscos/gui.c b/riscos/gui.c index 339dffed6..eb635bdd9 100644 --- a/riscos/gui.c +++ b/riscos/gui.c @@ -217,7 +217,7 @@ void gui_init(int argc, char** argv) #ifndef ncos ro_gui_check_fonts(); #endif - nsfont_fill_nametable(); + nsfont_fill_nametable(false); /* Issue a *Desktop to poke AcornURI into life */ if (getenv("NetSurf$Start_URI_Handler")) -- cgit v1.2.3