summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2004-09-29 20:13:42 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2004-09-29 20:13:42 +0000
commit4a37e170373bcf5ea978698371bacfde6829435c (patch)
tree5fa7968663bd13cc382af1a3c090deb0212ba451
parentd718a30c573fc7b65fabd6d338a5e09d0b60fd38 (diff)
downloadnetsurf-4a37e170373bcf5ea978698371bacfde6829435c.tar.gz
netsurf-4a37e170373bcf5ea978698371bacfde6829435c.tar.bz2
[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
-rw-r--r--render/font.h2
-rw-r--r--riscos/dialog.c2
-rw-r--r--riscos/font.c141
-rw-r--r--riscos/gui.c2
4 files changed, 142 insertions, 5 deletions
diff --git a/render/font.h b/render/font.h
index 647a2909c..dd4f91690 100644
--- a/render/font.h
+++ b/render/font.h
@@ -48,6 +48,6 @@ void nsfont_txtenum(struct font_data *font, const char *text,
const char **rotext,
size_t *rolength,
size_t *consumed);
-void nsfont_fill_nametable(void);
+void nsfont_fill_nametable(bool force_rescan);
#endif
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"))