Hex/src/menu.c
Tropicananass b8a36bc685 almost
2016-05-10 18:49:55 +02:00

82 lines
1.7 KiB
C

/*
* menu.c
*
* Created on: 9 mai 2016
* Author: nathan
*/
#include "menu.h"
#include "action_menu.h"
#include "affichage_menu.h"
#include "window.h"
menu_t init_menu (SDL_Surface* window, char** entries)
{
menu_t m = malloc (sizeof (struct s_menu));
m->entries = entries;
m->nb_entries = 5;
m->window = window;
m->cur.x = 1;
m->cur.y = 1;
m->c = 0;
return m;
}
void free_menu (menu_t m)
{
free (m);
}
int evenement_menu (SDL_Surface* window, menu_t m, SDL_Event event, bool persist_select)
{
switch (event.type)
{
case SDL_VIDEORESIZE:
resize_window(window, &event);
Affiche_menu (m);
break;
case SDL_KEYDOWN:
if (event.key.keysym.sym == SDLK_f)
{
window = fullscreen_window(window);
Affiche_menu (m);
}
else if (event.key.keysym.sym == SDLK_RETURN)
return selection_menu (m);
else if (SDLK_UP <= event.key.keysym.sym && event.key.keysym.sym <= SDLK_LEFT)
deplacement_menu_key (m, event.key.keysym.sym);
else
east1 (window, event.key.keysym.sym);
break;
case SDL_MOUSEBUTTONDOWN:
return selection_menu (m);
break;
case SDL_MOUSEMOTION:
deplacement_menu_mouse (m, &event);
break;
default:
{
Uint8 *keyboard = SDL_GetKeyState(NULL);
if (keyboard [SDLK_UP])
deplacement_menu_key (m, SDLK_UP);
if (keyboard [SDLK_DOWN])
deplacement_menu_key (m, SDLK_DOWN);
if (keyboard [SDLK_LEFT])
deplacement_menu_key (m, SDLK_LEFT);
if (keyboard [SDLK_RIGHT])
deplacement_menu_key (m, SDLK_RIGHT);
if (persist_select)
{
if (keyboard [SDLK_RETURN])
return selection_menu (m);
if (SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(SDL_BUTTON_LEFT))
return selection_menu (m);
}
}
}
return M_NOT;
}