Remove the Nb_fonts global variable.
+ do not return pointers to static buffers
This commit is contained in:
parent
e14edb10d6
commit
50ac812f6a
@ -5056,7 +5056,7 @@ void Button_Text(int btn)
|
|||||||
Print_in_window_underscore(206,89,"Italic", MC_Dark, MC_Light,1);
|
Print_in_window_underscore(206,89,"Italic", MC_Dark, MC_Light,1);
|
||||||
|
|
||||||
// Scroller des fontes
|
// Scroller des fontes
|
||||||
font_scroller = Window_set_scroller_button(165,35,NB_FONTS*8,Nb_fonts,NB_FONTS,list_start); // 5
|
font_scroller = Window_set_scroller_button(165,35,NB_FONTS*8,Font_count(),NB_FONTS,list_start); // 5
|
||||||
// Liste des fontes disponibles
|
// Liste des fontes disponibles
|
||||||
font_list_button = Window_set_special_button(8,35,152,NB_FONTS*8,0); // 6
|
font_list_button = Window_set_special_button(8,35,152,NB_FONTS*8,0); // 6
|
||||||
Window_display_frame_in(7, 33, 154, NB_FONTS*8+4);
|
Window_display_frame_in(7, 33, 154, NB_FONTS*8+4);
|
||||||
|
|||||||
59
src/text.c
59
src/text.c
@ -92,7 +92,6 @@ typedef struct T_Font
|
|||||||
* Head of the font linked list
|
* Head of the font linked list
|
||||||
*/
|
*/
|
||||||
T_Font * font_list_start;
|
T_Font * font_list_start;
|
||||||
int Nb_fonts;
|
|
||||||
|
|
||||||
// Inspiré par Allegro
|
// Inspiré par Allegro
|
||||||
#define EXTID(a,b,c) ((((a)&255)<<16) | (((b)&255)<<8) | (((c)&255)))
|
#define EXTID(a,b,c) ((((a)&255)<<16) | (((b)&255)<<8) | (((c)&255)))
|
||||||
@ -116,7 +115,6 @@ static void Insert_font(T_Font * font)
|
|||||||
{
|
{
|
||||||
// Premiere (liste vide)
|
// Premiere (liste vide)
|
||||||
font_list_start = font;
|
font_list_start = font;
|
||||||
Nb_fonts++;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -134,7 +132,6 @@ static void Insert_font(T_Font * font)
|
|||||||
// Avant la premiere
|
// Avant la premiere
|
||||||
font->Next=font_list_start;
|
font->Next=font_list_start;
|
||||||
font_list_start=font;
|
font_list_start=font;
|
||||||
Nb_fonts++;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -152,7 +149,6 @@ static void Insert_font(T_Font * font)
|
|||||||
}
|
}
|
||||||
font->Next=searched_font->Next;
|
font->Next=searched_font->Next;
|
||||||
searched_font->Next=font;
|
searched_font->Next=font;
|
||||||
Nb_fonts++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -248,36 +244,37 @@ static void Add_font(const char *name, const char * font_name)
|
|||||||
|
|
||||||
|
|
||||||
// Trouve le nom d'une fonte par son numéro
|
// Trouve le nom d'une fonte par son numéro
|
||||||
char * Font_name(int index)
|
const char * Font_name(int index)
|
||||||
{
|
{
|
||||||
T_Font *font = font_list_start;
|
T_Font *font = font_list_start;
|
||||||
if (index<0 ||index>=Nb_fonts)
|
if (index < 0 || font == NULL)
|
||||||
return "";
|
return "";
|
||||||
while (index--)
|
while (index--)
|
||||||
|
{
|
||||||
font = font->Next;
|
font = font->Next;
|
||||||
|
if (font == NULL)
|
||||||
|
return "";
|
||||||
|
}
|
||||||
return font->Name;
|
return font->Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Trouve le libellé d'affichage d'une fonte par son numéro
|
// Trouve le libellé d'affichage d'une fonte par son numéro
|
||||||
// Renvoie un pointeur sur un buffer statique de 20 caracteres.
|
// Renvoie un pointeur sur un buffer statique de 20 caracteres.
|
||||||
char * Font_label(int index)
|
const char * Font_label(int index)
|
||||||
{
|
{
|
||||||
T_Font *font;
|
T_Font *font = font_list_start;
|
||||||
static char label[20];
|
|
||||||
|
|
||||||
strcpy(label, " ");
|
|
||||||
|
|
||||||
// Recherche de la fonte
|
|
||||||
font = font_list_start;
|
font = font_list_start;
|
||||||
if (index<0 ||index>=Nb_fonts)
|
if (index < 0 || font == NULL)
|
||||||
return label;
|
return " ";
|
||||||
while (index--)
|
while (index--)
|
||||||
|
{
|
||||||
font = font->Next;
|
font = font->Next;
|
||||||
|
if (font == NULL)
|
||||||
// Libellé
|
return " ";
|
||||||
strcpy(label, font->Label);
|
}
|
||||||
return label;
|
return font->Label;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -285,13 +282,30 @@ char * Font_label(int index)
|
|||||||
int TrueType_font(int index)
|
int TrueType_font(int index)
|
||||||
{
|
{
|
||||||
T_Font *font = font_list_start;
|
T_Font *font = font_list_start;
|
||||||
if (index<0 ||index>=Nb_fonts)
|
if (index < 0 || font == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
while (index--)
|
while (index--)
|
||||||
|
{
|
||||||
font = font->Next;
|
font = font->Next;
|
||||||
|
if (font == NULL)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return font->Is_truetype;
|
return font->Is_truetype;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Font_count(void)
|
||||||
|
{
|
||||||
|
T_Font *font = font_list_start;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
while (font != NULL)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
font = font->Next;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(WIN32) && defined(NOTTF)
|
#if defined(WIN32) && defined(NOTTF)
|
||||||
static int CALLBACK EnumFontFamCallback(CONST LOGFONTA *lpelf, CONST TEXTMETRICA *lpntm, DWORD FontType, LPARAM lParam)
|
static int CALLBACK EnumFontFamCallback(CONST LOGFONTA *lpelf, CONST TEXTMETRICA *lpntm, DWORD FontType, LPARAM lParam)
|
||||||
{
|
{
|
||||||
@ -328,7 +342,6 @@ void Init_text(void)
|
|||||||
|
|
||||||
// Initialisation des fontes
|
// Initialisation des fontes
|
||||||
font_list_start = NULL;
|
font_list_start = NULL;
|
||||||
Nb_fonts=0;
|
|
||||||
// Parcours du répertoire "fonts"
|
// Parcours du répertoire "fonts"
|
||||||
directory_name = Filepath_append_to_dir(Data_directory, FONTS_SUBDIRECTORY);
|
directory_name = Filepath_append_to_dir(Data_directory, FONTS_SUBDIRECTORY);
|
||||||
For_each_file(directory_name, Add_font);
|
For_each_file(directory_name, Add_font);
|
||||||
@ -793,11 +806,15 @@ byte *Render_text(const char *str, int font_number, int size, int antialias, int
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Verification type de la fonte
|
// Verification type de la fonte
|
||||||
if (font_number<0 ||font_number>=Nb_fonts)
|
if (font_number < 0 || font == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
while (index--)
|
while (index--)
|
||||||
|
{
|
||||||
font = font->Next;
|
font = font->Next;
|
||||||
|
if (font == NULL)
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
if (font->Is_truetype)
|
if (font->Is_truetype)
|
||||||
{
|
{
|
||||||
#if !defined(NOTTF)
|
#if !defined(NOTTF)
|
||||||
|
|||||||
@ -48,12 +48,11 @@ void Add_font(const char *name);
|
|||||||
byte *Render_text(const char *str, int font_number, int size, int antialias, int bold, int italic, int *width, int *height, T_Palette palette);
|
byte *Render_text(const char *str, int font_number, int size, int antialias, int bold, int italic, int *width, int *height, T_Palette palette);
|
||||||
|
|
||||||
/// Finds a label to display for a font declared with ::Add_font().
|
/// Finds a label to display for a font declared with ::Add_font().
|
||||||
char * Font_label(int index);
|
const char * Font_label(int index);
|
||||||
/// Finds the filename of a font declared with ::Add_font().
|
/// Finds the filename of a font declared with ::Add_font().
|
||||||
char * Font_name(int index);
|
const char * Font_name(int index);
|
||||||
/// Returns true if the font of this number is TrueType, false if it's a SFont bitmap.
|
/// Returns true if the font of this number is TrueType, false if it's a SFont bitmap.
|
||||||
int TrueType_font(int index);
|
int TrueType_font(int index);
|
||||||
///
|
///
|
||||||
/// Number of fonts declared with a series of ::Add_font(). This is public for
|
/// Number of fonts declared with a series of ::Add_font()
|
||||||
/// convenience, but functionaly it is read-only.
|
int Font_count(void);
|
||||||
extern int Nb_fonts;
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user