Je dois placer du texte dans une gtk_drawing_area mais je n'arrive pas à être précis.
J'ai dessiné un carré et je dois réussir à placer un chiffre à l'intérieur. Le chiffre doit être le plus grand possible mais sans sortir de la case. Il doit aussi être centré.
Comme je n'ai pas trouvé, une fonction permettant de spécifier directement la hauteur en pixel du chiffre que je souhaite écrire, je détermine au démarrage du programme la hauteur obtenue en pixels pour les tailles de 1 à 100 !
calque=gtk_widget_create_pango_layout(donnees->zone_de_dessin, "9" );
description_police=pango_font_description_new();
pango_font_description_set_weight(description_police,PANGO_WEIGHT_BOLD);
for (i=0;i<NB_TAILLES_MAX;i++)
{
pango_font_description_set_size(description_police,i*PANGO_SCALE);
pango_layout_set_font_description(calque, description_police); pango_layout_get_pixel_size(calque, &largeur, &hauteur);
if (largeur > hauteur) donnees->tailles_en_pixel[i]=largeur;
else donnees->tailles_en_pixel[i]=hauteur;
}
pango_font_description_free(description_police);
g_object_unref(calque); |
Ensuite en fonction de la taille en pixels que j'obtiens et aussi en fonction de la taille de ma case je choisi la bonne taille à utiliser lors de l'appel de la fonction pango_font_description_set_size.
Enfin pour centrer le chiffre, je fais appel à la fonction pango_layout_get_pixel_size pour obtenir les dimensions réelles de mon chiffre afin de le centrer parfaitement. Je constate qu'il y a malgré tout un décalage de 20% environ en hauteur et de 10% en largeur.
Il est indiqué, qu'il faut utiliser une matrice de transfomation pour placer correctement les chiffres mais ça ne fonctionne pas non plus. J'ai simplement utilisé la matrice de base sans en modifier le contenu.
Est-ce qu'il existe une méthode plus simple pour faire ce genre de chose parce que c'est quand même bien chiant et en plus ça ne mache pas !
Message édité par darkoli le 24-04-2006 à 19:17:37
---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html