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:
parent
de2f95863d
commit
c5a3b7b3c8
86
boutons.c
86
boutons.c
@ -5742,7 +5742,7 @@ void Bouton_Texte()
|
||||
static int AntiAlias=0;
|
||||
static short Debut_liste=0, Position_curseur=0; // Selecteur de fonte
|
||||
|
||||
byte * Nouvelle_Brosse;
|
||||
byte * Nouvelle_Brosse=NULL;
|
||||
int Nouvelle_Largeur;
|
||||
int Nouvelle_Hauteur;
|
||||
int Bouton_clicke;
|
||||
@ -5750,7 +5750,9 @@ void Bouton_Texte()
|
||||
char Buffer_taille[3];
|
||||
struct Fenetre_Bouton_special * Bouton_taille_texte;
|
||||
struct Fenetre_Bouton_special * Bouton_texte;
|
||||
struct Fenetre_Bouton_special * Bouton_preview;
|
||||
byte A_redessiner=1;
|
||||
byte A_previsionner=1;
|
||||
short Temp;
|
||||
|
||||
Ouvrir_fenetre(288,180,"Text");
|
||||
@ -5783,6 +5785,7 @@ void Bouton_Texte()
|
||||
|
||||
// Preview
|
||||
Fenetre_Definir_bouton_special(7,105,276,50); // 9
|
||||
Bouton_preview=Fenetre_Liste_boutons_special;
|
||||
Fenetre_Afficher_cadre_creux(6, 104, 278, 52);
|
||||
|
||||
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
|
||||
Display_Window(288,180);
|
||||
|
||||
// Redessin
|
||||
|
||||
// Chaine texte
|
||||
Fenetre_Contenu_bouton_saisie(Bouton_texte,Chaine);
|
||||
// Taille police
|
||||
@ -5808,32 +5809,85 @@ void Bouton_Texte()
|
||||
Fenetre_Contenu_bouton_saisie(Bouton_taille_texte,Buffer_taille);
|
||||
// Selecteur de fonte
|
||||
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_previsionner=0;
|
||||
Afficher_curseur();
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
case 1: // Texte saisi
|
||||
Effacer_curseur();
|
||||
Readline(43,20,Chaine,30,0);
|
||||
Afficher_curseur();
|
||||
A_previsionner=1;
|
||||
break;
|
||||
|
||||
case 2: // Clear
|
||||
Chaine[0]='\0';
|
||||
Effacer_curseur();
|
||||
Fenetre_Effacer_bouton_saisie(Bouton_texte);
|
||||
Afficher_curseur();
|
||||
A_previsionner=1;
|
||||
break;
|
||||
|
||||
case 3: // AA
|
||||
AntiAlias = (AntiAlias==0);
|
||||
Effacer_curseur();
|
||||
Print_dans_fenetre(13,54,AntiAlias?"AntiAlias":" No AA ", CM_Noir, CM_Clair);
|
||||
Afficher_curseur();
|
||||
A_previsionner=1;
|
||||
break;
|
||||
|
||||
case 4: // Scroller des fontes
|
||||
@ -5856,6 +5910,7 @@ void Bouton_Texte()
|
||||
// On affiche à nouveau la liste
|
||||
Effacer_curseur();
|
||||
A_redessiner=1;
|
||||
A_previsionner=1;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -5873,14 +5928,16 @@ void Bouton_Texte()
|
||||
Taille_police = 500;
|
||||
}
|
||||
A_redessiner=1;
|
||||
A_previsionner=1;
|
||||
break;
|
||||
|
||||
case 7: // Taille -
|
||||
if (Taille_police > 0)
|
||||
if (Taille_police > 1)
|
||||
{
|
||||
Taille_police--;
|
||||
Effacer_curseur();
|
||||
A_redessiner=1;
|
||||
A_previsionner=1;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -5890,19 +5947,21 @@ void Bouton_Texte()
|
||||
Taille_police++;
|
||||
Effacer_curseur();
|
||||
A_redessiner=1;
|
||||
A_previsionner=1;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 11: // OK
|
||||
// Rendu texte
|
||||
Nouvelle_Brosse = NULL;
|
||||
if (Chaine[0])
|
||||
if (Chaine[0]=='\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)
|
||||
{
|
||||
// Pas de texte saisi, ou echec de rendu.
|
||||
Fermer_fenetre();
|
||||
Desenclencher_bouton(BOUTON_TEXTE);
|
||||
Afficher_curseur();
|
||||
@ -5935,8 +5994,9 @@ void Bouton_Texte()
|
||||
}
|
||||
return;
|
||||
|
||||
// Attention pas de break
|
||||
case 12: // Cancel
|
||||
if (Nouvelle_Brosse)
|
||||
free(Nouvelle_Brosse);
|
||||
Fermer_fenetre();
|
||||
Desenclencher_bouton(BOUTON_TEXTE);
|
||||
Afficher_curseur();
|
||||
|
||||
33
sdlscreen.c
33
sdlscreen.c
@ -21,6 +21,7 @@
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <SDL/SDL.h>
|
||||
#include "global.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);
|
||||
}
|
||||
|
||||
// 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)
|
||||
{
|
||||
// EDI = coords a l'écran
|
||||
|
||||
@ -54,5 +54,6 @@
|
||||
void Flush_update(void);
|
||||
byte * Surface_en_bytefield(SDL_Surface *Source, byte * Destination);
|
||||
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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user