getTextWidth, getTextHeight

Définition Utilisation Exemple Côté technique
 

La fonction getTextWidth() fonctionne mal avec les italiques. Par exemple voyons le caractère 'o' qui occupe toute la largeur de sa matrice de définition, soit 5 colonnes. Si on passe en italique, la matrice s'incline, le haut vers la droite. La largeur de la matrice inclinée va augmenter, ce qui va du coup augmenter aussi le retour de getTextWidth(), mais le o reste de la même taille. Il n'occupe pas le bas de la matrice plus à gauche, ni le haut plus à droite. Pour corriger ce problème, il faudrait que la définition des caractères donne en plus de la largeur en mode droit, la largeur en plus si il est le premier de la chaîne, et la largeur en plus si il est le dernier. Cela ne vaut pas le coup, d'autant plus que le mode italique est un peu bâtard.

Pour une chaîne donnée, la différence de position du curseur avant et après son écriture, est égale à ce que retourne getTextWidth() augmenté de l'espace inter-caractère vallant getTextSize().

Notez aussi que les caractères virgule et point-virgule dépassent vers la gauche de la matrice, mais ce n'est pas compté dans la largeur du caractère, et donc ignoré par textWIdth(). Mais normalement, une phrase ne commence pas par ces caractères.

Pour la fonction getTextWidth(), il y a des choix à faire. Si on veut la hauteur réelle de la chaîne, que doit-on retourner si la chaîne est "-". En toute rigueur, c'est 1 pixel en taille 1. Mais est-bien utile de donner cette valeur réelle, ou la taille de la matrice ne serait-elle pas mieux? Si on veut donner la taille réelle, rien dans la matrice ne nous permet de le savoir, sinon a examiner chacun des vecteurs. En fait la seule solution est d'avoir un table supplémentaire qui contiendrait la première et la dernière ligne de la matrice utilisée. Cette table utiliserait 125 octets supplémentaires. Pour avoir la taille réelle, il faut calculer la ligne la plus haute et la ligne la plus basse de tous les caractères. Le jeu n'en vaut pas la chandelle. C'est pour cela que la fonction retourne la taille de la matrice.