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 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();
|
||||||
|
|||||||
33
sdlscreen.c
33
sdlscreen.c
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user