Module: wine Branch: master Commit: 7329144c5845089de67dbe1e91165491e5f8f045 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7329144c5845089de67dbe1e91...
Author: Huw Davies huw@codeweavers.com Date: Tue Dec 19 21:21:27 2006 +0000
gdi32: Improve the fontconfig filtering hack so that Mac suitcase fonts get through.
---
dlls/gdi32/freetype.c | 18 +++++++++++++++--- 1 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index 9344515..86d3455 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -155,6 +155,7 @@ MAKE_FUNCPTR(FcObjectSetCreate); MAKE_FUNCPTR(FcObjectSetDestroy); MAKE_FUNCPTR(FcPatternCreate); MAKE_FUNCPTR(FcPatternDestroy); +MAKE_FUNCPTR(FcPatternGetBool); MAKE_FUNCPTR(FcPatternGetString); #ifndef SONAME_LIBFONTCONFIG #define SONAME_LIBFONTCONFIG "libfontconfig.so" @@ -1221,6 +1222,7 @@ LOAD_FUNCPTR(FcObjectSetCreate); LOAD_FUNCPTR(FcObjectSetDestroy); LOAD_FUNCPTR(FcPatternCreate); LOAD_FUNCPTR(FcPatternDestroy); +LOAD_FUNCPTR(FcPatternGetBool); LOAD_FUNCPTR(FcPatternGetString); #undef LOAD_FUNCPTR
@@ -1230,20 +1232,30 @@ LOAD_FUNCPTR(FcPatternGetString); pat = pFcPatternCreate(); os = pFcObjectSetCreate(); pFcObjectSetAdd(os, FC_FILE); + pFcObjectSetAdd(os, FC_SCALABLE); fontset = pFcFontList(config, pat, os); if(!fontset) return; for(i = 0; i < fontset->nfont; i++) { + FcBool scalable; + if(pFcPatternGetString(fontset->fonts[i], FC_FILE, 0, (FcChar8**)&file) != FcResultMatch) continue; TRACE("fontconfig: %s\n", file);
/* We're just interested in OT/TT fonts for now, so this hack just - picks up the standard extensions to save time loading every other - font */ + picks up the scalable fonts without extensions .pf[ab] to save time + loading every other font */ + + if(pFcPatternGetBool(fontset->fonts[i], FC_SCALABLE, 0, &scalable) == FcResultMatch && !scalable) + { + TRACE("not scalable\n"); + continue; + } + len = strlen( file ); if(len < 4) continue; ext = &file[ len - 3 ]; - if(!strcasecmp(ext, "ttf") || !strcasecmp(ext, "ttc") || !strcasecmp(ext, "otf")) + if(strcasecmp(ext, "pfa") && strcasecmp(ext, "pfb")) AddFontFileToList(file, NULL, ADDFONT_EXTERNAL_FONT); } pFcFontSetDestroy(fontset);