diff --git a/boutons.c b/boutons.c index 56671ed7..6c50e250 100644 --- a/boutons.c +++ b/boutons.c @@ -5825,7 +5825,7 @@ void Bouton_Texte() case 2: // Clear Chaine[0]='\0'; Effacer_curseur(); - Fenetre_Contenu_bouton_saisie(Bouton_texte,Chaine); + Fenetre_Effacer_bouton_saisie(Bouton_texte); Afficher_curseur(); break; @@ -5896,7 +5896,11 @@ void Bouton_Texte() case 11: // OK // Rendu texte - Nouvelle_Brosse = Rendu_Texte(Chaine, Position_curseur+Debut_liste, Taille_police, AntiAlias, &Nouvelle_Largeur, &Nouvelle_Hauteur); + Nouvelle_Brosse = NULL; + if (Chaine[0]) + { + Nouvelle_Brosse = Rendu_Texte(Chaine, Position_curseur+Debut_liste, Taille_police, AntiAlias, &Nouvelle_Largeur, &Nouvelle_Hauteur); + } if (!Nouvelle_Brosse) { Fermer_fenetre(); @@ -5906,11 +5910,6 @@ void Bouton_Texte() return; } Effacer_curseur(); - // On passe en brosse: - //if (AntiAlias) - Changer_la_forme_du_pinceau(FORME_PINCEAU_BROSSE_COULEUR); - //else - // Changer_la_forme_du_pinceau(FORME_PINCEAU_BROSSE_MONOCHROME); if (Brosse) free(Brosse); Brosse=Nouvelle_Brosse; @@ -5918,6 +5917,23 @@ void Bouton_Texte() Brosse_Hauteur=Nouvelle_Hauteur; Brosse_Decalage_X=Brosse_Largeur>>1; Brosse_Decalage_Y=Brosse_Hauteur>>1; + Fermer_fenetre(); + Desenclencher_bouton(BOUTON_TEXTE); + + // On passe en brosse: + if (AntiAlias || !TrueType_fonte(Position_curseur+Debut_liste)) + Changer_la_forme_du_pinceau(FORME_PINCEAU_BROSSE_COULEUR); + else + Changer_la_forme_du_pinceau(FORME_PINCEAU_BROSSE_MONOCHROME); + + Enclencher_bouton(BOUTON_DESSIN,A_GAUCHE); + if (Config.Auto_discontinuous) + { + // On se place en mode Dessin discontinu à la main + while (Operation_en_cours!=OPERATION_DESSIN_DISCONTINU) + Enclencher_bouton(BOUTON_DESSIN,A_DROITE); + } + return; // Attention pas de break case 12: // Cancel diff --git a/gfx2.cfg b/gfx2.cfg index 3da9db0d..817c6196 100644 Binary files a/gfx2.cfg and b/gfx2.cfg differ diff --git a/moteur.c b/moteur.c index 1b5c5363..7f27cd2d 100644 --- a/moteur.c +++ b/moteur.c @@ -1323,6 +1323,13 @@ void Fenetre_Contenu_bouton_saisie(struct Fenetre_Bouton_special * Enreg, char * Print_dans_fenetre(Enreg->Pos_X+2,Enreg->Pos_Y+2,Contenu,CM_Noir,CM_Clair); } +//------------ Effacer le contenu (caption) d'une zone de saisie ------------ + +void Fenetre_Effacer_bouton_saisie(struct Fenetre_Bouton_special * Enreg) +{ + Block((Enreg->Pos_X+2)*Menu_Facteur_X+Fenetre_Pos_X,(Enreg->Pos_Y+2)*Menu_Facteur_Y+Fenetre_Pos_Y,(Enreg->Largeur/8)*8*Menu_Facteur_X,8*Menu_Facteur_Y,CM_Clair); + UpdateRect((Enreg->Pos_X+2)*Menu_Facteur_X+Fenetre_Pos_X,(Enreg->Pos_Y+2)*Menu_Facteur_Y+Fenetre_Pos_Y,Enreg->Largeur/8*8*Menu_Facteur_X,8*Menu_Facteur_Y); +} //------ Rajout d'un bouton à la liste de ceux présents dans la fenêtre ------ diff --git a/moteur.h b/moteur.h index 4112f50b..eb094c71 100644 --- a/moteur.h +++ b/moteur.h @@ -39,6 +39,7 @@ void Fenetre_Dessiner_jauge(struct Fenetre_Bouton_scroller * Enreg); void Fenetre_Dessiner_bouton_scroller(struct Fenetre_Bouton_scroller * Enreg); void Fenetre_Contenu_bouton_saisie(struct Fenetre_Bouton_special * Enreg, char * Contenu); +void Fenetre_Effacer_bouton_saisie(struct Fenetre_Bouton_special * Enreg); void Fenetre_Dessiner_bouton_saisie(word Pos_X,word Pos_Y,word Largeur_en_caracteres); void Fenetre_Definir_bouton_normal(word Pos_X, word Pos_Y, diff --git a/texte.c b/texte.c index 7790452b..16dfeff0 100644 --- a/texte.c +++ b/texte.c @@ -131,6 +131,17 @@ char * Libelle_fonte(int Indice) Libelle[Indice]=Nom_fonte[Indice]; return Libelle; } +// Vérifie si une fonte donnée est TrueType +int TrueType_fonte(int Indice) +{ + T_FONTE *Fonte = Liste_fontes_debut; + if (Indice<0 ||Indice>=Fonte_nombre) + return 0; + while (Indice--) + Fonte = Fonte->Suivante; + return Fonte->EstTrueType; +} + // Initialisation à faire une fois au début du programme @@ -195,8 +206,17 @@ byte *Rendu_Texte_TTF(const char *Chaine, int Numero_fonte, int Taille, int Anti return NULL; } // Couleurs - Couleur_Avant = Conversion_couleur_SDL(Fore_color); - Couleur_Arriere = Conversion_couleur_SDL(Back_color); + if (AntiAlias) + { + Couleur_Avant = Conversion_couleur_SDL(Fore_color); + Couleur_Arriere = Conversion_couleur_SDL(Back_color); + } + else + { + Couleur_Avant = Conversion_couleur_SDL(CM_Blanc); + Couleur_Arriere = Conversion_couleur_SDL(CM_Noir); + } + // Rendu du texte: crée une surface SDL RGB 24bits if (AntiAlias) @@ -241,14 +261,15 @@ byte *Rendu_Texte_TTF(const char *Chaine, int Numero_fonte, int Taille, int Anti } if (!AntiAlias) { - // Mappage des couleurs - /*for (Indice=0; Indice < Texte8Bit->w * Texte8Bit->h; Indice++) - { - if () - *(BrosseRetour+Indice)=*(BrosseRetour+Indice) ? (*(BrosseRetour+Indice)+96-15) : 0; - }*/ + // Mappage des couleurs + for (Indice=0; Indice < Texte8Bit->w * Texte8Bit->h; Indice++) + { + if (*(BrosseRetour+Indice) == CM_Noir) + *(BrosseRetour+Indice)=Back_color; + else if (*(BrosseRetour+Indice) == CM_Blanc) + *(BrosseRetour+Indice)=Fore_color; + } } - *Largeur=Texte8Bit->w; *Hauteur=Texte8Bit->h; SDL_FreeSurface(Texte8Bit); diff --git a/texte.h b/texte.h index 3f9530f0..6561982a 100644 --- a/texte.h +++ b/texte.h @@ -32,5 +32,7 @@ byte *Rendu_Texte(const char *Chaine, int Numero_fonte, int Taille, int AntiAlia char * Libelle_fonte(int Indice); // Trouve le nom d'une fonte par son numéro char * Nom_fonte(int Indice); +// Vérifie si une fonte donnée est TrueType +char * TrueType_fonte(int Indice); // Nombre de fontes déclarées extern int Fonte_nombre;