From 7d1f8cd8da86e9bb55e4ab48d0cd2d53cef71abc Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sat, 14 Nov 2009 16:32:48 +0000 Subject: [PATCH] Fix a drawing bug when selecting/deselecting buttons in the menu. git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1181 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- engine.c | 50 ++++++++++++++++++-------------------------------- 1 file changed, 18 insertions(+), 32 deletions(-) diff --git a/engine.c b/engine.c index ea3ac40e..a73bf3ca 100644 --- a/engine.c +++ b/engine.c @@ -200,6 +200,8 @@ int Button_under_mouse(void) return -1; } +#define Pixel_in_skinmenu(x,y,color) Menu_bars[current_menu].skin[(y - y_off)*Menu_bars[current_menu].width + x] = color +#define Pixel_in_menu_and_skin(x,y,color) Pixel_in_skinmenu(x,y,color); Pixel_in_menu(x,y,color) ///Draw the frame for a menu button void Draw_menu_button_frame(byte btn_number,byte pressed) @@ -253,75 +255,59 @@ void Draw_menu_button_frame(byte btn_number,byte pressed) break; case BUTTON_SHAPE_RECTANGLE : // On colorie le point haut droit - Pixel_in_menu(end_x,start_y,color_diagonal); - Gfx->Menu_block[start_y][end_x]=color_diagonal; + Pixel_in_menu_and_skin(end_x,start_y,color_diagonal); // On colorie le point bas gauche - Pixel_in_menu(start_x,end_y,color_diagonal); - Gfx->Menu_block[end_y][start_x]=color_diagonal; + Pixel_in_menu_and_skin(start_x,end_y,color_diagonal); // On colorie la partie haute for (x_pos=start_x;x_pos<=end_x-1;x_pos++) { - Pixel_in_menu(x_pos,start_y,color_top_left); - Gfx->Menu_block[start_y][x_pos]=color_top_left; + Pixel_in_menu_and_skin(x_pos,start_y,color_top_left); } for (y_pos=start_y+1;y_pos<=end_y-1;y_pos++) { // On colorie la partie gauche - Pixel_in_menu(start_x,y_pos,color_top_left); - Gfx->Menu_block[y_pos][start_x]=color_top_left; + Pixel_in_menu_and_skin(start_x,y_pos,color_top_left); // On colorie la partie droite - Pixel_in_menu(end_x,y_pos,color_bottom_right); - Gfx->Menu_block[y_pos][end_x]=color_bottom_right; + Pixel_in_menu_and_skin(end_x,y_pos,color_bottom_right); } // On colorie la partie basse for (x_pos=start_x+1;x_pos<=end_x;x_pos++) { - Pixel_in_menu(x_pos,end_y,color_bottom_right); - Gfx->Menu_block[end_y][x_pos]=color_bottom_right; + Pixel_in_menu_and_skin(x_pos,end_y,color_bottom_right); } break; case BUTTON_SHAPE_TRIANGLE_TOP_LEFT: // On colorie le point haut droit - Pixel_in_menu(end_x,start_y,color_diagonal); - Gfx->Menu_block[start_y][end_x]=color_diagonal; + Pixel_in_menu_and_skin(end_x,start_y,color_diagonal); // On colorie le point bas gauche - Pixel_in_menu(start_x,end_y,color_diagonal); - Gfx->Menu_block[end_y][start_x]=color_diagonal; + Pixel_in_menu_and_skin(start_x,end_y,color_diagonal); // On colorie le coin haut gauche for (x_pos=0;x_posMenu_block[start_y][start_x+x_pos]=color_top_left; - Pixel_in_menu(start_x,start_y+x_pos,color_top_left); - Gfx->Menu_block[start_y+x_pos][start_x]=color_top_left; + Pixel_in_menu_and_skin(start_x+x_pos,start_y,color_top_left); + Pixel_in_menu_and_skin(start_x,start_y+x_pos,color_top_left); } // On colorie la diagonale for (x_pos=1;x_posMenu_block[end_y-x_pos][start_x+x_pos]=color_bottom_right; + Pixel_in_menu_and_skin(start_x+x_pos,end_y-x_pos,color_bottom_right); } break; case BUTTON_SHAPE_TRIANGLE_BOTTOM_RIGHT: // On colorie le point haut droit - Pixel_in_menu(end_x,start_y,color_diagonal); - Gfx->Menu_block[start_y][end_x]=color_diagonal; + Pixel_in_menu_and_skin(end_x,start_y,color_diagonal); // On colorie le point bas gauche - Pixel_in_menu(start_x,end_y,color_diagonal); - Gfx->Menu_block[end_y][start_x]=color_diagonal; + Pixel_in_menu_and_skin(start_x,end_y,color_diagonal); // On colorie la diagonale for (x_pos=1;x_posMenu_block[end_y-x_pos][start_x+x_pos]=color_top_left; + Pixel_in_menu_and_skin(start_x+x_pos,end_y-x_pos,color_top_left); } // On colorie le coin bas droite for (x_pos=0;x_posMenu_block[end_y][end_x-x_pos]=color_bottom_right; - Pixel_in_menu(end_x,end_y-x_pos,color_bottom_right); - Gfx->Menu_block[end_y-x_pos][end_x]=color_bottom_right; + Pixel_in_menu_and_skin(end_x-x_pos,end_y,color_bottom_right); + Pixel_in_menu_and_skin(end_x,end_y-x_pos,color_bottom_right); } } if (Menu_is_visible)