Debugged mouse cursor erasing !

git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@60 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Adrien Destugues 2008-07-24 13:16:03 +00:00
parent 6233c24a9d
commit a90c04af77
3 changed files with 19 additions and 8 deletions

View File

@ -304,10 +304,10 @@ void Get_input(void)
) )
{ {
Forcer_affichage_curseur=0; Forcer_affichage_curseur=0;
Effacer_curseur(); // On efface le curseur AVANT de le déplacer...
Mouse_X=INPUT_Nouveau_Mouse_X; Mouse_X=INPUT_Nouveau_Mouse_X;
Mouse_Y=INPUT_Nouveau_Mouse_Y; Mouse_Y=INPUT_Nouveau_Mouse_Y;
Mouse_K=INPUT_Nouveau_Mouse_K; Mouse_K=INPUT_Nouveau_Mouse_K;
Effacer_curseur();
Calculer_coordonnees_pinceau(); Calculer_coordonnees_pinceau();
Afficher_curseur(); Afficher_curseur();
} }

20
graph.c
View File

@ -2473,7 +2473,8 @@ void Effacer_curseur(void)
short X1,Y1,X2,Y2,X3,Y3,X4,Y4; short X1,Y1,X2,Y2,X3,Y3,X4,Y4;
if ( ( (Mouse_Y<Menu_Ordonnee) if ( ( (Mouse_Y<Menu_Ordonnee)
&& ( (!Loupe_Mode) || (Mouse_X<Principal_Split) || (Mouse_X>=Principal_X_Zoom) ) ) && ( (!Loupe_Mode) || (Mouse_X<Principal_Split)
|| (Mouse_X>=Principal_X_Zoom) ) )
|| (Une_fenetre_est_ouverte) || (Forme_curseur==FORME_CURSEUR_SABLIER) ) || (Une_fenetre_est_ouverte) || (Forme_curseur==FORME_CURSEUR_SABLIER) )
Forme=Forme_curseur; Forme=Forme_curseur;
else else
@ -2498,9 +2499,11 @@ void Effacer_curseur(void)
if (Fin_X<4) if (Fin_X<4)
Ligne_horizontale_XOR(Mouse_X+3,Mouse_Y,4-Fin_X); Ligne_horizontale_XOR(Mouse_X+3,Mouse_Y,4-Fin_X);
Fin_Y=(Mouse_Y+7>Menu_Ordonnee/*Hauteur_ecran*/)?Mouse_Y+7-Menu_Ordonnee/*Hauteur_ecran*/:0; Fin_Y=(Mouse_Y+7>Hauteur_ecran)?Mouse_Y+7-Hauteur_ecran:0;
if (Fin_Y<4) if (Fin_Y<4)
Ligne_verticale_XOR (Mouse_X,Mouse_Y+3,4-Fin_Y); Ligne_verticale_XOR (Mouse_X,Mouse_Y+3,4-Fin_Y);
SDL_UpdateRect(Ecran_SDL,Debut_X,Debut_Y,Fin_X-Debut_X,Fin_Y-Debut_Y);
} }
else else
{ {
@ -2540,12 +2543,10 @@ void Effacer_curseur(void)
if (Fin_X<3) if (Fin_X<3)
Ligne_horizontale_XOR(Mouse_X+3,Mouse_Y,3-Fin_X); Ligne_horizontale_XOR(Mouse_X+3,Mouse_Y,3-Fin_X);
Fin_Y=(Mouse_Y+6>Menu_Ordonnee/*Hauteur_ecran*/)?Mouse_Y+6-Menu_Ordonnee/*Hauteur_ecran*/:0; Fin_Y=(Mouse_Y+6>Hauteur_ecran)?Mouse_Y+6-Hauteur_ecran:0;
if (Fin_Y<3) if (Fin_Y<3)
Ligne_verticale_XOR (Mouse_X,Mouse_Y+3,3-Fin_Y); Ligne_verticale_XOR (Mouse_X,Mouse_Y+3,3-Fin_Y);
// Petites barres aux extrémités
Debut_X=(!Mouse_X); Debut_X=(!Mouse_X);
Debut_Y=(!Mouse_Y); Debut_Y=(!Mouse_Y);
Fin_X=(Mouse_X>=Largeur_ecran-1); Fin_X=(Mouse_X>=Largeur_ecran-1);
@ -2562,6 +2563,8 @@ void Effacer_curseur(void)
if (Mouse_Y<Menu_Ordonnee-6) if (Mouse_Y<Menu_Ordonnee-6)
Ligne_horizontale_XOR(Debut_X+Mouse_X-1,Mouse_Y+6,3-(Debut_X+Fin_X)); Ligne_horizontale_XOR(Debut_X+Mouse_X-1,Mouse_Y+6,3-(Debut_X+Fin_X));
SDL_UpdateRect(Ecran_SDL,Debut_X,Debut_Y,Fin_X-Debut_X,Fin_Y-Debut_Y);
} }
else else
{ {
@ -2603,10 +2606,16 @@ void Effacer_curseur(void)
Compteur_X=(Loupe_Mode)?Principal_Split:Largeur_ecran; // Largeur de la barre XOR Compteur_X=(Loupe_Mode)?Principal_Split:Largeur_ecran; // Largeur de la barre XOR
if ((Pos_Y<Menu_Ordonnee) && (Pinceau_Y>=Limite_Haut)) if ((Pos_Y<Menu_Ordonnee) && (Pinceau_Y>=Limite_Haut))
{
Ligne_horizontale_XOR(0,Pinceau_Y-Principal_Decalage_Y,Compteur_X); Ligne_horizontale_XOR(0,Pinceau_Y-Principal_Decalage_Y,Compteur_X);
SDL_UpdateRect(Ecran_SDL,0,Pinceau_Y-Principal_Decalage_Y,Compteur_X,1);
}
if ((Pos_X<Compteur_X) && (Pinceau_X>=Limite_Gauche)) if ((Pos_X<Compteur_X) && (Pinceau_X>=Limite_Gauche))
{
Ligne_verticale_XOR(Pinceau_X-Principal_Decalage_X,0,Menu_Ordonnee); Ligne_verticale_XOR(Pinceau_X-Principal_Decalage_X,0,Menu_Ordonnee);
SDL_UpdateRect(Ecran_SDL,Pinceau_X-Principal_Decalage_X,0,1,Menu_Ordonnee);
}
if (Loupe_Mode) if (Loupe_Mode)
{ {
@ -2616,6 +2625,7 @@ void Effacer_curseur(void)
Ligne_verticale_XOR_Zoom(Pinceau_X,Limite_Haut_Zoom,Loupe_Hauteur); Ligne_verticale_XOR_Zoom(Pinceau_X,Limite_Haut_Zoom,Loupe_Hauteur);
} }
break; break;
case FORME_CURSEUR_RECTANGLE_XOR : case FORME_CURSEUR_RECTANGLE_XOR :
// !!! Cette forme ne peut pas être utilisée en mode Loupe !!! // !!! Cette forme ne peut pas être utilisée en mode Loupe !!!

View File

@ -13,8 +13,7 @@ void inline Pixel_SDL (word X,word Y,byte Couleur)
byte inline Lit_Pixel_SDL (word X,word Y) byte inline Lit_Pixel_SDL (word X,word Y)
/* On retourne la couleur du pixel aux coords données */ /* On retourne la couleur du pixel aux coords données */
{ {
byte* p = Ecran + Y*Largeur_ecran + X; return *( Ecran + Y * Largeur_ecran + X );
return *p;
} }
void Effacer_Tout_l_Ecran_SDL (byte Couleur) void Effacer_Tout_l_Ecran_SDL (byte Couleur)
@ -319,5 +318,7 @@ void Set_Mode_SDL()
{ {
Ecran_SDL=SDL_SetVideoMode(Largeur_ecran,Hauteur_ecran,8,SDL_HWSURFACE/*|SDL_FULLSCREEN*/); Ecran_SDL=SDL_SetVideoMode(Largeur_ecran,Hauteur_ecran,8,SDL_HWSURFACE/*|SDL_FULLSCREEN*/);
Ecran=Ecran_SDL->pixels; Ecran=Ecran_SDL->pixels;
SDL_ShowCursor(0); // Cache le curseur SDL, on le gère en soft
} }