changeset 91182:bbdb7226d848

(add_font_entity_to_list): Compare only the beginning of full name.
author Jason Rumney <jasonr@gnu.org>
date Tue, 04 Dec 2007 19:45:31 +0000
parents 392369adecec
children 66081cf34e0c
files src/w32font.c
diffstat 1 files changed, 16 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/w32font.c	Tue Dec 04 06:07:44 2007 +0000
+++ b/src/w32font.c	Tue Dec 04 19:45:31 2007 +0000
@@ -117,12 +117,14 @@
 
 /* Handles the problem that EnumFontFamiliesEx will not return all
    style variations if the font name is not specified.  */
-static void list_all_matching_fonts P_ ((struct font_callback_data *match_data));
+static void list_all_matching_fonts P_ ((struct font_callback_data *match));
 
 
 /* MingW headers only define this when _WIN32_WINNT >= 0x0500, but we
    target older versions.  */
+#ifndef GGI_MARK_NONEXISTING_GLYPHS
 #define GGI_MARK_NONEXISTING_GLYPHS 1
+#endif
 
 static int
 memq_no_quit (elt, list)
@@ -503,7 +505,14 @@
    Draw glyphs between FROM and TO of S->char2b at (X Y) pixel
    position of frame F with S->FACE and S->GC.  If WITH_BACKGROUND
    is nonzero, fill the background in advance.  It is assured that
-   WITH_BACKGROUND is zero when (FROM > 0 || TO < S->nchars).  */
+   WITH_BACKGROUND is zero when (FROM > 0 || TO < S->nchars).
+
+   TODO: Currently this assumes that the colors and fonts are already
+   set in the DC. This seems to be true now, but maybe only due to
+   the old font code setting it up. It may be safer to resolve faces
+   and fonts in here and set them explicitly
+*/
+
 static int
 w32font_draw (s, from, to, x, y, with_background)
      struct glyph_string *s;
@@ -972,9 +981,11 @@
       && font_matches_spec (font_type, physical_font,
                             match_data->orig_font_spec)
       /* Avoid Windows substitution so we can control substitution with
-         alternate-fontname-alist.  */
-      && !strnicmp (&logical_font->elfFullName,
-                    &match_data->pattern.lfFaceName, LF_FACESIZE))
+         alternate-fontname-alist.  Full name may have Bold and/or Italic
+         appended, so only compare the beginning of the name.  */
+      && !strnicmp ((char *)&logical_font->elfFullName,
+                    (char *)&match_data->pattern.lfFaceName,
+                    min (strlen(&match_data->pattern.lfFaceName), LF_FACESIZE)))
     {
       Lisp_Object entity
         = w32_enumfont_pattern_entity (match_data->frame, logical_font,