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:
Adrien Destugues
2008-08-01 11:18:56 +00:00
parent acef837b12
commit 21dacf51f1
3 changed files with 178 additions and 14 deletions

128
divers.c
View File

@@ -336,7 +336,7 @@ void Initialiser_chrono(dword Delai)
void Wait_VBL(void)
// 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)
@@ -346,28 +346,27 @@ void Passer_en_mode_texte(byte Nb_lignes)
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)
{
puts("Lit_pixel_dans_brosse non implémenté!");
return 0;
return *(Brosse + Y * Brosse_Largeur + X);
}
void Clavier_de_depart(void)
{
puts("Clavier_de_depart non implémenté!");
UNIMPLEMENTED
}
void Clavier_americain(void)
{
puts("Clavier_americain non implémenté!");
UNIMPLEMENTED
}
word Detection_souris(void)
{
puts("Detection_souris non implémenté!");
UNIMPLEMENTED
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)
{
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)
@@ -620,19 +643,102 @@ void Tester_chrono(void)
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)
{
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)
{
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)
{
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)