(RMenu) Cleanups

This commit is contained in:
twinaphex 2013-03-25 17:47:24 +01:00
parent 773c511179
commit 5a8aa57ae9
3 changed files with 157 additions and 71 deletions

View File

@ -698,6 +698,7 @@ static void populate_setting_item(void *data, unsigned input)
static void display_menubar(void *data)
{
char title[32];
menu *current_menu = (menu*)data;
DEVICE_CAST device_ptr = (DEVICE_CAST)driver.video_data;
filebrowser_t *fb = browser;
@ -760,6 +761,67 @@ static void display_menubar(void *data)
break;
}
switch(current_menu->enum_id)
{
case SHADER_CHOICE:
strlcpy(title, "Shaders", sizeof(title));
break;
case PRESET_CHOICE:
strlcpy(title, "Shader", sizeof(title));
break;
case BORDER_CHOICE:
strlcpy(title, "Borders", sizeof(title));
break;
case LIBRETRO_CHOICE:
strlcpy(title, "Libretro", sizeof(title));
break;
case INPUT_PRESET_CHOICE:
strlcpy(title, "Input", sizeof(title));
break;
case PATH_SAVESTATES_DIR_CHOICE:
case PATH_DEFAULT_ROM_DIR_CHOICE:
#ifdef HAVE_XML
case PATH_CHEATS_DIR_CHOICE:
#endif
case PATH_SRAM_DIR_CHOICE:
case PATH_SYSTEM_DIR_CHOICE:
strlcpy(title, "Path", sizeof(title));
break;
case INGAME_MENU:
strlcpy(title, "Ingame Menu", sizeof(title));
break;
case INGAME_MENU_RESIZE:
strlcpy(title, "Resize Menu", sizeof(title));
break;
case INGAME_MENU_SCREENSHOT:
strlcpy(title, "Ingame Menu", sizeof(title));
break;
case FILE_BROWSER_MENU:
strlcpy(title, "Filebrowser", sizeof(title));
break;
case GENERAL_VIDEO_MENU:
strlcpy(title, "Video", sizeof(title));
break;
case GENERAL_AUDIO_MENU:
strlcpy(title, "Audio", sizeof(title));
break;
case EMU_GENERAL_MENU:
strlcpy(title, "Retro", sizeof(title));
break;
case EMU_VIDEO_MENU:
strlcpy(title, "Retro Video", sizeof(title));
break;
case EMU_AUDIO_MENU:
strlcpy(title, "Retro Audio", sizeof(title));
break;
case PATH_MENU:
strlcpy(title, "Path", sizeof(title));
break;
case CONTROLS_MENU:
strlcpy(title, "Controls", sizeof(title));
break;
}
switch(current_menu->enum_id)
{
case SHADER_CHOICE:
@ -781,8 +843,6 @@ static void display_menubar(void *data)
if (driver.video_poke->set_osd_msg)
driver.video_poke->set_osd_msg(driver.video_data, msg, &font_parms);
break;
default:
break;
}
rarch_position_t position = {0};
@ -803,7 +863,7 @@ static void display_menubar(void *data)
font_parms.color = WHITE;
if (driver.video_poke->set_osd_msg)
driver.video_poke->set_osd_msg(driver.video_data, current_menu->title, &font_parms);
driver.video_poke->set_osd_msg(driver.video_data, title, &font_parms);
font_parms.x = 0.80f;
font_parms.y = 0.015f;
@ -2189,6 +2249,10 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input)
static int select_setting(void *data, void *state)
{
static unsigned first_setting = FIRST_VIDEO_SETTING;
static unsigned selected = 0;
unsigned max_settings = 0;
menu *current_menu = (menu*)data;
rmenu_state_t *rstate = (rmenu_state_t*)state;
font_params_t font_parms = {0};
@ -2197,17 +2261,51 @@ static int select_setting(void *data, void *state)
int ret = 0;
DEVICE_CAST device_ptr = (DEVICE_CAST)driver.video_data;
item *items = (item*)malloc(current_menu->max_settings * sizeof(*items));
switch (current_menu->enum_id)
{
case GENERAL_VIDEO_MENU:
first_setting = FIRST_VIDEO_SETTING;
max_settings = MAX_NO_OF_VIDEO_SETTINGS;
break;
case GENERAL_AUDIO_MENU:
first_setting = FIRST_AUDIO_SETTING;
max_settings = MAX_NO_OF_AUDIO_SETTINGS;
break;
case EMU_GENERAL_MENU:
first_setting = FIRST_EMU_SETTING;
max_settings = MAX_NO_OF_EMU_SETTINGS;
break;
case EMU_VIDEO_MENU:
first_setting = FIRST_EMU_VIDEO_SETTING;
max_settings = MAX_NO_OF_EMU_VIDEO_SETTINGS;
break;
case EMU_AUDIO_MENU:
first_setting = FIRST_EMU_AUDIO_SETTING;
max_settings = MAX_NO_OF_EMU_AUDIO_SETTINGS;
break;
case PATH_MENU:
first_setting = FIRST_PATH_SETTING;
max_settings = MAX_NO_OF_PATH_SETTINGS;
break;
case CONTROLS_MENU:
first_setting = FIRST_CONTROLS_SETTING_PAGE_1;
max_settings = MAX_NO_OF_CONTROLS_SETTINGS;
break;
}
item *items = (item*)malloc(max_settings * sizeof(*items));
unsigned i;
char msg[256];
rmenu_default_positions_t default_pos;
menu_set_default_pos(&default_pos);
unsigned j = 0;
int page = 0;
for(i = current_menu->first_setting; i < current_menu->max_settings; i++)
for(i = first_setting; i < max_settings; i++)
{
populate_setting_item(&items[i], i);
@ -2223,17 +2321,57 @@ static int select_setting(void *data, void *state)
/* back to ROM menu if CIRCLE is pressed */
if ((input & (1ULL << RMENU_DEVICE_NAV_L1)) || (input & (1ULL << RMENU_DEVICE_NAV_A)))
{
switch(current_menu->enum_id)
{
case GENERAL_VIDEO_MENU:
break;
case GENERAL_AUDIO_MENU:
selected = FIRST_VIDEO_SETTING;
break;
case EMU_GENERAL_MENU:
selected = FIRST_AUDIO_SETTING;
break;
case EMU_VIDEO_MENU:
selected = FIRST_EMU_SETTING;
break;
case EMU_AUDIO_MENU:
selected = FIRST_EMU_VIDEO_SETTING;
break;
case PATH_MENU:
selected = FIRST_EMU_AUDIO_SETTING;
break;
case CONTROLS_MENU:
selected = FIRST_PATH_SETTING;
break;
default:
break;
}
menu_stack_pop();
}
else if (input & (1ULL << RMENU_DEVICE_NAV_R1))
{
switch(current_menu->enum_id)
{
case GENERAL_VIDEO_MENU:
if (current_menu->enum_id == GENERAL_VIDEO_MENU)
selected = FIRST_AUDIO_SETTING;
case GENERAL_AUDIO_MENU:
if (current_menu->enum_id == GENERAL_AUDIO_MENU)
selected = FIRST_EMU_SETTING;
case EMU_GENERAL_MENU:
if (current_menu->enum_id == EMU_GENERAL_MENU)
selected = FIRST_EMU_VIDEO_SETTING;
case EMU_VIDEO_MENU:
if (current_menu->enum_id == EMU_VIDEO_MENU)
selected = FIRST_EMU_AUDIO_SETTING;
case EMU_AUDIO_MENU:
if (current_menu->enum_id == EMU_AUDIO_MENU)
selected = FIRST_PATH_SETTING;
case PATH_MENU:
if (current_menu->enum_id == PATH_MENU)
selected = FIRST_CONTROLS_SETTING_PAGE_1;
menu_stack_push(current_menu->enum_id + 1);
break;
case CONTROLS_MENU:
@ -2243,32 +2381,32 @@ static int select_setting(void *data, void *state)
}
else if (input & (1ULL << RMENU_DEVICE_NAV_DOWN))
{
current_menu->selected++;
selected++;
if (current_menu->selected >= current_menu->max_settings)
current_menu->selected = current_menu->first_setting;
if (items[current_menu->selected].page != current_menu->page)
current_menu->page = items[current_menu->selected].page;
if (selected >= max_settings)
selected = first_setting;
if (items[selected].page != current_menu->page)
current_menu->page = items[selected].page;
}
else if (input & (1ULL << RMENU_DEVICE_NAV_UP))
{
if (current_menu->selected == current_menu->first_setting)
current_menu->selected = current_menu->max_settings-1;
if (selected == first_setting)
selected = max_settings-1;
else
current_menu->selected--;
selected--;
if (items[current_menu->selected].page != current_menu->page)
current_menu->page = items[current_menu->selected].page;
if (items[selected].page != current_menu->page)
current_menu->page = items[selected].page;
}
ret = set_setting_action(current_menu, current_menu->selected, input);
ret = set_setting_action(current_menu, selected, input);
if (ret != 0)
return ret;
display_menubar(current_menu);
for(i = current_menu->first_setting; i < current_menu->max_settings; i++)
for(i = first_setting; i < max_settings; i++)
{
if(items[i].page == current_menu->page)
{
@ -2277,7 +2415,7 @@ static int select_setting(void *data, void *state)
font_parms.x = default_pos.x_position;
font_parms.y = default_pos.starting_y_position;
font_parms.scale = default_pos.variable_font_size;
font_parms.color = current_menu->selected == items[i].enum_id ? YELLOW : WHITE;
font_parms.color = selected == items[i].enum_id ? YELLOW : WHITE;
if (driver.video_poke->set_osd_msg)
driver.video_poke->set_osd_msg(driver.video_data, items[i].text, &font_parms);
@ -2288,7 +2426,7 @@ static int select_setting(void *data, void *state)
if (driver.video_poke->set_osd_msg)
driver.video_poke->set_osd_msg(driver.video_data, items[i].setting_text, &font_parms);
if(current_menu->selected == items[i].enum_id)
if(selected == items[i].enum_id)
{
rarch_position_t position = {0};
position.x = default_pos.x_position;

View File

@ -54,73 +54,55 @@ static void menu_stack_get_current_ptr(menu *current_menu)
switch(menu_id)
{
case INGAME_MENU:
strlcpy(current_menu->title, "Ingame Menu", sizeof(current_menu->title));
current_menu->enum_id = menu_id;
current_menu->selected = 0;
current_menu->page = 0;
current_menu->category_id = CATEGORY_INGAME_MENU;
current_menu->entry = ingame_menu;
break;
case INGAME_MENU_RESIZE:
strlcpy(current_menu->title, "Resize Menu", sizeof(current_menu->title));
current_menu->enum_id = INGAME_MENU_RESIZE;
current_menu->selected = 0;
current_menu->page = 0;
current_menu->category_id = CATEGORY_INGAME_MENU;
current_menu->entry = ingame_menu_resize;
break;
case INGAME_MENU_SCREENSHOT:
strlcpy(current_menu->title, "Ingame Menu", sizeof(current_menu->title));
current_menu->enum_id = menu_id;
current_menu->selected = 0;
current_menu->page = 0;
current_menu->category_id = CATEGORY_INGAME_MENU;
current_menu->entry = ingame_menu_screenshot;
break;
case FILE_BROWSER_MENU:
strlcpy(current_menu->title, "Filebrowser", sizeof(current_menu->title));
current_menu->enum_id = menu_id;
current_menu->selected = 0;
current_menu->page = 0;
current_menu->category_id = CATEGORY_FILEBROWSER;
current_menu->entry = select_rom;
break;
case LIBRETRO_CHOICE:
strlcpy(current_menu->title, "Libretro", sizeof(current_menu->title));
current_menu->enum_id = menu_id;
current_menu->selected = 0;
current_menu->page = 0;
current_menu->category_id = CATEGORY_FILEBROWSER;
current_menu->entry = select_file;
break;
case PRESET_CHOICE:
strlcpy(current_menu->title, "Shader", sizeof(current_menu->title));
current_menu->enum_id = menu_id;
current_menu->selected = 0;
current_menu->page = 0;
current_menu->category_id = CATEGORY_FILEBROWSER;
current_menu->entry = select_file;
break;
case INPUT_PRESET_CHOICE:
strlcpy(current_menu->title, "Input", sizeof(current_menu->title));
current_menu->enum_id = menu_id;
current_menu->selected = 0;
current_menu->page = 0;
current_menu->category_id = CATEGORY_FILEBROWSER;
current_menu->entry = select_file;
break;
case SHADER_CHOICE:
strlcpy(current_menu->title, "Shaders", sizeof(current_menu->title));
current_menu->enum_id = menu_id;
current_menu->selected = 0;
current_menu->page = 0;
current_menu->category_id = CATEGORY_FILEBROWSER;
current_menu->entry = select_file;
break;
case BORDER_CHOICE:
strlcpy(current_menu->title, "Borders", sizeof(current_menu->title));
current_menu->enum_id = menu_id;
current_menu->selected = 0;
current_menu->page = 0;
current_menu->category_id = CATEGORY_FILEBROWSER;
current_menu->entry = select_file;
@ -132,80 +114,50 @@ static void menu_stack_get_current_ptr(menu *current_menu)
case PATH_CHEATS_DIR_CHOICE:
#endif
case PATH_SYSTEM_DIR_CHOICE:
strlcpy(current_menu->title, "Path", sizeof(current_menu->title));
current_menu->enum_id = menu_id;
current_menu->selected = 0;
current_menu->page = 0;
current_menu->category_id = CATEGORY_FILEBROWSER;
current_menu->entry = select_directory;
break;
case GENERAL_VIDEO_MENU:
strlcpy(current_menu->title, "Video", sizeof(current_menu->title));
current_menu->enum_id = GENERAL_VIDEO_MENU;
current_menu->selected = FIRST_VIDEO_SETTING;
current_menu->page = 0;
current_menu->first_setting = FIRST_VIDEO_SETTING;
current_menu->max_settings = MAX_NO_OF_VIDEO_SETTINGS;
current_menu->category_id = CATEGORY_SETTINGS;
current_menu->entry = select_setting;
break;
case GENERAL_AUDIO_MENU:
strlcpy(current_menu->title, "Audio", sizeof(current_menu->title));
current_menu->enum_id = GENERAL_AUDIO_MENU;
current_menu->selected = FIRST_AUDIO_SETTING;
current_menu->page = 0;
current_menu->first_setting = FIRST_AUDIO_SETTING;
current_menu->max_settings = MAX_NO_OF_AUDIO_SETTINGS;
current_menu->category_id = CATEGORY_SETTINGS;
current_menu->entry = select_setting;
break;
case EMU_GENERAL_MENU:
strlcpy(current_menu->title, "Retro", sizeof(current_menu->title));
current_menu->enum_id = EMU_GENERAL_MENU;
current_menu->selected = FIRST_EMU_SETTING;
current_menu->page = 0;
current_menu->first_setting = FIRST_EMU_SETTING;
current_menu->max_settings = MAX_NO_OF_EMU_SETTINGS;
current_menu->category_id = CATEGORY_SETTINGS;
current_menu->entry = select_setting;
break;
case EMU_VIDEO_MENU:
strlcpy(current_menu->title, "Retro Video", sizeof(current_menu->title));
current_menu->enum_id = EMU_VIDEO_MENU;
current_menu->selected = FIRST_EMU_VIDEO_SETTING;
current_menu->page = 0;
current_menu->first_setting = FIRST_EMU_VIDEO_SETTING;
current_menu->max_settings = MAX_NO_OF_EMU_VIDEO_SETTINGS;
current_menu->category_id = CATEGORY_SETTINGS;
current_menu->entry = select_setting;
break;
case EMU_AUDIO_MENU:
strlcpy(current_menu->title, "Retro Audio", sizeof(current_menu->title));
current_menu->enum_id = EMU_AUDIO_MENU;
current_menu->selected = FIRST_EMU_AUDIO_SETTING;
current_menu->page = 0;
current_menu->first_setting = FIRST_EMU_AUDIO_SETTING;
current_menu->max_settings = MAX_NO_OF_EMU_AUDIO_SETTINGS;
current_menu->category_id = CATEGORY_SETTINGS;
current_menu->entry = select_setting;
break;
case PATH_MENU:
strlcpy(current_menu->title, "Path", sizeof(current_menu->title));
current_menu->enum_id = PATH_MENU;
current_menu->selected = FIRST_PATH_SETTING;
current_menu->page = 0;
current_menu->first_setting = FIRST_PATH_SETTING;
current_menu->max_settings = MAX_NO_OF_PATH_SETTINGS;
current_menu->category_id = CATEGORY_SETTINGS;
current_menu->entry = select_setting;
break;
case CONTROLS_MENU:
strlcpy(current_menu->title, "Controls", sizeof(current_menu->title));
current_menu->enum_id = CONTROLS_MENU;
current_menu->selected = FIRST_CONTROLS_SETTING_PAGE_1;
current_menu->page = 0;
current_menu->first_setting = FIRST_CONTROLS_SETTING_PAGE_1;
current_menu->max_settings = MAX_NO_OF_CONTROLS_SETTINGS;
current_menu->category_id = CATEGORY_SETTINGS;
current_menu->entry = select_setting;
break;

View File

@ -19,12 +19,8 @@
typedef struct
{
char title[32];
unsigned char enum_id;
unsigned char selected;
unsigned char page;
unsigned char first_setting;
unsigned char max_settings;
unsigned char category_id;
int (*entry)(void *data, void *state);
} menu;