setTextSerif()
Choisit avec ou sans empattements (serif).
Exemples d'utilisation
setTextSerif(NORMAL); // Supprime les empattements pour les fonctions text() qui suivent setTextSerif(SERIF); // Dessine les empattements pour les fonctions text() qui suivent
Référence
void setTextSerif(boolean serif);
Paramètre passé
serif: SERIF (true) = présence d'empattements, NORMAL (false) = absence d'empattement
Valeur retournée
Aucune
Voir aussi
- SERIF Pour le passage au mode avec empattements
- NORMAL Pour le passage au mode sans empattements
- b=getTextSerif(); Retourne SERIF ou NORMAL
- textSerif Contient SERIF ou NORMAL
- Fonte vectorielle Définition de la fonte utilisée
- text(); Écrit du texte
- setTextColor(); Couleur du texte
- setTextSize(); Taille des caractères
- setTextBold(); Gras ou normal
- setTextItalic(); Italique ou normal
- setTextOrient(); Direction d'écriture des textes
Notes
Les empattements (serif en anglais) sont des petites droites qui sont rajoutées à certaines extrémités
des caractères, en rouge sur l'image de droite. Dans la fonte de PxGraph, si serif=NORMAL, il n'y a pas
d'empattement, mais si serif=SERIF on va trouver des petits traits horizontaux sur certaines droites verticales. Par défaut serif=SERIF.
Les empattement ont une longueur de taille/2 pixels et les caractères de taille 1 n'ont pas la place de dessiner ces empattements. Les caractères de taille 2 vont avoir des empattements de longueur 1 pixel ce qui peut se dessiner. Sur page de description de la fonte vectorielle, les empattement apparaissent en vert
A l'initialisation, le mode est SERIF. Le changement de mode se fait par la fonction setTextSerif().
Exemple
// Ce programme affiche les caractères principaux en rouge et dessine les empattement possibles en jaune. Pour ce faire, on dessine
// en jaune le caractère avec empattement et on dessine par dessus en rouge le caractère sans empattement. Comme les caractères avec
// ou sans empattements n'ont pas forcément la même taille, et donc doivent se décaler pour se superposer, on mémorise ceux qui
// s'élargissent (tableau "large[]")
#include <PxGraph_ST7781_Shield.h> // Voir http://arduino.dansetrad.fr/PxGraph
int large['z'+1]; // 5 si le caractère correspondant est plus large en sérif que sans
int largeur; // Du caractère analysé
char caractere; // Pour dessiner
void setup()
{
setGraphMode(PAYSAGE); // Initialisation générale
setTextSize(10); // Pour mieux voir
// Initialisation du tableau large
setTextColor(BLACK); // Pour ne pas voir l'initialisation
for (caractere='!'; caractere<='z'; caractere++) // Pour chaque caractère imprimable et codé sur un seul octet
{
setTextCursor(10,10); setTextSerif(NORMAL); text(String(caractere)); // Dessin du caractère sans empattement non affiché (noir sur fond noir)
largeur=getTextCursorX(); // Pour pouvoir comparer avec celle si il y empattements
setTextCursor(10,10); setTextSerif(SERIF); text(String(caractere)); // Dessin du caractère avec empattement non affiché (noir sur fond noir)
large[byte(caractere)]=((getTextCursorX()>largeur)? 5: 0); // large contient des 5 pour les caractères qui s'élargissent avec empattements
}
large['G']=0; large['a']=0; large['d']=0; large['q']=0; large['&']=0; // Caractères qui ne s'élargissent pas à gauche, mais seulement à droite
}
void loop()
{
if (++caractere>'z') caractere='!'; // Choix du caractère: caractère suivant et bouclage
setTextCursor(20,10); setTextSerif(SERIF); setTextColor(YELLOW); text(String(caractere)); // Empattements en jaune (le reste disparaît)
setTextCursor(20+large[byte(caractere)],10); setTextSerif(NORMAL); setTextColor(RED); text(String(caractere)); // Surimpression pour mettre en rouge le caractère
delay(1000);
fillRect(0,0,95,95,BLACK); // Efface l'écran, enfin ce qui est utile
}
Résultat:
Côté technique
Dans la fonte, pour les droites, deux bits ont été pris pour les empattements des droites verticales (y a-t-il un empattement en haut? en bas?) plus deux bits indiquant si, du fait de ces empattements, la largeur du caractère augmente ou pas. Si je voulais des empattements pour les droites horizontales if faudrait préciser si il y a empattement ou pas et si le trait est vers le haut ou vers le bas. Pour la fin d'un arc de cercle, il faudrait pour chaque extrémité, indiquer la direction. C'est pour cela que je n'ai défini que les empattements des segments verticaux.
Si il y a un empattement en haut d'une droite, ce sera vers la gauche. Si c'est en bas, ce sera des deux côtés.