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

  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

  2. #2
    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 Correctif
    Le fichier Makefile a �t� corrompu lors de la confection du fichier attach� ci-dessus. Je post donc un exemple de Makefile utilisable:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    PROGRAM       = a.out
     
     
    CC=gcc
     
    CFLAGS =-g -Wall `pkg-config --cflags  gtk+-3.0` -I/usr/include/freetype2
    LIBS = `pkg-config --libs gtk+-3.0` -lfreetype -lm
     
    SRCS = main.c
     
    OBJS = main.o
     
    ####################################################
     
    all:		$(PROGRAM)
     
    $(PROGRAM):     $(OBJS)
    		@echo "Linking $(PROGRAM) ..."
    		$(CC) -o $(PROGRAM)  $(LDFLAGS) $(OBJS) $(LIBS)
    		@echo "done"
     
     
    clean:
    	/bin/rm -f *.o *~ core
     
    propre:
    	rm -f *~  *.o core TAGS $(PROGRAM)

  3. #3
    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 FontForge et g_convert()
    J'ai pos�e ma question sur la liste de diffusion de Cairo sans plus de succ�s qu'ici, donc je me suis orient� vers une autre m�thode: modifier la police utilis�e.

    Le codage de la police initiale est d'abord forc� au format ISO-8859-1 en utilisant FontForge, ce qui permet d'obtenir l'affichage de la partie basse (code < 128) sans probl�me.

    Dans Grace, la cha�ne de la partie haute (128 < code < 256) est obtenue en translatant la cha�ne de test de la partie basse. Pour obtenir un affichage correspondant � celui obtenu avec la T1lib, il faut convertir la cha�ne en UTF-8 avec g_convert().
    Je joins le programme de test amend�.

    Je pense que �a marche car cairo_show_text() travaille alors en UTF-8, mais je suis loin de bien comprendre toutes les subtilit�s de ces histoires d'encodage.
    Fichiers attach�s Fichiers attach�s

  4. #4
    Mod�rateur

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par d�faut
    Je n'ai pas de r�ponse � ton probl�me, mais voici un post qui parle des �volutions de la stack de gestion des fontes via Pango, et qui pourrait t'int�resser tout de m�me:
    https://blogs.gnome.org/mclasen/2019...re-directions/

    Le passage "stop using freetype" peut �ventuellement t'int�resser ?

  5. #5
    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
    Excusez-moi pour ma r�ponse tardive.

    Merci pour le lien.
    Cela me conforte dans l'id�e de continuer � inclure dans la distribution de GraceGTK une version de la T1lib qui n'est pas bien encombrante: au moins ces polices continuerons de fonctionner quoiqu'il arrive

+ 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