#include #include #include "include/image.h" #include "include/menu_struct.h" #include "include/main.h" int InitMenu(char *file, struct menu *menu_t_, int x, int y, int depth) { menu_t_->screen = SDL_SetVideoMode (x, y, depth, SDL_HWSURFACE); SDL_WM_SetCaption("Al", NULL); menu_t_->nb_sections = 0; AfficherBMP_menu(file,menu_t_->screen,0,0); return 0; } void AddSectionMenu(char *file1,char *file2, struct menu *menu_t_,int x, int y, int (*action)(void)) { menu_t_->entry_[menu_t_->nb_sections] = malloc(sizeof(struct entry)); menu_t_->entry_[menu_t_->nb_sections]->sprite_surface[0] = SDL_LoadBMP(file1); if (menu_t_->entry_[menu_t_->nb_sections]->sprite_surface[0] == NULL) { printf ("Impossible de charger %s: %s\n", file1, SDL_GetError ()); exit(0); } menu_t_->entry_[menu_t_->nb_sections]->sprite_surface[1] = SDL_LoadBMP(file2); if (menu_t_->entry_[menu_t_->nb_sections]->sprite_surface[1] == NULL) { printf ("Impossible de charger %s: %s\n", file2, SDL_GetError ()); exit(0); } menu_t_->entry_[menu_t_->nb_sections]->sprite_rect.h = menu_t_->entry_[menu_t_->nb_sections]->sprite_surface[0]->h; menu_t_->entry_[menu_t_->nb_sections]->sprite_rect.w = menu_t_->entry_[menu_t_->nb_sections]->sprite_surface[0]->w; menu_t_->entry_[menu_t_->nb_sections]->sprite_rect.x = x; menu_t_->entry_[menu_t_->nb_sections]->sprite_rect.y = y; menu_t_->entry_[menu_t_->nb_sections]->num = menu_t_->nb_sections; menu_t_->entry_[menu_t_->nb_sections]->active = 0; menu_t_->entry_[menu_t_->nb_sections]->action = action; printf("Menu files : %s/%s\n\ menu_t_->entry_[menu_t_->nb_sections]->sprite_rect.h : %d\n\ menu_t_->entry_[menu_t_->nb_sections]->sprite_rect.w : %d\n\ menu_t_->entry_[menu_t_->nb_sections]->sprite_rect.x : %d\n\ menu_t_->entry_[menu_t_->nb_sections]->sprite_rect.y : %d\n\ menu_t_->entry_[menu_t_->nb_sections]->num : %d\n\ ",file1,file2,menu_t_->entry_[menu_t_->nb_sections]->sprite_rect.h, menu_t_->entry_[menu_t_->nb_sections]->sprite_rect.w, menu_t_->entry_[menu_t_->nb_sections]->sprite_rect.x, menu_t_->entry_[menu_t_->nb_sections]->sprite_rect.y, menu_t_->entry_[menu_t_->nb_sections]->num); menu_t_->nb_sections++; } void AfficherMenu(struct menu *menu_t_) { unsigned short ib; for(ib=0; ib < menu_t_->nb_sections; ib++) { if(menu_t_->entry_[ib]->num==0) { menu_t_->entry_[ib]->active=1; SDL_SetColorKey (menu_t_->entry_[ib]->sprite_surface[1], SDL_SRCCOLORKEY, SDL_MapRGB (menu_t_->entry_[ib]->sprite_surface[0]->format, 255, 0, 0)); SDL_BlitSurface (menu_t_->entry_[ib]->sprite_surface[1], NULL,menu_t_->screen, &menu_t_->entry_[ib]->sprite_rect); SDL_UpdateRects (menu_t_->screen, 1, &menu_t_->entry_[ib]->sprite_rect); } else { SDL_SetColorKey (menu_t_->entry_[ib]->sprite_surface[0], SDL_SRCCOLORKEY, SDL_MapRGB (menu_t_->entry_[ib]->sprite_surface[0]->format, 255, 0, 0)); SDL_BlitSurface (menu_t_->entry_[ib]->sprite_surface[0], NULL,menu_t_->screen, &menu_t_->entry_[ib]->sprite_rect); SDL_UpdateRects (menu_t_->screen, 1, &menu_t_->entry_[ib]->sprite_rect); } printf("Section menu [%d] affichee !\n", ib); } } void ActiverSectionSuivante(struct menu *menu_t_) { short i; short prochaine_section = 0; for(i=0;i < menu_t_->nb_sections; i++) { if(menu_t_->entry_[i]->active == 1) { prochaine_section = (i+1); if(prochaine_section >= menu_t_->nb_sections) { prochaine_section = 0; } break; } } printf("(Suivante) Prochaine Section = %d\n",prochaine_section); menu_t_->entry_[i]->active=0; SDL_SetColorKey (menu_t_->entry_[i]->sprite_surface[0], SDL_SRCCOLORKEY, SDL_MapRGB (menu_t_->entry_[i]->sprite_surface[0]->format, 255, 0, 0)); SDL_BlitSurface (menu_t_->entry_[i]->sprite_surface[0], NULL,menu_t_->screen, &menu_t_->entry_[i]->sprite_rect); SDL_UpdateRects (menu_t_->screen, 1, &menu_t_->entry_[i]->sprite_rect); menu_t_->entry_[prochaine_section]->active=1; SDL_SetColorKey (menu_t_->entry_[prochaine_section]->sprite_surface[1], SDL_SRCCOLORKEY, SDL_MapRGB (menu_t_->entry_[prochaine_section]->sprite_surface[1]->format, 255, 0, 0)); SDL_BlitSurface (menu_t_->entry_[prochaine_section]->sprite_surface[1], NULL,menu_t_->screen, &menu_t_->entry_[prochaine_section]->sprite_rect); SDL_UpdateRects (menu_t_->screen, 1, &menu_t_->entry_[prochaine_section]->sprite_rect); } void ActiverSectionPrecedente(struct menu *menu_t_) { short i; short prochaine_section = 0; for(i=0;i < menu_t_->nb_sections; i++) { if(menu_t_->entry_[i]->active == 1) { prochaine_section = (i-1); if(prochaine_section < 0) { prochaine_section = ((menu_t_->nb_sections)-1); } break; } } printf("(Precedente) Prochaine Section = %d\n",prochaine_section); menu_t_->entry_[i]->active=0; SDL_SetColorKey (menu_t_->entry_[i]->sprite_surface[0], SDL_SRCCOLORKEY, SDL_MapRGB (menu_t_->entry_[i]->sprite_surface[0]->format, 255, 0, 0)); SDL_BlitSurface (menu_t_->entry_[i]->sprite_surface[0], NULL,menu_t_->screen, &menu_t_->entry_[i]->sprite_rect); SDL_UpdateRects (menu_t_->screen, 1, &menu_t_->entry_[i]->sprite_rect); menu_t_->entry_[prochaine_section]->active=1; SDL_SetColorKey (menu_t_->entry_[prochaine_section]->sprite_surface[1], SDL_SRCCOLORKEY, SDL_MapRGB (menu_t_->entry_[prochaine_section]->sprite_surface[1]->format, 255, 0, 0)); SDL_BlitSurface (menu_t_->entry_[prochaine_section]->sprite_surface[1], NULL,menu_t_->screen, &menu_t_->entry_[prochaine_section]->sprite_rect); SDL_UpdateRects (menu_t_->screen, 1, &menu_t_->entry_[prochaine_section]->sprite_rect); } void FreeMenu(struct menu *menu_t_) { unsigned short i; for(i=0; i < menu_t_->nb_sections; i++) { SDL_FreeSurface(menu_t_->entry_[i]->sprite_surface[0]); SDL_FreeSurface(menu_t_->entry_[i]->sprite_surface[1]); free(menu_t_->entry_[i]); } SDL_FreeSurface(menu_t_->screen); } unsigned short ReturnActiveSectionMenu(struct menu *menu_t_) { unsigned short i; for(i=0;i < menu_t_->nb_sections; i++) { if(menu_t_->entry_[i]->active == 1) { return i; } } return 0; }