Fonts are now sorted (bitmaps before TrueType, then alphabetically).
Duplicate fonts (already same path+filename) are skipped. Font selector allows pageup and pagedown. Windows fonts directory is now determined by WINDIR environment variable git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@348 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
a60b2bfd01
commit
9f8381593a
48
boutons.c
48
boutons.c
@ -5993,6 +5993,54 @@ void Bouton_Texte()
|
|||||||
A_redessiner=1;
|
A_redessiner=1;
|
||||||
A_previsionner=1;
|
A_previsionner=1;
|
||||||
}
|
}
|
||||||
|
if (Touche==SDLK_PAGEDOWN && (Position_curseur+Debut_liste)<(Fonte_nombre-1))
|
||||||
|
{
|
||||||
|
Touche=0;
|
||||||
|
Effacer_curseur();
|
||||||
|
if (Fonte_nombre<NB_FONTES)
|
||||||
|
{
|
||||||
|
Position_curseur=Fonte_nombre-1;
|
||||||
|
}
|
||||||
|
else if(Position_curseur!=NB_FONTES-1)
|
||||||
|
{
|
||||||
|
Position_curseur=NB_FONTES-1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debut_liste+=NB_FONTES;
|
||||||
|
if (Debut_liste+NB_FONTES>Fonte_nombre)
|
||||||
|
{
|
||||||
|
Debut_liste=Fonte_nombre-NB_FONTES;
|
||||||
|
}
|
||||||
|
// Mise à jour du scroller
|
||||||
|
Scroller_de_fontes->Position=Debut_liste;
|
||||||
|
Fenetre_Dessiner_jauge(Scroller_de_fontes);
|
||||||
|
}
|
||||||
|
A_redessiner=1;
|
||||||
|
A_previsionner=1;
|
||||||
|
}
|
||||||
|
if (Touche==SDLK_PAGEUP && (Position_curseur+Debut_liste)>0)
|
||||||
|
{
|
||||||
|
Touche=0;
|
||||||
|
Effacer_curseur();
|
||||||
|
if(Position_curseur!=0)
|
||||||
|
{
|
||||||
|
Position_curseur=0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debut_liste-=NB_FONTES;
|
||||||
|
if (Debut_liste<0)
|
||||||
|
{
|
||||||
|
Debut_liste=0;
|
||||||
|
}
|
||||||
|
// Mise à jour du scroller
|
||||||
|
Scroller_de_fontes->Position=Debut_liste;
|
||||||
|
Fenetre_Dessiner_jauge(Scroller_de_fontes);
|
||||||
|
}
|
||||||
|
A_redessiner=1;
|
||||||
|
A_previsionner=1;
|
||||||
|
}
|
||||||
if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche)
|
if (Touche==Bouton[BOUTON_AIDE].Raccourci_gauche)
|
||||||
Fenetre_aide(BOUTON_TEXTE, NULL);
|
Fenetre_aide(BOUTON_TEXTE, NULL);
|
||||||
}
|
}
|
||||||
|
|||||||
94
texte.c
94
texte.c
@ -54,23 +54,36 @@ typedef struct T_FONTE
|
|||||||
char * Nom;
|
char * Nom;
|
||||||
int EstTrueType;
|
int EstTrueType;
|
||||||
int EstImage;
|
int EstImage;
|
||||||
|
char Libelle[22];
|
||||||
|
|
||||||
// Liste chainée simple
|
// Liste chainée simple
|
||||||
struct T_FONTE * Suivante;
|
struct T_FONTE * Suivante;
|
||||||
|
struct T_FONTE * Precedente;
|
||||||
} T_FONTE;
|
} T_FONTE;
|
||||||
// Liste chainée des polices de texte
|
// Liste chainée des polices de texte
|
||||||
T_FONTE * Liste_fontes_debut;
|
T_FONTE * Liste_fontes_debut;
|
||||||
T_FONTE * Liste_fontes_fin;
|
|
||||||
int Fonte_nombre;
|
int Fonte_nombre;
|
||||||
|
|
||||||
// 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)))
|
||||||
|
|
||||||
|
int Compare_fontes(T_FONTE * Fonte1, T_FONTE * Fonte2)
|
||||||
|
{
|
||||||
|
if (Fonte1->EstImage && !Fonte2->EstImage)
|
||||||
|
return -1;
|
||||||
|
if (Fonte2->EstImage && !Fonte1->EstImage)
|
||||||
|
return 1;
|
||||||
|
return strcmp(Fonte1->Libelle, Fonte2->Libelle);
|
||||||
|
}
|
||||||
|
|
||||||
// Ajout d'une fonte à la liste.
|
// Ajout d'une fonte à la liste.
|
||||||
void Ajout_fonte(const char *Nom)
|
void Ajout_fonte(const char *Nom)
|
||||||
{
|
{
|
||||||
|
char * Nom_fonte;
|
||||||
T_FONTE * Fonte = (T_FONTE *)malloc(sizeof(T_FONTE));
|
T_FONTE * Fonte = (T_FONTE *)malloc(sizeof(T_FONTE));
|
||||||
int Taille=strlen(Nom)+1;
|
int Taille=strlen(Nom)+1;
|
||||||
|
int Indice;
|
||||||
|
|
||||||
// Détermination du type:
|
// Détermination du type:
|
||||||
if (Taille<5 ||
|
if (Taille<5 ||
|
||||||
Nom[Taille-5]!='.')
|
Nom[Taille-5]!='.')
|
||||||
@ -102,16 +115,64 @@ void Ajout_fonte(const char *Nom)
|
|||||||
|
|
||||||
Fonte->Nom = (char *)malloc(Taille);
|
Fonte->Nom = (char *)malloc(Taille);
|
||||||
strcpy(Fonte->Nom, Nom);
|
strcpy(Fonte->Nom, Nom);
|
||||||
|
// Libelle
|
||||||
|
strcpy(Fonte->Libelle, " ");
|
||||||
|
if (Fonte->EstTrueType)
|
||||||
|
Fonte->Libelle[19]=Fonte->Libelle[20]='T'; // Logo TT
|
||||||
|
Nom_fonte=Position_dernier_slash(Fonte->Nom);
|
||||||
|
if (Nom_fonte==NULL)
|
||||||
|
Nom_fonte=Fonte->Nom;
|
||||||
|
else
|
||||||
|
Nom_fonte++;
|
||||||
|
for (Indice=0; Indice < 19 && Nom_fonte[Indice]!='\0' && Nom_fonte[Indice]!='.'; Indice++)
|
||||||
|
Fonte->Libelle[Indice]=Nom_fonte[Indice];
|
||||||
|
|
||||||
// Gestion Liste
|
// Gestion Liste
|
||||||
Fonte->Suivante = NULL;
|
Fonte->Suivante = NULL;
|
||||||
|
Fonte->Precedente = NULL;
|
||||||
if (Liste_fontes_debut==NULL)
|
if (Liste_fontes_debut==NULL)
|
||||||
|
{
|
||||||
|
// Premiere (liste vide)
|
||||||
Liste_fontes_debut = Fonte;
|
Liste_fontes_debut = Fonte;
|
||||||
|
Fonte_nombre++;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Liste_fontes_fin->Suivante = Fonte;
|
{
|
||||||
Liste_fontes_fin = Fonte;
|
int Compare;
|
||||||
Fonte_nombre++;
|
Compare = Compare_fontes(Fonte, Liste_fontes_debut);
|
||||||
|
if (Compare<=0)
|
||||||
|
{
|
||||||
|
if (Compare==0 && !strcmp(Fonte->Nom, Liste_fontes_debut->Nom))
|
||||||
|
{
|
||||||
|
// Doublon
|
||||||
|
free(Fonte->Nom);
|
||||||
|
free(Fonte);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Avant la premiere
|
||||||
|
Fonte->Suivante=Liste_fontes_debut;
|
||||||
|
Liste_fontes_debut=Fonte;
|
||||||
|
Fonte_nombre++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
T_FONTE *Fonte_cherchee;
|
||||||
|
Fonte_cherchee=Liste_fontes_debut;
|
||||||
|
while (Fonte_cherchee->Suivante && (Compare=Compare_fontes(Fonte, Fonte_cherchee->Suivante))>0)
|
||||||
|
Fonte_cherchee=Fonte_cherchee->Suivante;
|
||||||
|
// Après Fonte_cherchee
|
||||||
|
if (Compare==0 && strcmp(Fonte->Nom, Fonte_cherchee->Suivante->Nom)==0)
|
||||||
|
{
|
||||||
|
// Doublon
|
||||||
|
free(Fonte->Nom);
|
||||||
|
free(Fonte);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Fonte->Suivante=Fonte_cherchee->Suivante;
|
||||||
|
Fonte_cherchee->Suivante=Fonte;
|
||||||
|
Fonte_nombre++;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -128,11 +189,11 @@ char * Nom_fonte(int Indice)
|
|||||||
|
|
||||||
|
|
||||||
// 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 22 caracteres.
|
||||||
char * Libelle_fonte(int Indice)
|
char * Libelle_fonte(int Indice)
|
||||||
{
|
{
|
||||||
T_FONTE *Fonte;
|
T_FONTE *Fonte;
|
||||||
static char Libelle[22];
|
static char Libelle[22];
|
||||||
char * Nom_fonte;
|
|
||||||
|
|
||||||
strcpy(Libelle, " ");
|
strcpy(Libelle, " ");
|
||||||
|
|
||||||
@ -144,15 +205,7 @@ char * Libelle_fonte(int Indice)
|
|||||||
Fonte = Fonte->Suivante;
|
Fonte = Fonte->Suivante;
|
||||||
|
|
||||||
// Libellé
|
// Libellé
|
||||||
if (Fonte->EstTrueType)
|
strcpy(Libelle, Fonte->Libelle);
|
||||||
Libelle[19]=Libelle[20]='T'; // Logo TT
|
|
||||||
Nom_fonte=Position_dernier_slash(Fonte->Nom);
|
|
||||||
if (Nom_fonte==NULL)
|
|
||||||
Nom_fonte=Fonte->Nom;
|
|
||||||
else
|
|
||||||
Nom_fonte++;
|
|
||||||
for (Indice=0; Indice < 19 && Nom_fonte[Indice]!='\0' && Nom_fonte[Indice]!='.'; Indice++)
|
|
||||||
Libelle[Indice]=Nom_fonte[Indice];
|
|
||||||
return Libelle;
|
return Libelle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,7 +238,7 @@ void Initialisation_Texte(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Initialisation des fontes
|
// Initialisation des fontes
|
||||||
Liste_fontes_debut = Liste_fontes_fin = NULL;
|
Liste_fontes_debut = NULL;
|
||||||
Fonte_nombre=0;
|
Fonte_nombre=0;
|
||||||
// Parcours du répertoire "fonts"
|
// Parcours du répertoire "fonts"
|
||||||
strcpy(Nom_repertoire, Repertoire_du_programme);
|
strcpy(Nom_repertoire, Repertoire_du_programme);
|
||||||
@ -195,7 +248,14 @@ void Initialisation_Texte(void)
|
|||||||
#ifdef __WIN32__
|
#ifdef __WIN32__
|
||||||
// Parcours du répertoire systeme windows "fonts"
|
// Parcours du répertoire systeme windows "fonts"
|
||||||
#ifndef NOTTF
|
#ifndef NOTTF
|
||||||
for_each_file("c:\\windows\\fonts", Ajout_fonte);
|
{
|
||||||
|
char * WindowsPath=getenv("windir");
|
||||||
|
if (WindowsPath)
|
||||||
|
{
|
||||||
|
sprintf(Nom_repertoire, "%s\\FONTS", WindowsPath);
|
||||||
|
for_each_file(Nom_repertoire, Ajout_fonte);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#elif defined(__linux__)
|
#elif defined(__linux__)
|
||||||
// Récupération de la liste des fonts avec fontconfig
|
// Récupération de la liste des fonts avec fontconfig
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user