[vdr] [ANNOUNCE] VDR developer version 1.5.3

Anssi Hannula anssi.hannula at gmail.com
Fri Jun 15 18:07:43 CEST 2007


Klaus Schmidinger wrote:
> On 06/10/07 17:53, Anssi Hannula wrote:
>> ...
>> Alternatively, you could use the fontconfig library [1] for managing 
>> fonts. This would also allow using using the system default fonts via 
>> aliases like 'sans-serif' etc, and using a font list instead of having 
>> to manually write the font filename via OSD.
>>
>> You can get a quick idea from looking at the patch which added 
>> fontconfig support for mplayer [2], though of course you should look in 
>> fontconfig documentation instead of copying conventions from mplayer :)
>>
>> [1] http://fontconfig.org/
>> [2] 
>> http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2003-November/022218.html
> 
> When I do
> 
>      const char *font_name = "sans-serif";
>      FcInit();
>      FcPattern *fc_pattern = FcNameParse((FcChar8 *)font_name);

While fontconfig is usually configured to ignore bitmap fonts anyway, I 
think you should enforce that by putting this call here:
FcPatternAddBool(fc_pattern, FC_SCALABLE, FcTrue);

>      FcConfigSubstitute(0, fc_pattern, FcMatchPattern);
>      FcDefaultSubstitute(fc_pattern);
>      fc_pattern = FcFontMatch(0, fc_pattern, 0);
>      FcChar8 *s;
>      FcPatternGetString(fc_pattern, FC_FILE, 0, &s);
>      fprintf(stderr, "font '%s'\n", s);//XXX
>      free(fc_pattern);

Use FcPatternDestroy(fc_pattern) instead, using free() here causes an 
error for me.

>      FcFini();
> 
> it prints
> 
>   font '/usr/share/fonts/truetype/arial.ttf'
> 
> which looks good. However, when I use "courier" instead of "sans-serif", I get
> 
>   font '/usr/share/fonts/URW/n022003l.pfb'
> 
> which is not a truetype font and therefore can't be used with VDR's font rendering.

Hmm... AFAIK it is scalable and freetype can use it. Or is there some 
another restriction regarding VDR font rendering?

> 
> Is there a way to make fontconfig only return truetype fonts?
> 
> 
> Also: is there a way to get a list of available truetype fonts from
> fontconfig? That's what would be needed to allow the user to select
> a desired font in VDR's Setup/OSD menu.

Gathering from 
http://www.xemacs.org/Documentation/packages/html/fontconfig_3.html , it 
can be done with something like this:

// what info is requested:
FcObjectSet *os  = FcObjectSetBuild(FC_FAMILY, NULL);
// what fonts are requested:
FcPattern   *pat = FcPatternBuild(NULL, FC_SCALABLE, FcTypeBool, FcTrue, 
NULL);
FcFontSet* fontset = FcFontList(0, pat, os);
FcObjectSetDestroy(os);
FcPatternDestroy(pat);
         for (int i = 0; i < fontset->nfont ; i++) {
                 FcChar8 *t;
                 FcPatternGetString(fontset->fonts[i], FC_FAMILY, 0, &t);
                 fprintf(stderr, "font '%s'\n", t);
         }
FcFontSetDestroy(fontset);

Note that I am only googling this info, I don't really know about 
fontconfig myself ;)

-- 
Anssi Hannula



More information about the vdr mailing list