Files
snake2025/MLV/MLV_text.h
2025-03-26 09:05:12 +01:00

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