# HG changeset patch # User Richard M. Stallman # Date 1147906267 0 # Node ID 434948c350d2c80585307ebb0666c4f72d630423 # Parent 102448f41c250d7f9e7903c7dd71618194fd63c4 (better_font_p): Any font beats no font. (best_matching_font): Simplify based on above change. diff -r 102448f41c25 -r 434948c350d2 src/xfaces.c --- a/src/xfaces.c Wed May 17 22:37:25 2006 +0000 +++ b/src/xfaces.c Wed May 17 22:51:07 2006 +0000 @@ -6383,6 +6383,12 @@ { int i; + /* Any font is better than no font. */ + if (! font1) + return 0; + if (! font2) + return 1; + for (i = 0; i < DIM (font_sort_order); ++i) { int xlfd_idx = font_sort_order[i]; @@ -6627,29 +6633,19 @@ if (needs_overstrike) *needs_overstrike = 0; - /* Start with the first non-scalable font in the list. */ - for (i = 0; i < nfonts; ++i) - if (!font_scalable_p (fonts + i)) - break; + best = NULL; /* Find the best match among the non-scalable fonts. */ - if (i < nfonts) - { - best = fonts + i; - - for (i = 1; i < nfonts; ++i) - if (!font_scalable_p (fonts + i) - && better_font_p (specified, fonts + i, best, 1, avgwidth)) - { - best = fonts + i; - - exact_p = exact_face_match_p (specified, best, avgwidth); - if (exact_p) - break; - } - } - else - best = NULL; + for (i = 1; i < nfonts; ++i) + if (!font_scalable_p (fonts + i) + && better_font_p (specified, fonts + i, best, 1, avgwidth)) + { + best = fonts + i; + + exact_p = exact_face_match_p (specified, best, avgwidth); + if (exact_p) + break; + } /* Unless we found an exact match among non-scalable fonts, see if we can find a better match among scalable fonts. */ @@ -6673,8 +6669,7 @@ for (i = 0; i < nfonts; ++i) if (font_scalable_p (fonts + i)) { - if (best == NULL - || better_font_p (specified, fonts + i, best, 0, 0) + if (better_font_p (specified, fonts + i, best, 0, 0) || (!non_scalable_has_exact_height_p && !better_font_p (specified, best, fonts + i, 0, 0))) { @@ -6702,6 +6697,10 @@ } } + /* We should have found SOME font. */ + if (best == NULL) + abort (); + if (font_scalable_p (best)) font_name = build_scalable_font_name (f, best, pt); else