getTextWidth()
Retourne la largeur de l'écriture de la chaîne passée
Exemples d'utilisation
// Centre chaîne au milieu de l'écran: setTextCursor(DEMI_LARGEUR-getTextWidth(chaine)/2,DEMI_HAUTEUR-getTextHeight(chaine)/2); text(chaine); // Diminue la taille de la police pour que chaîne tienne dans les 100 pixels: while (getTextWidth(chaine)>100) setTextSize(getTextSize()-1);
Référence
int getTextWidth(String chaine);
Paramètre passé
chaine: String dont on veut connaître l'espace occupé par son écriture
Valeur retournée
Largeur de l'écriture de la chaîne passée
Voir aussi
- getTextHeight(); Retourne la hauteur de l'écriture de la chaîne passée
- Fonte vectorielle Définition de la fonte utilisée
- text(); Écrit du texte
- MAX_X, MAX_Y...: Valeurs des coordonnés graphiques
- setTextColor(); Couleur du texte
- setTextSize(); Taille des caractères
- setTextBold(); Gras ou normal
- setTextItalic(); Italique ou normal
- setTextSerif(); Avec ou sans empattement
- setTextOrient(); Direction d'écriture des textes
- setTextKeep(); Choisit l'action si le texte déborde
- setTextCursor(); Coordonnés le point-curseur
Notes
Si l'on veut pouvoir center une phrase, on a besoin de connaître l'encombrement de son écriture. Cette fonction nous donne la largeur.
Comme la taille de l'écriture dépend des attributs (taille, gras, italique, empattements), il faut choisir ces attributs avant l'appel à la fonction.
Exemple
PecheuxGraph_ILI9341_8bits.zip\PecheuxGraph_ILI9341_8bits\examples\Documentation\Exemple-312-getTextWidth\Exemple-312-getTextWidth.ino (dans votre fichier téléchargé):
// Ce programme invente un mot et l'écrit centré sur l'écran avec différents attributs
// Pour le centrer, il faut connaître sa taille avant
#
$menu = ":PG";
include <PecheuxGraph_ILI9341_8bits.h>
void setup()
{
setGraphMode(PAYSAGE); // Initialisation générale
}
byte n;
String chaine; // Des caractères à écrire
void loop()
{
clrscr();
// Attributs quelconques
setTextSize(random(6)+1); // Taille des caractères entre 1 et 10
setTextSerif(random(2)); // Avec ou sans empattements
setTextItalic(random(5)==0?ITALIC:NORMAL); // Italique une fois sur 5
setTextBold(random(3)+1); // Entre 1 et 4 traits
// Mot quelconque
chaine=char(random(26)+'A'); // Première lettre en majuscule
for (int i=random(4)+2; i>0; i--) chaine+=char(random(26)+'a'); // Suit 2 à 5 minuscules
// Ecriture du texte centré
setTextCursor(DEMI_LARGEUR-getTextWidth(chaine)/2,DEMI_HAUTEUR-getTextHeight(chaine)/2); text(chaine);
delay(1000);
}
Résultat:

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.