Avoid crash when drawing offscreen (circles for example)
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@63 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
0797a72c70
commit
734b305afb
2
gfx2.ini
2
gfx2.ini
@ -102,7 +102,7 @@
|
||||
; Font: ³ Police de caractères (fonte):
|
||||
; 1: Classic ³ 1: Classique
|
||||
; 2: Fun ³ 2: Fun
|
||||
Font = 1 ; (default 1)
|
||||
Font = 2 ; (default 1)
|
||||
|
||||
|
||||
|
||||
|
||||
56
graph.c
56
graph.c
@ -1669,11 +1669,10 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview)
|
||||
{
|
||||
Pixel_Preview(Pinceau_X,Pinceau_Y,Couleur);
|
||||
SDL_UpdateRect(Ecran_SDL,
|
||||
Pinceau_X - Principal_Decalage_X,
|
||||
Pinceau_Y - Principal_Decalage_Y, 1,1 );
|
||||
Max(Pinceau_X - Principal_Decalage_X,0),
|
||||
Max(Pinceau_Y - Principal_Decalage_Y,0), 1,1 );
|
||||
// Attention au zoom !
|
||||
if(Loupe_Mode) UpdateZoom(X,Y,1,1);
|
||||
DEBUG("Point définitif",0);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -1769,7 +1768,7 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview)
|
||||
Smear_Brosse[Position]=Couleur_temporaire;
|
||||
}
|
||||
|
||||
SDL_UpdateRect(Ecran_SDL,Debut_X,Debut_Y,
|
||||
SDL_UpdateRect(Ecran_SDL,Max(Debut_X,0),Max(Debut_Y,0),
|
||||
Fin_Compteur_X,Fin_Compteur_Y );
|
||||
}
|
||||
|
||||
@ -1796,7 +1795,7 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview)
|
||||
Afficher_pixel(Pos_X,Pos_Y,Couleur);
|
||||
}
|
||||
}
|
||||
SDL_UpdateRect(Ecran_SDL, Debut_X, Debut_Y, Fin_Compteur_X, Fin_Compteur_Y);
|
||||
SDL_UpdateRect(Ecran_SDL, Max(Debut_X,0), Max(Debut_Y,0), Fin_Compteur_X, Fin_Compteur_Y);
|
||||
|
||||
}
|
||||
break;
|
||||
@ -1877,7 +1876,7 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview)
|
||||
Smear_Brosse[Position]=Couleur_temporaire;
|
||||
}
|
||||
|
||||
SDL_UpdateRect(Ecran_SDL,Debut_X,Debut_Y,
|
||||
SDL_UpdateRect(Ecran_SDL,Max(Debut_X,0),Max(Debut_Y,0),
|
||||
Fin_Compteur_X,Fin_Compteur_Y
|
||||
);
|
||||
|
||||
@ -1896,12 +1895,16 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview)
|
||||
if (Lit_pixel_dans_brosse(Compteur_X,Compteur_Y)!=Back_color)
|
||||
Afficher_pixel(Pos_X,Pos_Y,Couleur);
|
||||
}
|
||||
|
||||
//ok
|
||||
SDL_UpdateRect(Ecran_SDL,
|
||||
Debut_X+Principal_Decalage_X,
|
||||
Debut_Y+Principal_Decalage_Y,
|
||||
Max(Debut_X-Principal_Decalage_X,0),
|
||||
Max(Debut_Y-Principal_Decalage_Y,0),
|
||||
Fin_Compteur_X-Debut_Compteur_X,Fin_Compteur_Y-Debut_Compteur_Y
|
||||
);
|
||||
DEBUG("X",Debut_X-Principal_Decalage_X);
|
||||
DEBUG("Y",Debut_Y-Principal_Decalage_Y);
|
||||
DEBUG("W",Fin_Compteur_X-Debut_Compteur_X);
|
||||
DEBUG("H",Fin_Compteur_Y-Debut_Compteur_Y);
|
||||
if(Loupe_Mode) UpdateZoom(Debut_X,Debut_Y,Fin_Compteur_X-Debut_Compteur_X,Fin_Compteur_Y-Debut_Compteur_Y);
|
||||
}
|
||||
}
|
||||
@ -2007,15 +2010,21 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview)
|
||||
Afficher_pixel(Pos_X,Pos_Y,Couleur);
|
||||
}
|
||||
// Ceci est testé et fonctionne :)
|
||||
SDL_UpdateRect(Ecran_SDL,
|
||||
Max(Debut_X-Principal_Decalage_X,0),
|
||||
Max(Debut_Y-Principal_Decalage_Y,0),
|
||||
Fin_Compteur_X-Debut_Compteur_X,Fin_Compteur_Y-Debut_Compteur_Y
|
||||
);
|
||||
if(Fin_Compteur_X-Debut_Compteur_X > 0
|
||||
&& Fin_Compteur_Y - Debut_Compteur_Y > 0)
|
||||
{
|
||||
SDL_UpdateRect(Ecran_SDL,
|
||||
Max(Debut_X-Principal_Decalage_X,1),
|
||||
Max(Debut_Y-Principal_Decalage_Y,1),
|
||||
Fin_Compteur_X-Debut_Compteur_X,
|
||||
Fin_Compteur_Y-Debut_Compteur_Y
|
||||
);
|
||||
|
||||
if(Loupe_Mode) UpdateZoom(Debut_X,Debut_Y,
|
||||
Fin_Compteur_X-Debut_Compteur_X,
|
||||
Fin_Compteur_Y-Debut_Compteur_Y);
|
||||
if(Loupe_Mode)
|
||||
UpdateZoom(Debut_X,Debut_Y,
|
||||
Fin_Compteur_X-Debut_Compteur_X,
|
||||
Fin_Compteur_Y-Debut_Compteur_Y);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2057,9 +2066,8 @@ void Effacer_pinceau(short X,short Y)
|
||||
&& (Pinceau_Y<=Limite_Bas) )
|
||||
{
|
||||
Pixel_Preview(Pinceau_X,Pinceau_Y,Lit_pixel_dans_ecran_courant(Pinceau_X,Pinceau_Y));
|
||||
SDL_UpdateRect(Ecran_SDL,Pinceau_X+Principal_Decalage_X,Pinceau_Y+Principal_Decalage_Y,1,1);
|
||||
SDL_UpdateRect(Ecran_SDL,Max(Pinceau_X-Principal_Decalage_X,0),Max(Pinceau_Y-Principal_Decalage_Y,0),1,1);
|
||||
if(Loupe_Mode) UpdateZoom(Pinceau_X,Pinceau_Y,1,1);
|
||||
DEBUG("Pas de clic",1);
|
||||
}
|
||||
break;
|
||||
case FORME_PINCEAU_BROSSE_COULEUR : // Brosse en couleur
|
||||
@ -4023,8 +4031,9 @@ void Tracer_cercle_vide_General(short Centre_X,short Centre_Y,short Rayon,byte C
|
||||
Pixel_figure(Centre_X+Rayon,Centre_Y,Couleur); // Droite
|
||||
Pixel_figure(Centre_X,Centre_Y+Rayon,Couleur); // Bas
|
||||
|
||||
SDL_UpdateRect(Ecran_SDL,Centre_X-Rayon-Principal_Decalage_X,
|
||||
Centre_Y-Rayon-Principal_Decalage_Y,2*Rayon+1,2*Rayon+1);
|
||||
SDL_UpdateRect(Ecran_SDL,Max(Centre_X-Rayon-Principal_Decalage_X,0),
|
||||
Max(Centre_Y-Rayon-Principal_Decalage_Y,0),2*Rayon+1,2*Rayon+1);
|
||||
if(Loupe_Mode) UpdateZoom(Centre_X-Rayon,Centre_Y-Rayon,2*Rayon+1,2*Rayon+1);
|
||||
}
|
||||
|
||||
// -- Tracé définitif d'un cercle vide --
|
||||
@ -4083,8 +4092,9 @@ void Tracer_cercle_plein(short Centre_X,short Centre_Y,short Rayon,byte Couleur)
|
||||
if (Pixel_dans_cercle())
|
||||
Afficher_pixel(Pos_X,Pos_Y,Couleur);
|
||||
|
||||
SDL_UpdateRect(Ecran_SDL,Debut_X+Principal_Decalage_X,
|
||||
Debut_Y+Principal_Decalage_Y,Fin_X+1-Debut_X,Fin_Y+1-Debut_Y);
|
||||
SDL_UpdateRect(Ecran_SDL,Max(Debut_X+Principal_Decalage_X,0),
|
||||
Max(Debut_Y+Principal_Decalage_Y,0),Fin_X+1-Debut_X,Fin_Y+1-Debut_Y);
|
||||
if(Loupe_Mode) UpdateZoom(Debut_X,Debut_Y,Fin_X+1-Debut_X,Fin_Y+1-Debut_Y);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user