Fix crashing bug when using pipette on a software-zoomed video mode from the palette menu. Fixes issue 196. Warning! Version 2.0 needs a new build!

git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@951 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Adrien Destugues 2009-07-24 08:34:20 +00:00
parent 6698b78474
commit cdd8a3276c
2 changed files with 77 additions and 88 deletions

View File

@ -107,6 +107,7 @@ void Save_background(byte **buffer, int x_pos, int y_pos, int width, int height)
int index;
if(*buffer != NULL) DEBUG("WARNING : buffer already allocated !!!",0);
*buffer=(byte *) malloc(width*Menu_factor_X*height*Menu_factor_Y*Pixel_width);
if(*buffer==NULL) Error(0);
for (index=0; index<(height*Menu_factor_Y); index++)
Read_line(x_pos,y_pos+index,width*Menu_factor_X,(*buffer)+((int)index*width*Menu_factor_X*Pixel_width));
}
@ -118,6 +119,7 @@ void Restore_background(byte *buffer, int x_pos, int y_pos, int width, int heigh
for (index=0; index<height*Menu_factor_Y; index++)
Display_line_fast(x_pos,y_pos+index,width*Menu_factor_X,buffer+((int)index*width*Menu_factor_X*Pixel_width));
free(buffer);
buffer = NULL;
}
///Draw a pixel in a saved screen block (when you sort colors in the palette, for example)
@ -1931,26 +1933,21 @@ short Wait_click_in_palette(T_Palette_button * button)
// -------------- Récupération d'une couleur derrière un menu ----------------
void Get_color_behind_window(byte * color, byte * click)
{
short width=Window_width*Menu_factor_X;
short height=Window_height*Menu_factor_Y;
short old_x=-1;
short old_y=-1;
short index;
short a,b,c,d; // Variables temporaires et multitâches...
byte * buffer;
byte * buffer = NULL;
char str[25];
byte cursor_was_hidden;
if ((buffer=(byte *) malloc(width*height)))
{
Hide_cursor();
cursor_was_hidden=Cursor_hidden;
Cursor_hidden=0;
for (index=0; index<height; index++)
Read_line(Window_pos_X,Window_pos_Y+index,width,buffer+((int)index*width*Pixel_width));
Save_background(&buffer,Window_pos_X,Window_pos_Y,Window_width,Window_height);
a=Menu_Y;
Menu_Y=Menu_Y_before_window;
b=Menu_is_visible;
@ -2020,20 +2017,12 @@ void Get_color_behind_window(byte * color, byte * click)
Hide_cursor();
}
for (index=0; index<height; index++)
Display_line(Window_pos_X,Window_pos_Y+index,width,buffer+((int)index*width));
Restore_background(buffer,Window_pos_X,Window_pos_Y,Window_width,Window_height);
Update_rect(Window_pos_X, Window_pos_Y, Window_width*Menu_factor_X, Window_height*Menu_factor_Y);
Cursor_shape=CURSOR_SHAPE_ARROW;
Paintbrush_hidden=b;
Cursor_hidden=cursor_was_hidden;
Display_cursor();
free(buffer);
}
else
{
Error(0);
}
}

BIN
gfx2.cfg

Binary file not shown.