Text tool: now has a preview.

git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@321 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Yves Rizoud 2008-11-02 20:33:36 +00:00
parent de2f95863d
commit c5a3b7b3c8
3 changed files with 108 additions and 14 deletions

View File

@ -5742,7 +5742,7 @@ void Bouton_Texte()
static int AntiAlias=0; static int AntiAlias=0;
static short Debut_liste=0, Position_curseur=0; // Selecteur de fonte static short Debut_liste=0, Position_curseur=0; // Selecteur de fonte
byte * Nouvelle_Brosse; byte * Nouvelle_Brosse=NULL;
int Nouvelle_Largeur; int Nouvelle_Largeur;
int Nouvelle_Hauteur; int Nouvelle_Hauteur;
int Bouton_clicke; int Bouton_clicke;
@ -5750,7 +5750,9 @@ void Bouton_Texte()
char Buffer_taille[3]; char Buffer_taille[3];
struct Fenetre_Bouton_special * Bouton_taille_texte; struct Fenetre_Bouton_special * Bouton_taille_texte;
struct Fenetre_Bouton_special * Bouton_texte; struct Fenetre_Bouton_special * Bouton_texte;
struct Fenetre_Bouton_special * Bouton_preview;
byte A_redessiner=1; byte A_redessiner=1;
byte A_previsionner=1;
short Temp; short Temp;
Ouvrir_fenetre(288,180,"Text"); Ouvrir_fenetre(288,180,"Text");
@ -5783,6 +5785,7 @@ void Bouton_Texte()
// Preview // Preview
Fenetre_Definir_bouton_special(7,105,276,50); // 9 Fenetre_Definir_bouton_special(7,105,276,50); // 9
Bouton_preview=Fenetre_Liste_boutons_special;
Fenetre_Afficher_cadre_creux(6, 104, 278, 52); Fenetre_Afficher_cadre_creux(6, 104, 278, 52);
Fenetre_Definir_bouton_special(0,0,1,1); // 10 ??? Fenetre_Definir_bouton_special(0,0,1,1); // 10 ???
@ -5791,8 +5794,6 @@ void Bouton_Texte()
Fenetre_Definir_bouton_normal(53,161,60,14,"Cancel",0,1,SDLK_ESCAPE); // 12 Fenetre_Definir_bouton_normal(53,161,60,14,"Cancel",0,1,SDLK_ESCAPE); // 12
Display_Window(288,180); Display_Window(288,180);
// Redessin
// Chaine texte // Chaine texte
Fenetre_Contenu_bouton_saisie(Bouton_texte,Chaine); Fenetre_Contenu_bouton_saisie(Bouton_texte,Chaine);
// Taille police // Taille police
@ -5808,32 +5809,85 @@ void Bouton_Texte()
Fenetre_Contenu_bouton_saisie(Bouton_taille_texte,Buffer_taille); Fenetre_Contenu_bouton_saisie(Bouton_taille_texte,Buffer_taille);
// Selecteur de fonte // Selecteur de fonte
Dessiner_selecteur_fontes(111, 33, Debut_liste, Position_curseur, NB_FONTES); Dessiner_selecteur_fontes(111, 33, Debut_liste, Position_curseur, NB_FONTES);
}
if (A_previsionner)
{
const char * Chaine_preview = "AaBbCcDdEeFf012345";
if (Chaine[0])
Chaine_preview=Chaine;
if (Nouvelle_Brosse)
{
free(Nouvelle_Brosse);
}
Block(
Fenetre_Pos_X+Bouton_preview->Pos_X*Menu_Facteur_X,
Fenetre_Pos_Y+Bouton_preview->Pos_Y*Menu_Facteur_Y,
Bouton_preview->Largeur*Menu_Facteur_X,
Bouton_preview->Hauteur*Menu_Facteur_Y,
CM_Clair);
Nouvelle_Brosse = Rendu_Texte(Chaine_preview, Position_curseur+Debut_liste, Taille_police, AntiAlias, &Nouvelle_Largeur, &Nouvelle_Hauteur);
if (Nouvelle_Brosse)
{
Affiche_brosse_SDL(
Nouvelle_Brosse,
Fenetre_Pos_X+Bouton_preview->Pos_X*Menu_Facteur_X,
Fenetre_Pos_Y+Bouton_preview->Pos_Y*Menu_Facteur_Y,
0,
0,
Min(Bouton_preview->Largeur*Menu_Facteur_X, Nouvelle_Largeur),
Min(Bouton_preview->Hauteur*Menu_Facteur_Y, Nouvelle_Hauteur),
Back_color,
Nouvelle_Largeur);
}
UpdateRect(
Fenetre_Pos_X+Bouton_preview->Pos_X*Menu_Facteur_X,
Fenetre_Pos_Y+Bouton_preview->Pos_Y*Menu_Facteur_Y,
Bouton_preview->Largeur*Menu_Facteur_X,
Bouton_preview->Hauteur*Menu_Facteur_Y);
}
if (A_redessiner || A_previsionner)
{
A_redessiner=0; A_redessiner=0;
A_previsionner=0;
Afficher_curseur(); Afficher_curseur();
} }
Bouton_clicke=Fenetre_Bouton_clicke(); Bouton_clicke=Fenetre_Bouton_clicke();
if (Bouton_clicke==0)
{
if (Touche==SDLK_UP && Debut_liste>1)
{
Touche=0;
Bouton_clicke=4;
Fenetre_Attribut2=Debut_liste-1;
}
if (Touche==SDLK_DOWN && Debut_liste+1+NB_FONTES<=Fonte_nombre)
{
Touche=0;
Bouton_clicke=4;
Fenetre_Attribut2=Debut_liste+1;
}
}
switch(Bouton_clicke) switch(Bouton_clicke)
{ {
case 1: // Texte saisi case 1: // Texte saisi
Effacer_curseur(); Effacer_curseur();
Readline(43,20,Chaine,30,0); Readline(43,20,Chaine,30,0);
Afficher_curseur(); A_previsionner=1;
break; break;
case 2: // Clear case 2: // Clear
Chaine[0]='\0'; Chaine[0]='\0';
Effacer_curseur(); Effacer_curseur();
Fenetre_Effacer_bouton_saisie(Bouton_texte); Fenetre_Effacer_bouton_saisie(Bouton_texte);
Afficher_curseur(); A_previsionner=1;
break; break;
case 3: // AA case 3: // AA
AntiAlias = (AntiAlias==0); AntiAlias = (AntiAlias==0);
Effacer_curseur(); Effacer_curseur();
Print_dans_fenetre(13,54,AntiAlias?"AntiAlias":" No AA ", CM_Noir, CM_Clair); Print_dans_fenetre(13,54,AntiAlias?"AntiAlias":" No AA ", CM_Noir, CM_Clair);
Afficher_curseur(); A_previsionner=1;
break; break;
case 4: // Scroller des fontes case 4: // Scroller des fontes
@ -5856,6 +5910,7 @@ void Bouton_Texte()
// On affiche à nouveau la liste // On affiche à nouveau la liste
Effacer_curseur(); Effacer_curseur();
A_redessiner=1; A_redessiner=1;
A_previsionner=1;
} }
break; break;
@ -5873,14 +5928,16 @@ void Bouton_Texte()
Taille_police = 500; Taille_police = 500;
} }
A_redessiner=1; A_redessiner=1;
A_previsionner=1;
break; break;
case 7: // Taille - case 7: // Taille -
if (Taille_police > 0) if (Taille_police > 1)
{ {
Taille_police--; Taille_police--;
Effacer_curseur(); Effacer_curseur();
A_redessiner=1; A_redessiner=1;
A_previsionner=1;
} }
break; break;
@ -5890,19 +5947,21 @@ void Bouton_Texte()
Taille_police++; Taille_police++;
Effacer_curseur(); Effacer_curseur();
A_redessiner=1; A_redessiner=1;
A_previsionner=1;
} }
break; break;
case 11: // OK case 11: // OK
// Rendu texte if (Chaine[0]=='\0')
Nouvelle_Brosse = NULL;
if (Chaine[0])
{ {
Nouvelle_Brosse = Rendu_Texte(Chaine, Position_curseur+Debut_liste, Taille_police, AntiAlias, &Nouvelle_Largeur, &Nouvelle_Hauteur); // Pas de texte saisie: on fait seulement le ménage et on sort.
free(Nouvelle_Brosse);
Nouvelle_Brosse=NULL;
} }
if (!Nouvelle_Brosse) if (!Nouvelle_Brosse)
{ {
// Pas de texte saisi, ou echec de rendu.
Fermer_fenetre(); Fermer_fenetre();
Desenclencher_bouton(BOUTON_TEXTE); Desenclencher_bouton(BOUTON_TEXTE);
Afficher_curseur(); Afficher_curseur();
@ -5935,8 +5994,9 @@ void Bouton_Texte()
} }
return; return;
// Attention pas de break
case 12: // Cancel case 12: // Cancel
if (Nouvelle_Brosse)
free(Nouvelle_Brosse);
Fermer_fenetre(); Fermer_fenetre();
Desenclencher_bouton(BOUTON_TEXTE); Desenclencher_bouton(BOUTON_TEXTE);
Afficher_curseur(); Afficher_curseur();

View File

@ -21,6 +21,7 @@
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#include <string.h> #include <string.h>
#include <stdlib.h>
#include <SDL/SDL.h> #include <SDL/SDL.h>
#include "global.h" #include "global.h"
#include "sdlscreen.h" #include "sdlscreen.h"
@ -232,6 +233,38 @@ void Clear_brush_SDL (word Pos_X,word Pos_Y,__attribute__((unused)) word Decalag
UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur);
} }
// Affiche une brosse (arbitraire) à l'écran
void Affiche_brosse_SDL(byte * B, word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse)
{
// EDI = Position à l'écran
byte* EDI = Ecran + Pos_Y * Largeur_ecran + Pos_X;
// ESI = Position dans la brosse
byte* ESI = B + Decalage_Y * Largeur_brosse + Decalage_X;
word DX,CX;
// Pour chaque ligne
for(DX = Hauteur;DX > 0; DX--)
{
// Pour chaque pixel
for(CX = Largeur;CX > 0; CX--)
{
// On vérifie que ce n'est pas la transparence
if(*ESI != Couleur_de_transparence)
{
*EDI = *ESI;
}
// Pixel suivant
ESI++; EDI++;
}
// On passe à la ligne suivante
EDI = EDI + Largeur_ecran - Largeur;
ESI = ESI + Largeur_brosse - Largeur;
}
}
void Remap_screen_SDL (word Pos_X,word Pos_Y,word Largeur,word Hauteur,byte * Table_de_conversion) void Remap_screen_SDL (word Pos_X,word Pos_Y,word Largeur,word Hauteur,byte * Table_de_conversion)
{ {
// EDI = coords a l'écran // EDI = coords a l'écran

View File

@ -54,5 +54,6 @@
void Flush_update(void); void Flush_update(void);
byte * Surface_en_bytefield(SDL_Surface *Source, byte * Destination); byte * Surface_en_bytefield(SDL_Surface *Source, byte * Destination);
SDL_Color Conversion_couleur_SDL(byte); SDL_Color Conversion_couleur_SDL(byte);
void Affiche_brosse_SDL(byte * B, word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse);
#endif // SDLSCREEN_H_INCLUDED #endif // SDLSCREEN_H_INCLUDED