# HG changeset patch # User Eric Warmenhoven # Date 959886780 0 # Node ID 77404a4692b1e94068edaeb0cdc92e2dbbb6c158 # Parent b4880624ec7890e78bca1633f9572b732400d57e [gaim-migrate @ 315] 12:10:45 EWarmenhoven: ok, the new method for chosing a font: it tries the requested font at the requested size. if it can't do that, it tries the requested font at any size. if it can't do that, it tries courier at any size, then helvetica at any size. if it can't do *that*, it tries the person's default outgoing font, if they have one. if it can't do that, it tries courier, helvetica, then times, all in their most boring form (no bold, italics, etc) at any size. if it *still* can't do that, then there's just no hope, and it segfaults. but at least there's a few more layers of protection and probability that you're going to get *something* right 12:11:43 EWarmenhoven: i don't even know that it'll segfault, but i'm pretty sure it will, since by the time you get down there, it returns NULL :-P committer: Tailor Script diff -r b4880624ec78 -r 77404a4692b1 src/gtkhtml.c --- a/src/gtkhtml.c Thu Jun 01 17:10:05 2000 +0000 +++ b/src/gtkhtml.c Thu Jun 01 19:13:00 2000 +0000 @@ -477,7 +477,7 @@ gchar font_spec[1024]; g_snprintf(font_spec, sizeof font_spec, - "-*-%s-%s-%c-normal-*-*-%d-*-*-*-*-iso8859-1", + "-*-%s-%s-%c-*-*-*-%d-*-*-*-*-*-*", name, weight, slant, size); if((*font_return = g_datalist_id_get_data(&font_cache, @@ -509,7 +509,7 @@ /* try both 'i'talic and 'o'blique for italic fonts, and keep * increasing the size until we get one that works. */ - while (size < 720) { + while (size <= 720) { if (load_font_with_cache(font, weight, slant, size, &my_font)) return my_font; if (italic && load_font_with_cache(font, weight, 'o', size, &my_font)) @@ -521,13 +521,65 @@ * default fonts. */ font = fixed ? "courier" : "helvetica"; - - if (load_font_with_cache(font, weight, slant, 120, &my_font)) - return my_font; - else { - fprintf(stderr, "gaim: can't load default font\n"); - exit(1); + size = 120; + while (size <= 720) { + if (load_font_with_cache(font, weight, slant, size, &my_font)) + return my_font; + size += 10; + } + + font = fixed ? "helvetica" : "courier"; + size = 120; + while (size <= 720) { + if (load_font_with_cache(font, weight, slant, size, &my_font)) + return my_font; + size += 10; + } + + /* whoops, couldn't do any of those. maybe they have a default outgoing + * font? maybe we can use that. */ + if (font_options & OPT_FONT_FACE) { + if (fontname != NULL) { + /* woohoo! */ + size = 120; + while (size <= 720) { + if (load_font_with_cache(fontname, "medium", 'r', size, &my_font)) + return my_font; + size += 10; + } + } } + + /* ok, now we're in a pickle. if we can't do any of the above, let's + * try doing the most boring font we can find. */ + size = 120; + while (size <= 720) { + if (load_font_with_cache("courier", "medium", 'r', size, &my_font)) + return my_font; + size += 10; + } + + size = 120; + while (size <= 720) { + if (load_font_with_cache("helvetica", "medium", 'r', size, &my_font)) + return my_font; + size += 10; + } + + size = 120; + while (size <= 720) { + if (load_font_with_cache("times", "medium", 'r', size, &my_font)) + return my_font; + size += 10; + } + + /* my god, how did we end up here. is there a 'generic font' function + * in gdk? that would be incredibly useful here. there's gotta be a + * better way to do this. */ + + /* well, if they can't do any of the fonts above, they're screwed, might + * as well segfault. */ + return NULL; }