--- xc/lib/Xft/xftdpy.c.loadtarget Fri Oct 11 13:53:02 2002 +++ xc/lib/Xft/xftdpy.c Thu Jan 2 17:19:30 2003 @@ -377,6 +377,8 @@ goto bail1; if (!_XftDefaultInitBool (dpy, pat, FC_AUTOHINT)) goto bail1; + if (!_XftDefaultInitInteger (dpy, pat, FC_HINT_STYLE)) + goto bail1; if (!_XftDefaultInitBool (dpy, pat, FC_HINTING)) goto bail1; if (!_XftDefaultInitBool (dpy, pat, FC_MINSPACE)) @@ -473,6 +475,12 @@ XftDefaultGetBool (dpy, FC_HINTING, screen, True)); } + if (FcPatternGet (pattern, FC_HINT_STYLE, 0, &v) == FcResultNoMatch) + { + FcPatternAddInteger (pattern, FC_HINT_STYLE, + XftDefaultGetInteger (dpy, FC_HINT_STYLE, screen, + True)); + } if (FcPatternGet (pattern, FC_AUTOHINT, 0, &v) == FcResultNoMatch) { FcPatternAddBool (pattern, FC_AUTOHINT, --- xc/lib/Xft/xftfreetype.c.loadtarget Fri Oct 11 13:53:02 2002 +++ xc/lib/Xft/xftfreetype.c Thu Jan 2 17:19:30 2003 @@ -326,6 +326,7 @@ double aspect; FcMatrix *font_matrix; FcBool hinting, vertical_layout, autohint, global_advance; + int hint_style; FcChar32 hash, *hashp; FT_Face face; int nhash; @@ -466,8 +467,43 @@ goto bail1; } - if (!hinting) + switch (FcPatternGetInteger (pattern, FC_HINT_STYLE, 0, &hint_style)) { + case FcResultNoMatch: + hint_style = FC_HINT_FULL; + break; + case FcResultMatch: + break; + default: + goto bail1; + } + + if (!hinting || hint_style == FC_HINT_NONE) fi->load_flags |= FT_LOAD_NO_HINTING; + + /* Figure out the TARGET */ + if (fi->antialias) + { + switch (hint_style) { + case FC_HINT_SLIGHT: + case FC_HINT_MEDIUM: + fi->load_flags |= FT_LOAD_TARGET_LIGHT; + break; + default: + switch (fi->rgba) { + case FC_RGBA_RGB: + case FC_RGBA_BGR: + fi->load_flags |= FT_LOAD_TARGET_LCD; + break; + case FC_RGBA_VRGB: + case FC_RGBA_VBGR: + fi->load_flags |= FT_LOAD_TARGET_LCD_V; + break; + } + break; + } + } + else + fi->load_flags |= FT_LOAD_TARGET_MONO; /* set vertical layout if requested */ switch (FcPatternGetBool (pattern, FC_VERTICAL_LAYOUT, 0, &vertical_layout)) {