Il faut reconnaître que ça peut être utile, pour afficher un score par exemple (on ne va pas s'amuser a faire une image par caractère, quoique certain le font).
Pour cela nous utiliserons SDL_ttf dont voici l'include :
1
|
#include <SDL/SDL_ttf.h>
|
Pour utiliser cette librairie il faut la démarrée et l'arrêter (comme SDL) avec :
Pour vérifier une éventuelle erreur d'initialisation vous pouvez faire :
1
2
3
4
|
if(TTF_Init() == -1){
fprintf(stderr, "Erreur d'initialisation de TTF_Init : %s\n", TTF_GetError());
exit(EXIT_FAILURE);
}
|
Pour écrire il nous faut des fontes (.ttf) et deux fonctions pour ouvrir et fermer une fonte :
- TTF_OpenFont
- TTF_CloseFont
La déclaration est :
1
|
TTF_Font* police = NULL;
|
Pour trouver des fontes, deux solutions :
- regarder dans /urs/share/fonts/
- sur internet : Google font ou dafont.com
On ouvre une fonts avec :
1
|
TTF_Font *TTF_OpenFont(const char *file, int ptsize);
|
- file : nom du fichier .ttf à ouvrir
- ptsize : taille de la police
Exemple :
1
2
|
TTF_Font* police = NULL;
police = TTF_OpenFont("times.ttf", 12);
|
On ouvre times.ttf avec une taille de 12 pixels.
Puis on ferme la police (avant TTF_Quit()) :
Il y a trois manières d'écrire du texte :
- Solid : très rapide, mais relativement moche.
- Shaded : moins rapide, lettre plus lisses mais que sur font unit (pas de transparence).
- Blended : lent, mais les lettres sont lisses et peuvent être mise sur un font transparent.
Pour écrire il faut générer une SDL_Surface* avec le texte :
1
2
3
|
SDL_Surface *TTF_RenderText_Solid(TTF_Font *font, const char *text, SDL_Color fg);
SDL_Surface *TTF_RenderText_Shaded(TTF_Font *font, const char *text, SDL_Color fg, SDL_Color fond);
SDL_Surface *TTF_RenderText_Blended(TTF_Font *font, const char *text, SDL_Color fg);
|
Exemple :
1
2
3
4
5
6
7
8
9
10
11
12
13
|
TTF_Init();
TTF_Font* font = NULL;
font = TTF_OpenFont("times.ttf", 12);
if(font != O){
SDL_Color noir = {0, 0, 0}; SDL_Surface* texte = TTF_RenderText_Blended(font, "coucou", 80) ;
SDL_FreeSurface(texte); TTF_CloseFont(font);
}else{cout << "foirage à l'ouverture de times.ttf" << endl;}
TTF_Quit();
|
Bien sur il faut avoir les fontes dans son projet.
On peut aussi décorer le texte (mettre en gras, souligner...) avec :
- font : la police que vous voulez décorer
- style : le style de décoration.
Le style de décoration comprend plusieurs types :
- TTF_STYLE_NORMAL : texte normal (par défaut)
- TTF_STYLE_BOLD : gras
- TTF_STYLE_ITALIC : italique
- TTF_STYLE_UNDERLINE : souligné
- TTF_STYLE_STRIKETHROUGH : j'en sais rien mais ça existe
Exemple :
1
2
3
4
5
6
|
TTF_Font* police = TTF_OpenFont("times.ttf", 65);
TTF_SetFontStyle(police, TTF_STYLE_ITALIC | TTF_STYLE_UNDERLINE);
SDL_Surface* texte = TTF_RenderText_Blended(police, "Coucou .", couleurNoire);
|
Nous nous en servirons dans un exemple.
|