82 lines
1.7 KiB
C
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;
|
|
}
|