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)
|
||||
// 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)
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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,
|
||||
@ -255,9 +282,38 @@ void Afficher_partie_de_l_ecran_zoomee_SDL(
|
||||
// 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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user