490 lines
18 KiB
C
490 lines
18 KiB
C
/*
|
|
* This file is part of the MLV Library.
|
|
*
|
|
* Copyright (C) 2010,2011,2012 Adrien Boussicault, Marc Zipstein
|
|
*
|
|
*
|
|
* This Library is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This Library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this Library. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/** \~french
|
|
* \file MLV_text.h
|
|
*
|
|
* \author Adrien Boussicault
|
|
* \author Marc Zipstein
|
|
*
|
|
* \brief Ce fichier définit les différents prototypes des fonctions permmettant
|
|
* d'afficher du texte et des boîtes de dialogues.
|
|
*/
|
|
|
|
#ifndef __MLV__MLV_TEXT_H__
|
|
#define __MLV__MLV_TEXT_H__
|
|
|
|
#include "MLV_color.h"
|
|
#include "MLV_image.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** \~french
|
|
* \brief Énumère les différents types de justification du texte.
|
|
*/
|
|
typedef enum {
|
|
MLV_TEXT_CENTER, /**< \~french Le texte est justifié au centre. */
|
|
MLV_TEXT_LEFT, /**< \~french Le texte est justifié sur la gauche. */
|
|
MLV_TEXT_RIGHT /**< \~french Le texte est justifié sur la doite. */
|
|
} MLV_Text_justification;
|
|
|
|
/** \~french
|
|
* \brief Énumère les différents types de position horizontale du texte dans une boîte.
|
|
*/
|
|
typedef enum {
|
|
MLV_HORIZONTAL_CENTER, /**< \~french Le texte est centrée horizontalement
|
|
* dans la boîte. */
|
|
MLV_HORIZONTAL_LEFT, /**< \~french Le texte est positioné sur la droite de
|
|
* la boîte. */
|
|
MLV_HORIZONTAL_RIGHT /**< \~french Le texte est positioné sur la gauche de
|
|
* la boîte. */
|
|
} MLV_Horizontal_position;
|
|
|
|
/** \~french
|
|
* \brief Énumère les différents types de positions verticales du texte dans une boîte.
|
|
*/
|
|
typedef enum {
|
|
MLV_VERTICAL_CENTER, /**< \~french Le texte est centré horizonatalement
|
|
* dans la boîte. */
|
|
MLV_VERTICAL_TOP, /**< \~french Le texte est positionné en haut de la
|
|
* boîte. */
|
|
MLV_VERTICAL_BOTTOM /**< \~french Le texte est positionné en bas de la
|
|
* boîte. */
|
|
} MLV_Vertical_position;
|
|
|
|
/** \~french
|
|
* Ce type code une fonte de caractères.
|
|
*/
|
|
typedef struct _MLV_Font MLV_Font;
|
|
|
|
/** \~french
|
|
* \brief Cette fonction charge en mémoire une fonte de caractères de standard
|
|
* "TrueType" (fichiers ayant une extension .ttf).
|
|
*
|
|
* La fonte de caractères chargée est configurée avec une taille de fonte
|
|
* donnée en paramètre.
|
|
*
|
|
* \param file_font Le chemin d'accés où se trouve le fichier contenant la
|
|
* fonte de caractères.
|
|
* \param size La taille de la fonte de caractères.
|
|
* \return La structure de donnée MLV contenant la fonte de caractères.
|
|
*/
|
|
MLV_Font* MLV_load_font( const char* file_font, int size );
|
|
|
|
/** \~french
|
|
* \brief Cette fonction libère la mémoire d'une fonte de caractères
|
|
* précédement chargée.
|
|
*
|
|
* \param font L'adresse de la fonte de caractères à libérer.
|
|
*/
|
|
void MLV_free_font( MLV_Font* font );
|
|
|
|
/** \~french
|
|
* \brief Cette fonction calcule la taille du texte qui sera affiché sur
|
|
* l'écran à l'aide de la fonction MLV_draw_text().
|
|
*
|
|
* \param text Le texte qui doit être affiché.
|
|
* \param width La largeur du texte.
|
|
* \param height La hauteur du texte.
|
|
*/
|
|
void MLV_get_size_of_text( const char *text, int *width, int *height, ... );
|
|
|
|
/** \~french
|
|
* \brief Cette fonction calcule la taille du texte qui sera affiché sur
|
|
* l'écran à l'aide de la fonction MLV_draw_text_with_font().
|
|
*
|
|
* \param text Le texte qui doit être affiché.
|
|
* \param width La largeur du texte.
|
|
* \param height La hauteur du texte.
|
|
* \param font La fonte de caractères utilisée pour afficher le texte.
|
|
*/
|
|
void MLV_get_size_of_text_with_font(
|
|
const char *text, int *width, int *height, const MLV_Font* font, ...
|
|
);
|
|
|
|
/** \~french
|
|
* \brief Imprime un texte donné à une position et une couleur données.
|
|
*
|
|
* Le texte est imprimé à l'aide de la fonte de caractères par default de la
|
|
* bibliothèque MLV.
|
|
*
|
|
* \param x Coordonnée en X du coin Nord-Ouest du texte
|
|
* \param y Coordonnée en Y du coin Nord-Ouest du texte
|
|
* \param text texte à afficher
|
|
* \param color couleur du tracé
|
|
*/
|
|
void MLV_draw_text( int x, int y, const char *text, MLV_Color color, ... );
|
|
|
|
/** \~french
|
|
* \brief Écrit du texte sur l'écran en utilisant une couleur et une fonte de
|
|
* caractères données en paramètres.
|
|
*
|
|
* \param x La coordonnée en X du coin Nord-Ouest du texte.
|
|
* \param y La coordonnée en Y du coin Nord-Ouest du texte.
|
|
* \param text Le texte à afficher.
|
|
* \param color La couleur du tracé.
|
|
* \param font La fonte de caractères utilisée pour dessiner le texte.
|
|
*/
|
|
void MLV_draw_text_with_font(
|
|
int x, int y, const char *text, const MLV_Font* font, MLV_Color color, ...
|
|
);
|
|
|
|
/** \~french
|
|
* \brief Écrit sur une image un texte donné à une position et une couleur
|
|
* données.
|
|
*
|
|
* Le texte est imprimé à l'aide de la fonte de caractères par default de la
|
|
* bibliothèque MLV.
|
|
*
|
|
* \param x La coordonnée en X du coin Nord-Ouest du texte.
|
|
* \param y La coordonnée en Y du coin Nord-Ouest du texte.
|
|
* \param text Le texte à afficher.
|
|
* \param color La couleur du tracé.
|
|
* \param image L'image sur laquel le texte doit être ecrit.
|
|
*/
|
|
void MLV_draw_text_on_image(
|
|
int x, int y, const char *text, MLV_Color color, MLV_Image* image, ...
|
|
);
|
|
|
|
/** \~french
|
|
* \brief Écrit du texte sur une image en utilisant une couleur et une fonte de
|
|
* caractères données en paramètres.
|
|
*
|
|
* \param x La coordonnée en X du coin Nord-Ouest du texte.
|
|
* \param y La coordonnée en Y du coin Nord-Ouest du texte.
|
|
* \param text Le texte à afficher.
|
|
* \param color La couleur du tracé.
|
|
* \param font La fonte de caractères utilisée pour dessiner le texte.
|
|
* \param image L'image sur laquel le texte doit être ecrit.
|
|
*/
|
|
void MLV_draw_text_with_font_on_image(
|
|
int x, int y, const char *text, const MLV_Font* font, MLV_Color color,
|
|
MLV_Image* image, ...
|
|
);
|
|
|
|
/** \~french
|
|
* \brief Dessine une boîte contenant du texte.
|
|
*
|
|
* La taille de la boîte dessinée s'adapte à la
|
|
* taille du texte.
|
|
* Les différentes couleurs de la boîte et du texte,
|
|
* ainsi que la taille de l'interligne du texte sont
|
|
* paramétrables.
|
|
*
|
|
* Il est possible de préciser la justification du texte à l'aide du
|
|
* paramètre "text_justification".
|
|
*
|
|
* \param x La coordonnée en X de la position du coin Nord-Ouest de la boîte.
|
|
* \param y La coordonnée en Y de la position du coin Nord-Ouest de la boîte.
|
|
* \param message Le texte à afficher.
|
|
* \param borderColor La couleur des bordures.
|
|
* \param sizeInterligne La taille de l'interligne.
|
|
* \param textColor La couleur du texte.
|
|
* \param backgroundColor La couleur du fond de la boîte.
|
|
* \param text_justification La justification du texte.
|
|
*/
|
|
void MLV_draw_adapted_text_box(
|
|
int x, int y,
|
|
const char* message,
|
|
int sizeInterligne,
|
|
MLV_Color borderColor, MLV_Color textColor, MLV_Color backgroundColor,
|
|
MLV_Text_justification text_justification, ...
|
|
);
|
|
|
|
/** \~french
|
|
* \brief Même chose que MLV_draw_adapted_text_box() mis à part que le texte est
|
|
* rendu avec une fonte de caractères donnée en paramètre.
|
|
*
|
|
* \param x La coordonnée en X de la position du coin Nord-Ouest de la boîte.
|
|
* \param y La coordonnée en Y de la position du coin Nord-Ouest de la boîte.
|
|
* \param message Le texte à afficher.
|
|
* \param borderColor La couleur des bordures.
|
|
* \param sizeInterligne La taille de l'interligne.
|
|
* \param textColor La couleur du texte.
|
|
* \param backgroundColor La couleur du fond de la boîte.
|
|
* \param text_justification La justification du texte.
|
|
* \param image L'image sur laquel le texte doit être ecrit.
|
|
*/
|
|
void MLV_draw_adapted_text_box_on_image(
|
|
int x, int y,
|
|
const char* message,
|
|
int sizeInterligne,
|
|
MLV_Color borderColor, MLV_Color textColor, MLV_Color backgroundColor,
|
|
MLV_Text_justification text_justification,
|
|
MLV_Image* image, ...
|
|
);
|
|
|
|
/** \~french
|
|
* \brief Cette fonction calcule la taille de la boîte de texte qui serait
|
|
* obtenue si vous utilisez la fonction : MLV_draw_adapted_text_box().
|
|
*
|
|
* \param message Le texte qui sera affiché lorsque vous utiliserez
|
|
* MLV_draw_adapted_text_box().
|
|
* \param sizeInterligne La taille de l'interligne.
|
|
* \param result_width La largeur de la boîte que vous obtiendrez en
|
|
* utilisant MLV_draw_adapted_text_box().
|
|
* \param result_height La hauteur de la boîte que vous obtiendrez en
|
|
* utilisant MLV_draw_adapted_text_box().
|
|
*
|
|
* \return La fonction renvoie la taille de la boîte de texte.
|
|
*/
|
|
int MLV_get_size_of_adapted_text_box(
|
|
const char* message,
|
|
int sizeInterligne,
|
|
int *result_width, int *result_height,
|
|
...
|
|
);
|
|
|
|
/** \~french
|
|
* \brief Même chose que MLV_draw_adapted_text_box() mis à part que le texte est
|
|
* rendu avec une fonte de caractères donnée en paramètre.
|
|
*
|
|
* \param x La coordonnée en X de la position du coin Nord-Ouest de la boîte.
|
|
* \param y La coordonnée en Y de la position du coin Nord-Ouest de la boîte.
|
|
* \param message Le texte à afficher.
|
|
* \param font La fonte de caractères utilisée pour dessiner le texte.
|
|
* \param borderColor La couleur des bordures.
|
|
* \param sizeInterligne La taille de l'interligne.
|
|
* \param textColor La couleur du texte.
|
|
* \param backgroundColor La couleur du fond de la boîte.
|
|
* \param text_justification La justification du texte.
|
|
*/
|
|
void MLV_draw_adapted_text_box_with_font(
|
|
int x, int y,
|
|
const char* message,
|
|
const MLV_Font* font,
|
|
int sizeInterligne,
|
|
MLV_Color borderColor, MLV_Color textColor, MLV_Color backgroundColor,
|
|
MLV_Text_justification text_justification, ...
|
|
);
|
|
|
|
/** \~french
|
|
* \brief Même chose que MLV_draw_adapted_text_box_with_font() mis à part que
|
|
* le texte est rendu sur une image et non directement à l'écran.
|
|
*
|
|
* \param x La coordonnée en X de la position du coin Nord-Ouest de la boîte.
|
|
* \param y La coordonnée en Y de la position du coin Nord-Ouest de la boîte.
|
|
* \param message Le texte à afficher.
|
|
* \param font La fonte de caractères utilisée pour dessiner le texte.
|
|
* \param borderColor La couleur des bordures.
|
|
* \param sizeInterligne Le taille de l'interligne.
|
|
* \param textColor La couleur du texte.
|
|
* \param backgroundColor La couleur du fond de la boîte.
|
|
* \param text_justification La justification du texte.
|
|
* \param image L'image sur laquel le texte doit être ecrit.
|
|
*/
|
|
void MLV_draw_adapted_text_box_with_font_on_image(
|
|
int x, int y,
|
|
const char* message,
|
|
const MLV_Font* font,
|
|
int sizeInterligne,
|
|
MLV_Color borderColor, MLV_Color textColor, MLV_Color backgroundColor,
|
|
MLV_Text_justification text_justification,
|
|
MLV_Image* image, ...
|
|
);
|
|
|
|
|
|
/** \~french
|
|
* \brief Cette fonction calcule la taille de la boîte de texte qui serait
|
|
* obtenue si vous utilisez la fonction :
|
|
* MLV_draw_adapted_text_box_with_font().
|
|
*
|
|
* \param message Le texte qui sera affiché lorsque vous utiliserez
|
|
* MLV_draw_adapted_text_box_with_font().
|
|
* \param font La fonte de caractères utilisée pour dessiner le texte.
|
|
* \param sizeInterligne La taille de l'interligne.
|
|
* \param result_width La largeur de la boîte que vous obtiendrez en utilisant
|
|
* MLV_draw_adapted_text_box_with_font().
|
|
* \param result_height La hauteur de la boîte que vous obtiendrez en utilisant
|
|
* MLV_draw_adapted_text_box_with_font().
|
|
*
|
|
* \return La fonction renvoie la taille de la boîte de texte.
|
|
*/
|
|
int MLV_get_size_of_adapted_text_box_with_font(
|
|
const char* message,
|
|
const MLV_Font* font,
|
|
int sizeInterligne,
|
|
int *result_width, int *result_height,
|
|
...
|
|
);
|
|
|
|
/** \~french
|
|
* \brief Dessine une boîte de taille donnée par l'utilisateur et contenant un
|
|
* texte donné par l'utilisateur.
|
|
*
|
|
* Le texte est déssiné à l'interieur d'une boîte. Le texte est imprimé sur
|
|
* plusieurs lignes en respectant les retours à la ligne présents dans le texte.
|
|
*
|
|
* Les différentes couleurs de la boîte et du texte, ainsi que la taille de
|
|
* l'interligne du texte sont paramétrables.
|
|
*
|
|
* Il est possible de préciser la justification du texte contenu dans la boîte.
|
|
*
|
|
* De même , il est possible de préciser la position du texte à l'intérieur de
|
|
* la boîte.
|
|
*
|
|
* Cette fonction ne remet pas en forme le texte. Cela veux dire que si le texte
|
|
* est trop grand, alors il dépassera de la boîte et les parties qui depassent
|
|
* ne seront pas affichées.
|
|
*
|
|
* \param x La coordonnée en X de la position du coin Nord-Ouest de la boîte.
|
|
* \param y La coordonnée en Y de la position du coin Nord-Ouest de la boîte.
|
|
* \param width La largeur de la boîte.
|
|
* \param height La hauteur de la boîte.
|
|
* \param message Le texte à afficher.
|
|
* \param sizeInterligne La taille de l'interligne.
|
|
* \param borderColor La couleur des bordures.
|
|
* \param textColor La couleur du texte.
|
|
* \param backgroundColor La couleur du fond de la boîte.
|
|
* \param text_justification La justification du texte.
|
|
* \param horizontal_position La position horizontale du texte dans la boîte.
|
|
* \param vertical_position La position verticale du texte dans la boîte.
|
|
*/
|
|
void MLV_draw_text_box(
|
|
int x, int y,
|
|
int width, int height,
|
|
const char* message ,
|
|
int sizeInterligne,
|
|
MLV_Color borderColor, MLV_Color textColor, MLV_Color backgroundColor,
|
|
MLV_Text_justification text_justification,
|
|
MLV_Horizontal_position horizontal_position,
|
|
MLV_Vertical_position vertical_position,
|
|
...
|
|
);
|
|
|
|
/** \~french
|
|
* \brief Même chose que MLV_draw_text_box() mis à part que le texte n'est pas
|
|
* écrit directement sur l'écran, mais sur une image à la place.
|
|
*
|
|
* \param x La coordonnée en X de la position du coin Nord-Ouest de la boîte.
|
|
* \param y La coordonnée en Y de la position du coin Nord-Ouest de la boîte.
|
|
* \param width La largeur de la boîte.
|
|
* \param height La hauteur de la boîte.
|
|
* \param message Le texte à afficher.
|
|
* \param sizeInterligne La taille de l'interligne.
|
|
* \param borderColor La couleur des bordures.
|
|
* \param textColor La couleur du texte.
|
|
* \param backgroundColor La couleur du fond de la boîte.
|
|
* \param text_justification La justification du texte.
|
|
* \param horizontal_position La position horizontale du texte dans la boîte.
|
|
* \param vertical_position La position verticale du texte dans la boîte.
|
|
* \param image L'image sur laquel le texte doit être ecrit.
|
|
*/
|
|
void MLV_draw_text_box_on_image(
|
|
int x, int y,
|
|
int width, int height,
|
|
const char* message ,
|
|
int sizeInterligne,
|
|
MLV_Color borderColor, MLV_Color textColor, MLV_Color backgroundColor,
|
|
MLV_Text_justification text_justification,
|
|
MLV_Horizontal_position horizontal_position,
|
|
MLV_Vertical_position vertical_position,
|
|
MLV_Image* image,
|
|
...
|
|
);
|
|
|
|
/** \~french
|
|
* \brief Même chose que la fonction MLV_draw_text_box() mis à part que le texte
|
|
* est rendu avec une fonte de caractères donnée en paramètre par
|
|
* l'utilisateur.
|
|
*
|
|
* \param x La coordonnée en X de la position du coin Nord-Ouest de la boîte.
|
|
* \param y La coordonnée en Y de la position du coin Nord-Ouest de la boîte.
|
|
* \param width La largeur de la boîte.
|
|
* \param height La hauteur de la boîte.
|
|
* \param message Le texte à afficher.
|
|
* \param font La fonte de caractères utilisée pour dessiner le texte.
|
|
* \param sizeInterligne La taille de l'interligne.
|
|
* \param borderColor La couleur des bordures.
|
|
* \param textColor La couleur du texte.
|
|
* \param backgroundColor La couleur du fond de la boîte.
|
|
* \param text_justification La justification du texte.
|
|
* \param horizontal_position La position horizontale du texte dans la boîte.
|
|
* \param vertical_position La position verticale du texte dans la boîte.
|
|
*/
|
|
void MLV_draw_text_box_with_font(
|
|
int x, int y,
|
|
int width, int height,
|
|
const char* message ,
|
|
const MLV_Font* font,
|
|
int sizeInterligne,
|
|
MLV_Color borderColor, MLV_Color textColor, MLV_Color backgroundColor,
|
|
MLV_Text_justification text_justification,
|
|
MLV_Horizontal_position horizontal_position,
|
|
MLV_Vertical_position vertical_position,
|
|
...
|
|
);
|
|
|
|
/** \~french
|
|
* \brief Même chose que la fonction MLV_draw_text_box_with_font() mis à part que
|
|
* le texte n'est pas dessinné directement sur l'ecran, mais sur une
|
|
* une image.
|
|
*
|
|
* \param x La coordonnée en X de la position du coin Nord-Ouest de la boîte.
|
|
* \param y La coordonnée en Y de la position du coin Nord-Ouest de la boîte.
|
|
* \param width La largeur de la boîte.
|
|
* \param height La hauteur de la boîte.
|
|
* \param message Le texte à afficher.
|
|
* \param font La fonte caractères utilisée pour dessiner le texte.
|
|
* \param sizeInterligne La taille de l'interligne.
|
|
* \param borderColor La couleur des bordures.
|
|
* \param textColor La couleur du texte.
|
|
* \param backgroundColor La couleur du fond de la boîte.
|
|
* \param text_justification La justification du texte.
|
|
* \param horizontal_position La position horizontale du texte dans la boîte.
|
|
* \param vertical_position La position verticale du texte dans la boîte.
|
|
* \param image L'image sur laquel le texte doit être ecrit.
|
|
*/
|
|
void MLV_draw_text_box_with_font_on_image(
|
|
int x, int y,
|
|
int width, int height,
|
|
const char* message ,
|
|
MLV_Font* font,
|
|
int sizeInterligne,
|
|
MLV_Color borderColor, MLV_Color textColor, MLV_Color backgroundColor,
|
|
MLV_Text_justification text_justification,
|
|
MLV_Horizontal_position horizontal_position,
|
|
MLV_Vertical_position vertical_position,
|
|
MLV_Image* image,
|
|
...
|
|
);
|
|
|
|
/** \~french
|
|
* \brief Transforme un caractère en format unicode en chaîne de caractères
|
|
* compatible avec le codage local (codage utilisé par la machine qui
|
|
* exécute le programme).
|
|
*
|
|
* Après utilisation, vous devez libérer l'espace mémoire de la chaîne de
|
|
* caractères renvoyée par la fonction.
|
|
*
|
|
* \param unicode Le caractère en format unicode.
|
|
* \return Un pointeur vers une nouvelle chaîne de caractères.
|
|
*/
|
|
char* MLV_convert_unicode_to_string( int unicode );
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|