[vdr] [ANNOUNCE] VDR developer version 1.5.3

Klaus Schmidinger Klaus.Schmidinger at cadsoft.de
Fri Jun 15 18:32:45 CEST 2007


On 06/15/07 18:07, Anssi Hannula wrote:
> 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);

Thanks.

>>      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?

Well, I was wrong here. I assumed that Freetype could only handle *.ttf
files, but I've explicitly tried /usr/share/fonts/URW/n022003l.pfb now
and it works just fine.

>> 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);

Thanks, I'll give this a shot.

Klaus



More information about the vdr mailing list