From 5a8aa57ae9dd4f113007ec302cbe6c090a5103a7 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 25 Mar 2013 17:47:24 +0100 Subject: [PATCH] (RMenu) Cleanups --- frontend/menu/rmenu.c | 176 +++++++++++++++++++++++++++---- frontend/menu/utils/menu_stack.c | 48 --------- frontend/menu/utils/menu_stack.h | 4 - 3 files changed, 157 insertions(+), 71 deletions(-) diff --git a/frontend/menu/rmenu.c b/frontend/menu/rmenu.c index ab494f1252..7e9e9c65ae 100644 --- a/frontend/menu/rmenu.c +++ b/frontend/menu/rmenu.c @@ -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; diff --git a/frontend/menu/utils/menu_stack.c b/frontend/menu/utils/menu_stack.c index 6516af518c..1610577ccc 100644 --- a/frontend/menu/utils/menu_stack.c +++ b/frontend/menu/utils/menu_stack.c @@ -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; diff --git a/frontend/menu/utils/menu_stack.h b/frontend/menu/utils/menu_stack.h index 2f5474bef2..74009ac166 100644 --- a/frontend/menu/utils/menu_stack.h +++ b/frontend/menu/utils/menu_stack.h @@ -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;