From 435eec44f07b40f0a62237a5d806882b79fcc1b6 Mon Sep 17 00:00:00 2001 From: Themaister Date: Thu, 4 Apr 2013 21:47:37 +0200 Subject: [PATCH] Start adding core options to RGUI. Broken atm. --- frontend/menu/rgui.c | 299 +++++++++++++++++++++++-------------------- frontend/menu/rgui.h | 3 + 2 files changed, 165 insertions(+), 137 deletions(-) diff --git a/frontend/menu/rgui.c b/frontend/menu/rgui.c index 1879d43968..c96bd229b2 100644 --- a/frontend/menu/rgui.c +++ b/frontend/menu/rgui.c @@ -365,8 +365,9 @@ static void render_text(rgui_handle_t *rgui) if (menu_type == RGUI_SETTINGS_CORE) strlcpy(title, "CORE SELECTION", sizeof(title)); - else - if ((menu_type >= RGUI_SETTINGS_CONTROLLER_1 && menu_type <= RGUI_SETTINGS_CONTROLLER_4) || + else if (menu_type == RGUI_SETTINGS_CORE_OPTIONS) + strlcpy(title, "CORE OPTIONS", sizeof(title)); + else if ((menu_type >= RGUI_SETTINGS_CONTROLLER_1 && menu_type <= RGUI_SETTINGS_CONTROLLER_4) || (menu_type == RGUI_SETTINGS_CUSTOM_VIEWPORT || menu_type == RGUI_SETTINGS_CUSTOM_VIEWPORT_2) || menu_type == RGUI_SETTINGS) snprintf(title, sizeof(title), "SETTINGS: %s", dir); @@ -392,142 +393,151 @@ static void render_text(rgui_handle_t *rgui) char type_str[256]; int w = (menu_type >= RGUI_SETTINGS_CONTROLLER_1 && menu_type <= RGUI_SETTINGS_CONTROLLER_4) ? 26 : 19; unsigned port = menu_type - RGUI_SETTINGS_CONTROLLER_1; - switch (type) + + if (type >= RGUI_SETTINGS_CORE_OPTION_START) { - case RGUI_FILE_PLAIN: - strlcpy(type_str, "(FILE)", sizeof(type_str)); - w = 6; - break; - case RGUI_FILE_DIRECTORY: - strlcpy(type_str, "(DIR)", sizeof(type_str)); - w = 5; - break; - case RGUI_FILE_DEVICE: - strlcpy(type_str, "(DEV)", sizeof(type_str)); - w = 5; - break; - case RGUI_SETTINGS_REWIND_ENABLE: - if (g_settings.rewind_enable) - strlcpy(type_str, "ON", sizeof(type_str)); - else - strlcpy(type_str, "OFF", sizeof(type_str)); - break; - case RGUI_SETTINGS_REWIND_GRANULARITY: - snprintf(type_str, sizeof(type_str), "%d", g_settings.rewind_granularity); - break; - case RGUI_SETTINGS_SAVESTATE_SAVE: - case RGUI_SETTINGS_SAVESTATE_LOAD: - snprintf(type_str, sizeof(type_str), "%d", g_extern.state_slot); - break; - case RGUI_SETTINGS_VIDEO_FILTER: - if (g_settings.video.smooth) - strlcpy(type_str, "Bilinear filtering", sizeof(type_str)); - else - strlcpy(type_str, "Point filtering", sizeof(type_str)); - break; - case RGUI_SETTINGS_VIDEO_SOFT_FILTER: - snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_VIDEO_SOFT_FILTER_ENABLE)) ? "ON" : "OFF"); - break; -#ifdef GEKKO - case RGUI_SETTINGS_VIDEO_RESOLUTION: - strlcpy(type_str, gx_get_video_mode(), sizeof(type_str)); - break; -#endif - case RGUI_SETTINGS_VIDEO_GAMMA: - snprintf(type_str, sizeof(type_str), "%d", g_extern.console.screen.gamma_correction); - break; - case RGUI_SETTINGS_VIDEO_ASPECT_RATIO: - strlcpy(type_str, aspectratio_lut[g_settings.video.aspect_ratio_idx].name, sizeof(type_str)); - break; - case RGUI_SETTINGS_VIDEO_OVERSCAN: - snprintf(type_str, sizeof(type_str), "%.2f", g_extern.console.screen.overscan_amount); - break; - case RGUI_SETTINGS_VIDEO_ROTATION: - snprintf(type_str, sizeof(type_str), "Rotation: %s", - rotation_lut[g_extern.console.screen.orientation]); - break; - case RGUI_SETTINGS_AUDIO_MUTE: - if (g_extern.audio_data.mute) - strlcpy(type_str, "ON", sizeof(type_str)); - else - strlcpy(type_str, "OFF", sizeof(type_str)); - break; - case RGUI_SETTINGS_AUDIO_CONTROL_RATE: - snprintf(type_str, sizeof(type_str), "%.3f", g_settings.audio.rate_control_delta); - break; - case RGUI_SETTINGS_RESAMPLER_TYPE: - if (strstr(g_settings.audio.resampler, "sinc")) - strlcpy(type_str, "Sinc", sizeof(type_str)); - else - strlcpy(type_str, "Hermite", sizeof(type_str)); - break; - case RGUI_SETTINGS_SRAM_DIR: - snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE)) ? "ON" : "OFF"); - break; - case RGUI_SETTINGS_STATE_DIR: - snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE)) ? "ON" : "OFF"); - break; - case RGUI_SETTINGS_DEBUG_TEXT: - snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_FPS_DRAW)) ? "ON" : "OFF"); - break; - case RGUI_SETTINGS_OPEN_FILEBROWSER: - case RGUI_SETTINGS_CUSTOM_VIEWPORT: - case RGUI_SETTINGS_CORE: - case RGUI_SETTINGS_CONTROLLER_1: - case RGUI_SETTINGS_CONTROLLER_2: - case RGUI_SETTINGS_CONTROLLER_3: - case RGUI_SETTINGS_CONTROLLER_4: - strlcpy(type_str, "...", sizeof(type_str)); - break; - case RGUI_SETTINGS_BIND_DEVICE: - strlcpy(type_str, g_settings.input.device_names[port], sizeof(type_str)); - break; - case RGUI_SETTINGS_BIND_DPAD_EMULATION: - switch(g_settings.input.dpad_emulation[port]) - { - case ANALOG_DPAD_NONE: - strlcpy(type_str, "None", sizeof(type_str)); - break; - case ANALOG_DPAD_LSTICK: - strlcpy(type_str, "Left Stick", sizeof(type_str)); - break; - case ANALOG_DPAD_RSTICK: - strlcpy(type_str, "Right Stick", sizeof(type_str)); - break; - } - break; - case RGUI_SETTINGS_BIND_UP: - case RGUI_SETTINGS_BIND_DOWN: - case RGUI_SETTINGS_BIND_LEFT: - case RGUI_SETTINGS_BIND_RIGHT: - case RGUI_SETTINGS_BIND_A: - case RGUI_SETTINGS_BIND_B: - case RGUI_SETTINGS_BIND_X: - case RGUI_SETTINGS_BIND_Y: - case RGUI_SETTINGS_BIND_START: - case RGUI_SETTINGS_BIND_SELECT: - case RGUI_SETTINGS_BIND_L: - case RGUI_SETTINGS_BIND_R: - case RGUI_SETTINGS_BIND_L2: - case RGUI_SETTINGS_BIND_R2: - case RGUI_SETTINGS_BIND_L3: - case RGUI_SETTINGS_BIND_R3: - { - unsigned id = rgui_controller_lut[type - RGUI_SETTINGS_BIND_UP]; - struct platform_bind key_label; - strlcpy(key_label.desc, "Unknown", sizeof(key_label.desc)); - key_label.joykey = g_settings.input.binds[port][id].joykey; + strlcpy(type_str, core_option_get_val(g_extern.system.core_options, type - RGUI_SETTINGS_CORE_OPTION_START), sizeof(type_str)); + } + else + { + switch (type) + { + case RGUI_FILE_PLAIN: + strlcpy(type_str, "(FILE)", sizeof(type_str)); + w = 6; + break; + case RGUI_FILE_DIRECTORY: + strlcpy(type_str, "(DIR)", sizeof(type_str)); + w = 5; + break; + case RGUI_FILE_DEVICE: + strlcpy(type_str, "(DEV)", sizeof(type_str)); + w = 5; + break; + case RGUI_SETTINGS_REWIND_ENABLE: + if (g_settings.rewind_enable) + strlcpy(type_str, "ON", sizeof(type_str)); + else + strlcpy(type_str, "OFF", sizeof(type_str)); + break; + case RGUI_SETTINGS_REWIND_GRANULARITY: + snprintf(type_str, sizeof(type_str), "%d", g_settings.rewind_granularity); + break; + case RGUI_SETTINGS_SAVESTATE_SAVE: + case RGUI_SETTINGS_SAVESTATE_LOAD: + snprintf(type_str, sizeof(type_str), "%d", g_extern.state_slot); + break; + case RGUI_SETTINGS_VIDEO_FILTER: + if (g_settings.video.smooth) + strlcpy(type_str, "Bilinear filtering", sizeof(type_str)); + else + strlcpy(type_str, "Point filtering", sizeof(type_str)); + break; + case RGUI_SETTINGS_VIDEO_SOFT_FILTER: + snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_VIDEO_SOFT_FILTER_ENABLE)) ? "ON" : "OFF"); + break; + #ifdef GEKKO + case RGUI_SETTINGS_VIDEO_RESOLUTION: + strlcpy(type_str, gx_get_video_mode(), sizeof(type_str)); + break; + #endif + case RGUI_SETTINGS_VIDEO_GAMMA: + snprintf(type_str, sizeof(type_str), "%d", g_extern.console.screen.gamma_correction); + break; + case RGUI_SETTINGS_VIDEO_ASPECT_RATIO: + strlcpy(type_str, aspectratio_lut[g_settings.video.aspect_ratio_idx].name, sizeof(type_str)); + break; + case RGUI_SETTINGS_VIDEO_OVERSCAN: + snprintf(type_str, sizeof(type_str), "%.2f", g_extern.console.screen.overscan_amount); + break; + case RGUI_SETTINGS_VIDEO_ROTATION: + snprintf(type_str, sizeof(type_str), "Rotation: %s", + rotation_lut[g_extern.console.screen.orientation]); + break; + case RGUI_SETTINGS_AUDIO_MUTE: + if (g_extern.audio_data.mute) + strlcpy(type_str, "ON", sizeof(type_str)); + else + strlcpy(type_str, "OFF", sizeof(type_str)); + break; + case RGUI_SETTINGS_AUDIO_CONTROL_RATE: + snprintf(type_str, sizeof(type_str), "%.3f", g_settings.audio.rate_control_delta); + break; + case RGUI_SETTINGS_RESAMPLER_TYPE: + if (strstr(g_settings.audio.resampler, "sinc")) + strlcpy(type_str, "Sinc", sizeof(type_str)); + else + strlcpy(type_str, "Hermite", sizeof(type_str)); + break; + case RGUI_SETTINGS_SRAM_DIR: + snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE)) ? "ON" : "OFF"); + break; + case RGUI_SETTINGS_STATE_DIR: + snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE)) ? "ON" : "OFF"); + break; + case RGUI_SETTINGS_DEBUG_TEXT: + snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_FPS_DRAW)) ? "ON" : "OFF"); + break; + case RGUI_SETTINGS_OPEN_FILEBROWSER: + case RGUI_SETTINGS_CORE_OPTIONS: + case RGUI_SETTINGS_CUSTOM_VIEWPORT: + case RGUI_SETTINGS_CORE: + case RGUI_SETTINGS_CONTROLLER_1: + case RGUI_SETTINGS_CONTROLLER_2: + case RGUI_SETTINGS_CONTROLLER_3: + case RGUI_SETTINGS_CONTROLLER_4: + strlcpy(type_str, "...", sizeof(type_str)); + break; + case RGUI_SETTINGS_BIND_DEVICE: + strlcpy(type_str, g_settings.input.device_names[port], sizeof(type_str)); + break; + case RGUI_SETTINGS_BIND_DPAD_EMULATION: + switch(g_settings.input.dpad_emulation[port]) + { + case ANALOG_DPAD_NONE: + strlcpy(type_str, "None", sizeof(type_str)); + break; + case ANALOG_DPAD_LSTICK: + strlcpy(type_str, "Left Stick", sizeof(type_str)); + break; + case ANALOG_DPAD_RSTICK: + strlcpy(type_str, "Right Stick", sizeof(type_str)); + break; + } + break; + case RGUI_SETTINGS_BIND_UP: + case RGUI_SETTINGS_BIND_DOWN: + case RGUI_SETTINGS_BIND_LEFT: + case RGUI_SETTINGS_BIND_RIGHT: + case RGUI_SETTINGS_BIND_A: + case RGUI_SETTINGS_BIND_B: + case RGUI_SETTINGS_BIND_X: + case RGUI_SETTINGS_BIND_Y: + case RGUI_SETTINGS_BIND_START: + case RGUI_SETTINGS_BIND_SELECT: + case RGUI_SETTINGS_BIND_L: + case RGUI_SETTINGS_BIND_R: + case RGUI_SETTINGS_BIND_L2: + case RGUI_SETTINGS_BIND_R2: + case RGUI_SETTINGS_BIND_L3: + case RGUI_SETTINGS_BIND_R3: + { + unsigned id = rgui_controller_lut[type - RGUI_SETTINGS_BIND_UP]; + struct platform_bind key_label; + strlcpy(key_label.desc, "Unknown", sizeof(key_label.desc)); + key_label.joykey = g_settings.input.binds[port][id].joykey; - if (driver.input->set_keybinds) - driver.input->set_keybinds(&key_label, 0, 0, 0, (1ULL << KEYBINDS_ACTION_GET_BIND_LABEL)); + if (driver.input->set_keybinds) + driver.input->set_keybinds(&key_label, 0, 0, 0, (1ULL << KEYBINDS_ACTION_GET_BIND_LABEL)); - strlcpy(type_str, key_label.desc, sizeof(type_str)); - } - break; - default: - type_str[0] = 0; - w = 0; - break; + strlcpy(type_str, key_label.desc, sizeof(type_str)); + } + break; + default: + type_str[0] = 0; + w = 0; + break; + } } const char *entry_title; @@ -988,6 +998,7 @@ static void rgui_settings_populate_entries(rgui_handle_t *rgui) #ifdef HAVE_DYNAMIC rgui_list_push(rgui->selection_buf, "Core", RGUI_SETTINGS_CORE, 0); #endif + rgui_list_push(rgui->selection_buf, "Core Options", RGUI_SETTINGS_CORE_OPTIONS, 0); rgui_list_push(rgui->selection_buf, "Rewind", RGUI_SETTINGS_REWIND_ENABLE, 0); rgui_list_push(rgui->selection_buf, "Rewind granularity", RGUI_SETTINGS_REWIND_GRANULARITY, 0); if (g_extern.main_is_init) @@ -1034,6 +1045,18 @@ static void rgui_settings_populate_entries(rgui_handle_t *rgui) rgui_list_push(rgui->selection_buf, "Quit RetroArch", RGUI_SETTINGS_QUIT_RARCH, 0); } +static void rgui_settings_core_options_populate_entries(rgui_handle_t *rgui) +{ + rgui_list_clear(rgui->selection_buf); + + if (!g_extern.system.core_options) + return; + + size_t opts = core_option_size(g_extern.system.core_options); + for (size_t i = 0; i < opts; i++) + rgui_list_push(rgui->selection_buf, core_option_get_desc(g_extern.system.core_options, i), RGUI_SETTINGS_CORE_OPTION_START + i, 0); +} + static void rgui_settings_controller_populate_entries(rgui_handle_t *rgui) { rgui_list_clear(rgui->selection_buf); @@ -1237,7 +1260,7 @@ static int rgui_settings_iterate(rgui_handle_t *rgui, rgui_action_t action) case RGUI_ACTION_OK: case RGUI_ACTION_START: if (((type >= RGUI_SETTINGS_CONTROLLER_1 && type <= RGUI_SETTINGS_CONTROLLER_4) || - type == RGUI_SETTINGS_CORE) && action == RGUI_ACTION_OK) + type == RGUI_SETTINGS_CORE || type == RGUI_SETTINGS_CORE_OPTIONS) && action == RGUI_ACTION_OK) { rgui_list_push(rgui->menu_stack, label, type, rgui->selection_ptr); rgui->selection_ptr = 0; @@ -1286,6 +1309,8 @@ static int rgui_settings_iterate(rgui_handle_t *rgui, rgui_action_t action) rgui->need_refresh = false; if ((menu_type >= RGUI_SETTINGS_CONTROLLER_1 && menu_type <= RGUI_SETTINGS_CONTROLLER_4)) rgui_settings_controller_populate_entries(rgui); + else if (menu_type == RGUI_SETTINGS_CORE_OPTIONS) + rgui_settings_core_options_populate_entries(rgui); else rgui_settings_populate_entries(rgui); } @@ -1396,7 +1421,7 @@ int rgui_iterate(rgui_handle_t *rgui, rgui_action_t action) rgui_list_get_last(rgui->menu_stack, &dir, &menu_type, &directory_ptr); int ret = 0; - if (menu_type == RGUI_SETTINGS || (menu_type >= RGUI_SETTINGS_CONTROLLER_1 && menu_type <= RGUI_SETTINGS_CONTROLLER_4)) + if (menu_type == RGUI_SETTINGS || menu_type == RGUI_SETTINGS_CORE_OPTIONS || (menu_type >= RGUI_SETTINGS_CONTROLLER_1 && menu_type <= RGUI_SETTINGS_CONTROLLER_4)) return rgui_settings_iterate(rgui, action); else if (menu_type == RGUI_SETTINGS_CUSTOM_VIEWPORT || menu_type == RGUI_SETTINGS_CUSTOM_VIEWPORT_2) return rgui_viewport_iterate(rgui, action); diff --git a/frontend/menu/rgui.h b/frontend/menu/rgui.h index 4a7a07b7a7..18173498d0 100644 --- a/frontend/menu/rgui.h +++ b/frontend/menu/rgui.h @@ -36,6 +36,7 @@ typedef enum // settings options are done here too RGUI_SETTINGS_OPEN_FILEBROWSER, + RGUI_SETTINGS_CORE_OPTIONS, RGUI_SETTINGS_REWIND_ENABLE, RGUI_SETTINGS_REWIND_GRANULARITY, RGUI_SETTINGS_SAVESTATE_SAVE, @@ -89,6 +90,8 @@ typedef enum RGUI_SETTINGS_BIND_R2, RGUI_SETTINGS_BIND_L3, RGUI_SETTINGS_BIND_R3, + + RGUI_SETTINGS_CORE_OPTION_START = 0x10000 } rgui_file_type_t; typedef enum