use Insert_font() to insert font in font list
This commit is contained in:
		
							parent
							
								
									bb2a4f5817
								
							
						
					
					
						commit
						19dd4a1730
					
				
							
								
								
									
										126
									
								
								src/text.c
									
									
									
									
									
								
							
							
						
						
									
										126
									
								
								src/text.c
									
									
									
									
									
								
							@ -95,7 +95,7 @@ int Nb_fonts;
 | 
			
		||||
#define EXTID(a,b,c) ((((a)&255)<<16) | (((b)&255)<<8) | (((c)&255)))
 | 
			
		||||
#define EXTID4(a,b,c,d) ((((a)&255)<<24) | (((b)&255)<<16) | (((c)&255)<<8) | (((d)&255)))
 | 
			
		||||
 | 
			
		||||
int Compare_fonts(T_Font * font_1, T_Font * font_2)
 | 
			
		||||
static int Compare_fonts(T_Font * font_1, T_Font * font_2)
 | 
			
		||||
{
 | 
			
		||||
  if (font_1->Is_bitmap && !font_2->Is_bitmap)
 | 
			
		||||
    return -1;
 | 
			
		||||
@ -104,6 +104,56 @@ int Compare_fonts(T_Font * font_1, T_Font * font_2)
 | 
			
		||||
  return strcmp(font_1->Label, font_2->Label);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void Insert_font(T_Font * font)
 | 
			
		||||
{
 | 
			
		||||
  // Gestion Liste
 | 
			
		||||
  font->Next = NULL;
 | 
			
		||||
  font->Previous = NULL;
 | 
			
		||||
  if (font_list_start==NULL)
 | 
			
		||||
  {
 | 
			
		||||
    // Premiere (liste vide)
 | 
			
		||||
    font_list_start = font;
 | 
			
		||||
    Nb_fonts++;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    int compare;
 | 
			
		||||
    compare = Compare_fonts(font, font_list_start);
 | 
			
		||||
    if (compare<=0)
 | 
			
		||||
    {
 | 
			
		||||
      if (compare==0 && !strcmp(font->Name, font_list_start->Name))
 | 
			
		||||
      {
 | 
			
		||||
        // Doublon
 | 
			
		||||
        free(font->Name);
 | 
			
		||||
        free(font);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      // Avant la premiere
 | 
			
		||||
      font->Next=font_list_start;
 | 
			
		||||
      font_list_start=font;
 | 
			
		||||
      Nb_fonts++;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      T_Font *searched_font;
 | 
			
		||||
      searched_font=font_list_start;
 | 
			
		||||
      while (searched_font->Next && (compare=Compare_fonts(font, searched_font->Next))>0)
 | 
			
		||||
        searched_font=searched_font->Next;
 | 
			
		||||
      // Après searched_font
 | 
			
		||||
      if (compare==0 && strcmp(font->Name, searched_font->Next->Name)==0)
 | 
			
		||||
      {
 | 
			
		||||
        // Doublon
 | 
			
		||||
        free(font->Name);
 | 
			
		||||
        free(font);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      font->Next=searched_font->Next;
 | 
			
		||||
      searched_font->Next=font;
 | 
			
		||||
      Nb_fonts++;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Ajout d'une fonte à la liste.
 | 
			
		||||
static void Add_font(const char *name, const char * font_name)
 | 
			
		||||
{
 | 
			
		||||
@ -190,52 +240,7 @@ static void Add_font(const char *name, const char * font_name)
 | 
			
		||||
  for (index=0; index < 17 && font_name[index]!='\0' && font_name[index]!='.'; index++)
 | 
			
		||||
    font->Label[index]=font_name[index];
 | 
			
		||||
 | 
			
		||||
  // Gestion Liste
 | 
			
		||||
  font->Next = NULL;
 | 
			
		||||
  font->Previous = NULL;
 | 
			
		||||
  if (font_list_start==NULL)
 | 
			
		||||
  {
 | 
			
		||||
    // Premiere (liste vide)
 | 
			
		||||
    font_list_start = font;
 | 
			
		||||
    Nb_fonts++;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    int compare;
 | 
			
		||||
    compare = Compare_fonts(font, font_list_start);
 | 
			
		||||
    if (compare<=0)
 | 
			
		||||
    {
 | 
			
		||||
      if (compare==0 && !strcmp(font->Name, font_list_start->Name))
 | 
			
		||||
      {
 | 
			
		||||
        // Doublon
 | 
			
		||||
        free(font->Name);
 | 
			
		||||
        free(font);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      // Avant la premiere
 | 
			
		||||
      font->Next=font_list_start;
 | 
			
		||||
      font_list_start=font;
 | 
			
		||||
      Nb_fonts++;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      T_Font *searched_font;
 | 
			
		||||
      searched_font=font_list_start;
 | 
			
		||||
      while (searched_font->Next && (compare=Compare_fonts(font, searched_font->Next))>0)
 | 
			
		||||
        searched_font=searched_font->Next;
 | 
			
		||||
      // Après searched_font
 | 
			
		||||
      if (compare==0 && strcmp(font->Name, searched_font->Next->Name)==0)
 | 
			
		||||
      {
 | 
			
		||||
        // Doublon
 | 
			
		||||
        free(font->Name);
 | 
			
		||||
        free(font);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      font->Next=searched_font->Next;
 | 
			
		||||
      searched_font->Next=font;
 | 
			
		||||
      Nb_fonts++;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  Insert_font(font);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -295,23 +300,8 @@ static int CALLBACK EnumFontFamCallback(CONST LOGFONTA *lpelf, CONST TEXTMETRICA
 | 
			
		||||
    font->Is_truetype = 1;
 | 
			
		||||
    snprintf(font->Label, sizeof(font->Label), "%-17.17sTT", lpelf->lfFaceName);
 | 
			
		||||
    font->Name = strdup(lpelf->lfFaceName);
 | 
			
		||||
    // Gestion Liste
 | 
			
		||||
    font->Next = NULL;
 | 
			
		||||
    font->Previous = NULL;
 | 
			
		||||
    // TODO insert at the right place
 | 
			
		||||
    if (font_list_start==NULL)
 | 
			
		||||
    {
 | 
			
		||||
      // Premiere (liste vide)
 | 
			
		||||
      font_list_start = font;
 | 
			
		||||
      Nb_fonts++;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      //font_list_start->Previous = font;
 | 
			
		||||
      font->Next = font_list_start;
 | 
			
		||||
      font_list_start = font;
 | 
			
		||||
      Nb_fonts++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Insert_font(font);
 | 
			
		||||
  }
 | 
			
		||||
  return 1; // non-zero : continue enumeration
 | 
			
		||||
}
 | 
			
		||||
@ -836,7 +826,7 @@ byte *Render_text(const char *str, int font_number, int size, int antialias, int
 | 
			
		||||
{
 | 
			
		||||
  T_Font *font = font_list_start;
 | 
			
		||||
  int index=font_number;
 | 
			
		||||
  #ifdef NOTTF
 | 
			
		||||
  #if defined(NOTTF) && !defined(WIN32)
 | 
			
		||||
    (void) size; // unused
 | 
			
		||||
    (void) antialias; // unused
 | 
			
		||||
    (void) bold; // unused
 | 
			
		||||
@ -851,10 +841,10 @@ byte *Render_text(const char *str, int font_number, int size, int antialias, int
 | 
			
		||||
    font = font->Next;
 | 
			
		||||
  if (font->Is_truetype)
 | 
			
		||||
  {
 | 
			
		||||
  #if defined(WIN32)
 | 
			
		||||
    return Render_text_Win32(str, font_number, size, antialias, bold, italic, width, height, palette);
 | 
			
		||||
  #elif !defined(NOTTF)
 | 
			
		||||
  #if !defined(NOTTF)
 | 
			
		||||
    return Render_text_TTF(str, font_number, size, antialias, bold, italic, width, height, palette);
 | 
			
		||||
  #elif defined(WIN32)
 | 
			
		||||
    return Render_text_Win32(str, font_number, size, antialias, bold, italic, width, height, palette);
 | 
			
		||||
  #else
 | 
			
		||||
    return NULL;
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user