From b5168ffdf7f57c5d49e6e1c565418118c8071f39 Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Sun, 21 Dec 2008 16:28:24 +0000 Subject: [PATCH] Fixes crash if menu is hidden and mouse cursor touches screen bottom (issue 71) Fixes an off-by-one error in screen refresh which caused the menu bar to not reappear when you press F10. It was since r392 (except MacOSX). git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@408 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- sdlscreen.c | 8 +++++++- windows.c | 8 +++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/sdlscreen.c b/sdlscreen.c index d88fba31..54d3f01d 100644 --- a/sdlscreen.c +++ b/sdlscreen.c @@ -40,6 +40,8 @@ #ifndef METHODE_UPDATE #ifdef __macosx__ #define METHODE_UPDATE METHODE_UPDATE_PLEINE_PAGE + #elif defined(__WINDOWS__) + #define METHODE_UPDATE METHODE_UPDATE_MULTI_RECTANGLE #else #define METHODE_UPDATE METHODE_UPDATE_PAR_CUMUL #endif @@ -110,7 +112,11 @@ void Flush_update(void) } else { - SDL_UpdateRect(Ecran_SDL, Max(Min_X,0)*Pixel_width, Max(Min_Y,0)*Pixel_height, Min(Largeur_ecran, Max_X-Min_X)*Pixel_width, Min(Hauteur_ecran, Max_Y-Min_Y)*Pixel_height); + if (Min_X<0) + Min_X=0; + if (Min_Y<0) + Min_Y=0; + SDL_UpdateRect(Ecran_SDL, Min_X*Pixel_width, Min_Y*Pixel_height, Min(Largeur_ecran-Min_X, Max_X-Min_X)*Pixel_width, Min(Hauteur_ecran-Min_Y, Max_Y-Min_Y)*Pixel_height); Min_X=Min_Y=10000; Max_X=Max_Y=0; diff --git a/windows.c b/windows.c index f84f71bc..574e0d16 100644 --- a/windows.c +++ b/windows.c @@ -1427,19 +1427,17 @@ void Afficher_curseur(void) Debut_X=Mouse_X-Curseur_Decalage_X[Temp]; Debut_Y=Mouse_Y-Curseur_Decalage_Y[Temp]; - for (Pos_X=Debut_X,Compteur_X=0;Compteur_X<15;Pos_X++,Compteur_X++) + for (Pos_X=Debut_X,Compteur_X=0;Compteur_X<15 && Pos_X < Largeur_ecran;Pos_X++,Compteur_X++) { if( Pos_X < 0 ) continue; - for (Pos_Y=Debut_Y,Compteur_Y=0;Compteur_Y<15;Pos_Y++,Compteur_Y++) + for (Pos_Y=Debut_Y,Compteur_Y=0;Compteur_Y<15 && Pos_Y < Hauteur_ecran;Pos_Y++,Compteur_Y++) { - if( Pos_Y < 0 ) continue; + if( Pos_Y < 0 || Pos_Y >= Hauteur_ecran) continue; Couleur=SPRITE_CURSEUR[Temp][Compteur_Y][Compteur_X]; FOND_CURSEUR[Compteur_Y][Compteur_X]=Lit_pixel(Pos_X,Pos_Y); if (Couleur!=CM_Trans) Pixel(Pos_X,Pos_Y,Couleur); - if (Pos_Y > Hauteur_ecran) break; } - if (Pos_X >= Largeur_ecran) break; } UpdateRect(Max(Debut_X,0),Max(Debut_Y,0),Compteur_X,Compteur_Y);