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.