IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

cairo_show_text(), FreeType, T1lib et la police Symbol


Sujet :

GTK+ avec C & C++

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 331
    Par défaut cairo_show_text(), FreeType, T1lib et la police Symbol
    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:
    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");
    Cela se passe en général correctement sauf pour certaines polices comme par exemple Symbol (fichier joins s050000l.pfb).

    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.

    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FT_Select_Charmap (ft_face ,FT_ENCODING_ADOBE_CUSTOM)
    et vérifié que cette deuxième carte est bien celle sélectionnée par FreeType,
    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.
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Macro police et symbole
    Par lovely2604 dans le forum Word
    Réponses: 2
    Dernier message: 12/12/2014, 09h01
  2. Réponses: 2
    Dernier message: 30/09/2014, 08h59
  3. [XL-2003] Associer des symboles à une police
    Par Silencee dans le forum Conception
    Réponses: 4
    Dernier message: 22/03/2013, 11h53
  4. police symbol dans RichEdit
    Par GerardJ dans le forum Débuter
    Réponses: 5
    Dernier message: 28/03/2009, 17h13
  5. Adresse des polices de caractères dans la RAM video ?
    Par Anonymous dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 27/05/2002, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo