Some work on brush operations. Resize, rotate, flip,... Still some work needed for correct brush preview in zoomed mode.
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@87 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
acef837b12
commit
21dacf51f1
128
divers.c
128
divers.c
@ -336,7 +336,7 @@ void Initialiser_chrono(dword Delai)
|
|||||||
void Wait_VBL(void)
|
void Wait_VBL(void)
|
||||||
// Attente de VBL. Pour avoir des scrollbars qui ont une vitesse raisonnable par exemple. SDL ne sait pas faire ?
|
// Attente de VBL. Pour avoir des scrollbars qui ont une vitesse raisonnable par exemple. SDL ne sait pas faire ?
|
||||||
{
|
{
|
||||||
puts("Wait_VBL non implémenté!");
|
UNIMPLEMENTED
|
||||||
}
|
}
|
||||||
|
|
||||||
void Passer_en_mode_texte(byte Nb_lignes)
|
void Passer_en_mode_texte(byte Nb_lignes)
|
||||||
@ -346,28 +346,27 @@ void Passer_en_mode_texte(byte Nb_lignes)
|
|||||||
|
|
||||||
void Pixel_dans_brosse (word X,word Y,byte Couleur)
|
void Pixel_dans_brosse (word X,word Y,byte Couleur)
|
||||||
{
|
{
|
||||||
puts("Pixel_dans_brosse non implémenté!");
|
*(Brosse+Y*Brosse_Largeur+X)=Couleur;
|
||||||
}
|
}
|
||||||
|
|
||||||
byte Lit_pixel_dans_brosse (word X,word Y)
|
byte Lit_pixel_dans_brosse (word X,word Y)
|
||||||
{
|
{
|
||||||
puts("Lit_pixel_dans_brosse non implémenté!");
|
return *(Brosse + Y * Brosse_Largeur + X);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Clavier_de_depart(void)
|
void Clavier_de_depart(void)
|
||||||
{
|
{
|
||||||
puts("Clavier_de_depart non implémenté!");
|
UNIMPLEMENTED
|
||||||
}
|
}
|
||||||
|
|
||||||
void Clavier_americain(void)
|
void Clavier_americain(void)
|
||||||
{
|
{
|
||||||
puts("Clavier_americain non implémenté!");
|
UNIMPLEMENTED
|
||||||
}
|
}
|
||||||
|
|
||||||
word Detection_souris(void)
|
word Detection_souris(void)
|
||||||
{
|
{
|
||||||
puts("Detection_souris non implémenté!");
|
UNIMPLEMENTED
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -458,7 +457,31 @@ byte Lit_pixel_dans_ecran_brouillon(word X,word Y)
|
|||||||
|
|
||||||
void Rotate_90_deg_LOWLEVEL(byte * Source,byte * Destination)
|
void Rotate_90_deg_LOWLEVEL(byte * Source,byte * Destination)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
byte* esi;
|
||||||
|
byte* edi;
|
||||||
|
word dx,bx,cx;
|
||||||
|
|
||||||
|
//ESI = Point haut droit de la source
|
||||||
|
byte* Debut_de_colonne = Source + Brosse_Largeur - 1;
|
||||||
|
edi = Destination;
|
||||||
|
|
||||||
|
// Largeur de la source = Hauteur de la destination
|
||||||
|
dx = bx = Brosse_Largeur;
|
||||||
|
|
||||||
|
// Pour chaque ligne
|
||||||
|
for(dx = Brosse_Largeur;dx>0;dx--)
|
||||||
|
{
|
||||||
|
esi = Debut_de_colonne;
|
||||||
|
// Pout chaque colonne
|
||||||
|
for(cx=Brosse_Hauteur;cx>0;cx--)
|
||||||
|
{
|
||||||
|
*edi = *esi;
|
||||||
|
esi+=Brosse_Largeur;
|
||||||
|
edi++;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debut_de_colonne--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Remap_general_LOWLEVEL(byte * Table_conv,byte * Buffer,short Largeur,short Hauteur,short Largeur_buffer)
|
void Remap_general_LOWLEVEL(byte * Table_conv,byte * Buffer,short Largeur,short Hauteur,short Largeur_buffer)
|
||||||
@ -620,19 +643,102 @@ void Tester_chrono(void)
|
|||||||
if((SDL_GetTicks()/55)-Chrono_delay>Chrono_cmp) Etat_chrono=1;
|
if((SDL_GetTicks()/55)-Chrono_delay>Chrono_cmp) Etat_chrono=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Effectue uyne inversion de la brosse selon une droite horizontale
|
||||||
void Flip_Y_LOWLEVEL(void)
|
void Flip_Y_LOWLEVEL(void)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
// ESI pointe sur la partie haute de la brosse
|
||||||
|
// EDI sur la partie basse
|
||||||
|
byte* ESI = Brosse ;
|
||||||
|
byte* EDI = Brosse + (Brosse_Hauteur - 1) *Brosse_Largeur;
|
||||||
|
byte tmp;
|
||||||
|
word cx;
|
||||||
|
|
||||||
|
while(ESI < EDI)
|
||||||
|
{
|
||||||
|
// Il faut inverser les lignes pointées par ESI et
|
||||||
|
// EDI ("Brosse_Largeur" octets en tout)
|
||||||
|
|
||||||
|
for(cx = Brosse_Largeur;cx>0;cx--)
|
||||||
|
{
|
||||||
|
tmp = *ESI;
|
||||||
|
*ESI = *EDI;
|
||||||
|
*EDI = tmp;
|
||||||
|
ESI++;
|
||||||
|
EDI++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// On change de ligne :
|
||||||
|
// ESI pointe déjà sur le début de la ligne suivante
|
||||||
|
// EDI pointe sur la fin de la ligne en cours, il
|
||||||
|
// doit pointer sur le début de la précédente...
|
||||||
|
EDI -= 2 * Brosse_Largeur; // On recule de 2 lignes
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Effectue une inversion de la brosse selon une droite verticale
|
||||||
void Flip_X_LOWLEVEL(void)
|
void Flip_X_LOWLEVEL(void)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
// ESI pointe sur la partie gauche et EDI sur la partie
|
||||||
|
// droite
|
||||||
|
byte* ESI = Brosse;
|
||||||
|
byte* EDI = Brosse + Brosse_Largeur - 1;
|
||||||
|
|
||||||
|
byte* Debut_Ligne;
|
||||||
|
byte* Fin_Ligne;
|
||||||
|
byte tmp;
|
||||||
|
word cx;
|
||||||
|
|
||||||
|
while(ESI<EDI)
|
||||||
|
{
|
||||||
|
Debut_Ligne = ESI;
|
||||||
|
Fin_Ligne = EDI;
|
||||||
|
|
||||||
|
// On échange par colonnes
|
||||||
|
for(cx=Brosse_Hauteur;cx>0;cx--)
|
||||||
|
{
|
||||||
|
tmp=*ESI;
|
||||||
|
*ESI=*EDI;
|
||||||
|
*EDI=tmp;
|
||||||
|
EDI+=Brosse_Largeur;
|
||||||
|
ESI+=Brosse_Largeur;
|
||||||
|
}
|
||||||
|
|
||||||
|
// On change de colonne
|
||||||
|
// ESI > colonne suivante
|
||||||
|
// EDI > colonne précédente
|
||||||
|
ESI = Debut_Ligne + 1;
|
||||||
|
EDI = Fin_Ligne - 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Faire une rotation de 180º de la brosse
|
||||||
void Rotate_180_deg_LOWLEVEL(void)
|
void Rotate_180_deg_LOWLEVEL(void)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
// ESI pointe sur la partie supérieure de la brosse
|
||||||
|
// EDI pointe sur la partie basse
|
||||||
|
byte* ESI = Brosse;
|
||||||
|
byte* EDI = Brosse + Brosse_Hauteur*Brosse_Largeur - 1;
|
||||||
|
// EDI pointe sur le dernier pixel de la derniere ligne
|
||||||
|
byte tmp;
|
||||||
|
word cx;
|
||||||
|
|
||||||
|
while(ESI < EDI)
|
||||||
|
{
|
||||||
|
// On échange les deux lignes pointées par EDI et
|
||||||
|
// ESI (Brosse_Largeur octets)
|
||||||
|
// En même temps, on échange les pixels, donc EDI
|
||||||
|
// pointe sur la FIN de sa ligne
|
||||||
|
|
||||||
|
for(cx=Brosse_Largeur;cx>0;cx--)
|
||||||
|
{
|
||||||
|
tmp = *ESI;
|
||||||
|
*ESI = *EDI;
|
||||||
|
*EDI = tmp;
|
||||||
|
|
||||||
|
EDI--; // Attention ici on recule !
|
||||||
|
ESI++;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tempo_jauge(byte Vitesse)
|
void Tempo_jauge(byte Vitesse)
|
||||||
|
|||||||
2
graph.c
2
graph.c
@ -5550,6 +5550,8 @@ void Etirer_brosse_preview(short X1, short Y1, short X2, short Y2)
|
|||||||
|
|
||||||
Pos_Y_src+=Delta_Y;
|
Pos_Y_src+=Delta_Y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_UpdateRect(Ecran_SDL,Pos_X_dest_Initiale,Pos_Y_dest_Initiale,Largeur_dest,Hauteur_dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
62
sdlscreen.c
62
sdlscreen.c
@ -126,7 +126,34 @@ void Ligne_verticale_XOR_SDL (word Pos_X,word Pos_Y,word Hauteur)
|
|||||||
|
|
||||||
void Display_brush_Color_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse)
|
void Display_brush_Color_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
// EDI = Position à l'écran
|
||||||
|
byte* EDI = Ecran + Pos_Y * Largeur_ecran + Pos_X;
|
||||||
|
// ESI = Position dans la brosse
|
||||||
|
byte* ESI = Brosse + 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;
|
||||||
|
}
|
||||||
|
SDL_UpdateRect(Ecran_SDL,Pos_X,Pos_Y,Largeur,Hauteur);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Display_brush_Mono_SDL (word Pos_X, word Pos_Y,
|
void Display_brush_Mono_SDL (word Pos_X, word Pos_Y,
|
||||||
@ -255,9 +282,38 @@ void Afficher_partie_de_l_ecran_zoomee_SDL(
|
|||||||
// ATTENTION on n'arrive jamais ici !
|
// ATTENTION on n'arrive jamais ici !
|
||||||
}
|
}
|
||||||
|
|
||||||
void Display_brush_Color_zoom_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_brosse,byte * Buffer)
|
void Afficher_une_ligne_transparente_a_l_ecran_SDL(word Pos_X,word Pos_Y,word Largeur,byte* Ligne,byte Couleur_transparence)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
UNIMPLEMENTED
|
||||||
|
}
|
||||||
|
|
||||||
|
// Affiche une partie de la brosse couleur zoomée
|
||||||
|
void Display_brush_Color_zoom_SDL (word Pos_X,word Pos_Y,
|
||||||
|
word Decalage_X,word Decalage_Y,
|
||||||
|
word Largeur, // Largeur non zoomée
|
||||||
|
word Pos_Y_Fin,byte Couleur_de_transparence,
|
||||||
|
word Largeur_brosse, // Largeur réelle de la brosse
|
||||||
|
byte * Buffer)
|
||||||
|
{
|
||||||
|
byte* ESI = Brosse+Decalage_Y*Largeur_brosse + Decalage_X;
|
||||||
|
word DX = Pos_Y;
|
||||||
|
byte bx;
|
||||||
|
|
||||||
|
// Pour chaque ligne
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
Zoomer_une_ligne(ESI,Buffer,Loupe_Facteur,Largeur);
|
||||||
|
// On affiche facteur fois la ligne zoomée
|
||||||
|
for(bx=Loupe_Facteur;bx>0;bx--)
|
||||||
|
{
|
||||||
|
Afficher_une_ligne_transparente_a_l_ecran_SDL(Pos_X,DX,Largeur*Loupe_Facteur,Buffer,Couleur_de_transparence);
|
||||||
|
DX++;
|
||||||
|
if(DX==Pos_Y_Fin) return;
|
||||||
|
}
|
||||||
|
ESI += Largeur_brosse;
|
||||||
|
|
||||||
|
}
|
||||||
|
// ATTENTION zone jamais atteinte
|
||||||
}
|
}
|
||||||
|
|
||||||
void Display_brush_Mono_zoom_SDL (word Pos_X, word Pos_Y,
|
void Display_brush_Mono_zoom_SDL (word Pos_X, word Pos_Y,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user