Bonjour,
Voici un problème que mes faibles connaissances en la matière ne me permettent pas de résoudre.
Grace et GraceGTK utilisent la bibliothèque T1lib pour transformer des polices de caractères en glyphes tracés sur le dessin sous forme de bitmaps.
J'essaye de moderniser GraceGTK et d'utiliser la fonction cairo_show_text(), ce qui implique l'emploi de FreeType2 au lieu de T1lib, mais je souhaite garder les mêmes fichiers de définition des polices.
Le schéma est le suivant:
Cela se passe en général correctement sauf pour certaines polices comme par exemple Symbol (fichier joins s050000l.pfb).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 FT_Face ft_face; error = FT_New_Face (library ,"s050000l.pfb" ,0 ,&ft_face); ... cairo_font_face_t *cr_face; cr_face = cairo_ft_font_face_create_for_ft_face (*ft_face ,CAIRO_HINT_METRICS_DEFAULT); cairo_set_font_face (cr ,cr_face); ... cairo_show_text (cr ,"the_string");
Quand on regarde le contenu de ce fichier on voit par exemple la ligne
dans ce qui ressemble fort au vecteur d'encodage décrit dans la doc de T1lib.
Code : Sélectionner tout - Visualiser dans une fenêtre à part dup 97 /alpha put
Avec T1lib le caractère a (ASCII 97) est bien dessiné comme attendu: la lettre grecque alpha.
Ce n'est pas le cas avec cairo_show_text(): rien de visible n'est affiché.
En poussant plus avant, j'ai constaté que ft_face->num_charmaps == 2, donc qu'il existe deux cartes, la première étant Unicode comme indiqué dans la doc de FT_CharMap.
J'ai donc rajouté une ligne
et vérifié que cette deuxième carte est bien celle sélectionnée par FreeType,
Code : Sélectionner tout - Visualiser dans une fenêtre à part FT_Select_Charmap (ft_face ,FT_ENCODING_ADOBE_CUSTOM)
mais les caractères ne sont toujours pas dessinés comme souhaités.
On voit que:
printf ("Char_Index = %d\n" ,FT_Get_Char_Index (*ft_face ,97));
=> imprime 65 (= 97 - 32), ce qi ne correspond pas au /alpha de la carte de la T1lib.
Remarque: les autres FT_ENCODING_ADOBE_xxx donnent des erreurs.
Remarque: je ne souhaite pas utiliser Pango car Grace utilise son propre système de séquences d'échappement pour faire des indice, exposants,... et que je veux maintenir une compatibilité ascendante.
Je joins un petit programme de démonstration avec 2 polices (Roman et Symbol).
Toute aide sera la bienvenue.
Partager