diff --git a/frontend/menu/rguidisp_bitmap.c b/frontend/menu/rguidisp_bitmap.c index 80efb56553..10593dba73 100644 --- a/frontend/menu/rguidisp_bitmap.c +++ b/frontend/menu/rguidisp_bitmap.c @@ -455,4 +455,3 @@ static void render_text(rgui_handle_t *rgui) render_messagebox(rgui, message_queue); #endif } - diff --git a/frontend/menu/rmenu.c b/frontend/menu/rmenu.c index fedd6abf5b..c247f5daa1 100644 --- a/frontend/menu/rmenu.c +++ b/frontend/menu/rmenu.c @@ -102,54 +102,6 @@ static const char *menu_drive_mapping_next(void) return drive_mappings[drive_mapping_idx]; } -#if defined(_XBOX1) -#define HARDCODE_FONT_SIZE 21 -#define FONT_SIZE_VARIABLE FONT_SIZE - -#define POSITION_X 60 -#define POSITION_X_CENTER (POSITION_X + 350) -#define POSITION_Y_START 80 -#define Y_POSITION 430 -#define POSITION_Y_BEGIN (POSITION_Y_START + POSITION_Y_INCREMENT) -#define POSITION_Y_INCREMENT 20 -#define COMMENT_POSITION_Y (Y_POSITION - ((POSITION_Y_INCREMENT/2) * 3)) -#define CORE_MSG_POSITION_X FONT_SIZE -#define CORE_MSG_POSITION_Y (MSG_PREV_NEXT_Y_POSITION + 0.01f) -#define CORE_MSG_FONT_SIZE FONT_SIZE -#define MSG_QUEUE_X_POSITION POSITION_X -#define MSG_QUEUE_Y_POSITION (Y_POSITION - ((POSITION_Y_INCREMENT/2) * 7) + 10) -#define MSG_QUEUE_FONT_SIZE HARDCODE_FONT_SIZE -#define MSG_PREV_NEXT_Y_POSITION 24 -#define CURRENT_PATH_Y_POSITION (POSITION_Y_START - ((POSITION_Y_INCREMENT/2))) -#define CURRENT_PATH_FONT_SIZE 21 - -#define FONT_SIZE 21 - -#define NUM_ENTRY_PER_PAGE 15 -#elif defined(__CELLOS_LV2__) -#define HARDCODE_FONT_SIZE 0.91f -#define FONT_SIZE_VARIABLE g_settings.video.font_size -#define POSITION_X 0.09f -#define POSITION_X_CENTER 0.5f -#define POSITION_Y_START 0.17f -#define POSITION_Y_INCREMENT 0.035f -#define POSITION_Y_BEGIN (POSITION_Y_START + POSITION_Y_INCREMENT) -#define COMMENT_POSITION_Y 0.82f -#define CORE_MSG_POSITION_X 0.3f -#define CORE_MSG_POSITION_Y 0.06f -#define CORE_MSG_FONT_SIZE COMMENT_POSITION_Y - -#define MSG_QUEUE_X_POSITION g_settings.video.msg_pos_x -#define MSG_QUEUE_Y_POSITION 0.90f -#define MSG_QUEUE_FONT_SIZE 1.03f - -#define MSG_PREV_NEXT_Y_POSITION 0.03f -#define CURRENT_PATH_Y_POSITION 0.15f -#define CURRENT_PATH_FONT_SIZE (g_settings.video.font_size) - -#define NUM_ENTRY_PER_PAGE 18 -#endif - #ifdef HAVE_SHADER_MANAGER static void shader_manager_get_str_filter(char *type_str, size_t sizeof_type_str, unsigned pass) @@ -274,191 +226,13 @@ static void menu_stack_push(unsigned menu_type, bool prev_dir) EVENT CALLBACKS (AND RELATED) ============================================================ */ -static void render_text(void *data) -{ - rgui_handle_t *rgui = (rgui_handle_t*)data; - font_params_t font_parms = {0}; +uint8_t first_setting = FIRST_SETTING; +uint8_t max_settings = 0; +uint8_t items_pages[SETTING_LAST_LAST] = {0}; +static unsigned hist_opt_selected = 0; +static unsigned core_opt_selected = 0; - char msg[128]; - char label[64]; - - font_parms.x = POSITION_X; - font_parms.y = CURRENT_PATH_Y_POSITION; - font_parms.scale = CURRENT_PATH_FONT_SIZE; - font_parms.color = WHITE; - - switch(rgui->menu_type) - { -#ifdef HAVE_SHADER_MANAGER - case SHADER_CHOICE: - case CGP_CHOICE: -#endif - case BORDER_CHOICE: - case LIBRETRO_CHOICE: - 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: - case CONFIG_CHOICE: - case FILE_BROWSER_MENU: - if (rgui->menu_type == LIBRETRO_CHOICE) - strlcpy(label, "CORE SELECTION", sizeof(label)); - else if (rgui->menu_type == CONFIG_CHOICE) - strlcpy(label, "CONFIG", sizeof(label)); - else - strlcpy(label, "PATH", sizeof(label)); - snprintf(msg, sizeof(msg), "%s %s", label, rgui->browser->current_dir.directory_path); - break; - case INGAME_MENU_LOAD_GAME_HISTORY: - strlcpy(msg, "LOAD HISTORY", sizeof(msg)); - break; - case INGAME_MENU: - strlcpy(msg, "MENU", sizeof(msg)); - break; - case INGAME_MENU_CORE_OPTIONS: - strlcpy(msg, "CORE OPTIONS", sizeof(msg)); - break; - case INGAME_MENU_VIDEO_OPTIONS: - case INGAME_MENU_VIDEO_OPTIONS_MODE: - strlcpy(msg, "VIDEO OPTIONS", sizeof(msg)); - break; -#ifdef HAVE_SHADER_MANAGER - case INGAME_MENU_SHADER_OPTIONS: - case INGAME_MENU_SHADER_OPTIONS_MODE: - strlcpy(msg, "SHADER OPTIONS", sizeof(msg)); - break; -#endif - case INGAME_MENU_INPUT_OPTIONS: - case INGAME_MENU_INPUT_OPTIONS_MODE: - strlcpy(msg, "INPUT OPTIONS", sizeof(msg)); - break; - case INGAME_MENU_CUSTOM_RATIO: - strlcpy(msg, "CUSTOM RATIO", sizeof(msg)); - break; - case INGAME_MENU_SETTINGS: - case INGAME_MENU_SETTINGS_MODE: - strlcpy(msg, "MENU SETTINGS", sizeof(msg)); - break; - case INGAME_MENU_AUDIO_OPTIONS: - case INGAME_MENU_AUDIO_OPTIONS_MODE: - strlcpy(msg, "AUDIO OPTIONS", sizeof(msg)); - break; - case INGAME_MENU_PATH_OPTIONS: - case INGAME_MENU_PATH_OPTIONS_MODE: - strlcpy(msg, "PATH OPTIONS", sizeof(msg)); - break; - } - - if (driver.video_poke->set_osd_msg && msg[0] != '\0') - driver.video_poke->set_osd_msg(driver.video_data, msg, &font_parms); - - font_parms.x = POSITION_X; - font_parms.y = CORE_MSG_POSITION_Y; - font_parms.scale = CORE_MSG_FONT_SIZE; - font_parms.color = WHITE; - - snprintf(msg, sizeof(msg), "%s - %s %s", PACKAGE_VERSION, rgui->info.library_name, rgui->info.library_version); - - if (driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, msg, &font_parms); - - bool render_browser = false; - bool render_ingame_menu_resize = false; - - switch(rgui->menu_type) - { - case FILE_BROWSER_MENU: - case LIBRETRO_CHOICE: - case CONFIG_CHOICE: -#ifdef HAVE_SHADER_MANAGER - case CGP_CHOICE: - case SHADER_CHOICE: -#endif - case BORDER_CHOICE: - case PATH_DEFAULT_ROM_DIR_CHOICE: - case PATH_SAVESTATES_DIR_CHOICE: - case PATH_SRAM_DIR_CHOICE: -#ifdef HAVE_XML - case PATH_CHEATS_DIR_CHOICE: -#endif - case PATH_SYSTEM_DIR_CHOICE: - render_browser = true; - break; - case INGAME_MENU_CUSTOM_RATIO: - render_ingame_menu_resize = true; - break; - } - - if (render_browser) - { - font_params_t font_parms = {0}; - font_parms.scale = FONT_SIZE_VARIABLE; - - if (rgui->browser->list->size) - { - unsigned file_count = rgui->browser->list->size; - unsigned current_index = 0; - unsigned page_number = 0; - unsigned page_base = 0; - unsigned i; - float y_increment = POSITION_Y_START; - - current_index = rgui->browser->current_dir.ptr; - page_number = current_index / NUM_ENTRY_PER_PAGE; - page_base = page_number * NUM_ENTRY_PER_PAGE; - - - for (i = page_base; i < file_count && i < page_base + NUM_ENTRY_PER_PAGE; ++i) - { - char fname[128]; - fill_pathname_base(fname, rgui->browser->list->elems[i].data, sizeof(fname)); - y_increment += POSITION_Y_INCREMENT; - -#ifdef HAVE_MENU_PANEL - //check if this is the currently selected file - if (strcmp(rgui->browser->current_dir.path, rgui->browser->list->elems[i].data) == 0) - menu_panel->y = y_increment; -#endif - - font_parms.x = POSITION_X; - font_parms.y = y_increment; - font_parms.color = i == current_index ? YELLOW : rgui->browser->list->elems[i].attr.b ? GREEN : WHITE; - - if (driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, fname, &font_parms); - } - } - else - { - char entry[128]; - font_parms.x = POSITION_X; - font_parms.y = POSITION_Y_START + POSITION_Y_INCREMENT; - font_parms.color = WHITE; - strlcpy(entry, "No entries available.", sizeof(entry)); - - if (driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, entry, &font_parms); - } - } - - if (render_ingame_menu_resize && rgui->frame_buf_show) - { - char viewport[32]; - snprintf(viewport, sizeof(viewport), "Viewport X: #%d Y: %d (%dx%d)", g_extern.console.screen.viewports.custom_vp.x, g_extern.console.screen.viewports.custom_vp.y, g_extern.console.screen.viewports.custom_vp.width, - g_extern.console.screen.viewports.custom_vp.height); - - font_parms.x = POSITION_X; - font_parms.y = POSITION_Y_BEGIN; - font_parms.scale = HARDCODE_FONT_SIZE; - font_parms.color = WHITE; - - if (driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, viewport, &font_parms); - } -} +#include "rmenudisp.c" static int select_file(void *data, uint64_t action) { @@ -1348,11 +1122,6 @@ static int set_setting_action(uint8_t menu_type, unsigned switchvalue, uint64_t static int select_setting(void *data, uint64_t action) { rgui_handle_t *rgui = (rgui_handle_t*)data; - static uint8_t first_setting = FIRST_SETTING; - uint8_t items_pages[SETTING_LAST_LAST] = {0}; - uint8_t max_settings = 0; - - font_params_t font_parms = {0}; int ret = 0; @@ -1419,407 +1188,6 @@ static int select_setting(void *data, uint64_t action) #endif } - float y_increment = POSITION_Y_START; - uint8_t i = 0; - uint8_t j = 0; - uint8_t item_page = 0; - - for(i = first_setting; i < max_settings; i++) - { - char text[PATH_MAX]; - char setting_text[PATH_MAX]; - unsigned w; - - strlcpy(setting_text, "", sizeof(setting_text)); - - switch (i) - { -#ifdef __CELLOS_LV2__ - case SETTING_CHANGE_RESOLUTION: - strlcpy(text, "Resolution", sizeof(text)); - break; - case SETTING_PAL60_MODE: - strlcpy(text, "PAL60 Mode", sizeof(text)); - if (g_extern.lifecycle_mode_state & (1ULL << MODE_VIDEO_PAL_TEMPORAL_ENABLE)) - strlcpy(setting_text, "ON", sizeof(setting_text)); - else - strlcpy(setting_text, "OFF", sizeof(setting_text)); - break; -#endif - case SETTING_EMU_SKIN: - strlcpy(text, "Menu Skin", sizeof(text)); - fill_pathname_base(setting_text, g_extern.menu_texture_path, sizeof(setting_text)); - break; - case SETTING_HW_TEXTURE_FILTER: - strlcpy(text, "Default Filter", sizeof(text)); - break; -#ifdef _XBOX1 - case SETTING_FLICKER_FILTER: - strlcpy(text, "Flicker Filter", sizeof(text)); - snprintf(setting_text, sizeof(setting_text), "%d", g_extern.console.screen.flicker_filter_index); - break; - case SETTING_SOFT_DISPLAY_FILTER: - strlcpy(text, "Soft Display Filter", sizeof(text)); - snprintf(setting_text, sizeof(setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_VIDEO_SOFT_FILTER_ENABLE)) ? "ON" : "OFF"); - break; -#endif - case SETTING_REFRESH_RATE: - strlcpy(text, "Estimated Monitor FPS", sizeof(text)); - break; - case SETTING_VIDEO_VSYNC: - strlcpy(text, "VSync", sizeof(text)); - break; - case SETTING_VIDEO_CROP_OVERSCAN: - strlcpy(text, "Crop Overscan (reload)", sizeof(text)); - break; - case SETTING_TRIPLE_BUFFERING: - strlcpy(text, "Triple Buffering", sizeof(text)); - snprintf(setting_text, sizeof(setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_VIDEO_TRIPLE_BUFFERING_ENABLE)) ? "ON" : "OFF"); - break; - case SETTING_SOUND_MODE: - strlcpy(text, "Sound Output", sizeof(text)); - switch(g_extern.console.sound.mode) - { - case SOUND_MODE_NORMAL: - strlcpy(setting_text, "Normal", sizeof(setting_text)); - break; -#ifdef HAVE_RSOUND - case SOUND_MODE_RSOUND: - strlcpy(setting_text, "RSound", sizeof(setting_text)); - break; -#endif -#ifdef HAVE_HEADSET - case SOUND_MODE_HEADSET: - strlcpy(setting_text, "USB/Bluetooth Headset", sizeof(setting_text)); - break; -#endif - default: - break; - } - break; -#ifdef HAVE_RSOUND - case SETTING_RSOUND_SERVER_IP_ADDRESS: - strlcpy(text, "RSound Server IP Address", sizeof(text)); - strlcpy(setting_text, g_settings.audio.device, sizeof(setting_text)); - break; -#endif - case SETTING_EMU_SHOW_DEBUG_INFO_MSG: - strlcpy(text, "Debug Info Messages", sizeof(text)); - snprintf(setting_text, sizeof(setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_FPS_DRAW)) ? "ON" : "OFF"); - break; - case SETTING_EMU_SHOW_INFO_MSG: - strlcpy(text, "Info Messages", sizeof(text)); - snprintf(setting_text, sizeof(setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_INFO_DRAW)) ? "ON" : "OFF"); - break; - case SETTING_REWIND_ENABLED: - strlcpy(text, "Rewind", sizeof(text)); - break; - case SETTING_REWIND_GRANULARITY: - strlcpy(text, "Rewind Granularity", sizeof(text)); - break; - case SETTING_EMU_AUDIO_MUTE: - strlcpy(text, "Mute Audio", sizeof(text)); - break; - case SETTING_AUDIO_CONTROL_RATE_DELTA: - strlcpy(text, "Rate Control Delta", sizeof(text)); - break; -#ifdef _XBOX1 - case SETTING_EMU_AUDIO_SOUND_VOLUME_LEVEL: - strlcpy(text, "Volume Level", sizeof(text)); - snprintf(setting_text, sizeof(setting_text), g_extern.console.sound.volume_level ? "Loud" : "Normal"); - break; -#endif - case SETTING_ENABLE_CUSTOM_BGM: - strlcpy(text, "Custom BGM Option", sizeof(text)); - snprintf(setting_text, sizeof(setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_AUDIO_CUSTOM_BGM_ENABLE)) ? "ON" : "OFF"); - break; - case SETTING_PATH_DEFAULT_ROM_DIRECTORY: - strlcpy(text, "Browser Directory", sizeof(text)); - break; - case SETTING_PATH_SAVESTATES_DIRECTORY: - strlcpy(text, "Savestate Directory", sizeof(text)); - break; - case SETTING_PATH_SRAM_DIRECTORY: - strlcpy(text, "Savefile Directory", sizeof(text)); - break; -#ifdef HAVE_XML - case SETTING_PATH_CHEATS: - strlcpy(text, "Cheatfile Directory", sizeof(text)); - strlcpy(setting_text, g_settings.cheat_database, sizeof(setting_text)); - break; -#endif - case SETTING_PATH_SYSTEM: - strlcpy(text, "System Directory", sizeof(text)); - break; - case SETTING_CONTROLS_NUMBER: - strlcpy(text, "Player", sizeof(text)); - break; - case SETTING_CONTROLS_BIND_DEVICE_TYPE: - strlcpy(text, "Device Type", sizeof(text)); - break; - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_B: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_Y: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_SELECT: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_START: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_UP: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_DOWN: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_LEFT: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_RIGHT: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_A: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_X: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_L: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_R: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_L2: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_R2: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_L3: - case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_R3: - { - unsigned id = i - FIRST_CONTROL_BIND; - struct platform_bind key_label; - strlcpy(key_label.desc, "Unknown", sizeof(key_label.desc)); - key_label.joykey = g_settings.input.binds[rgui->current_pad][id].joykey; - - if (driver.input->set_keybinds) - driver.input->set_keybinds(&key_label, 0, 0, 0, (1ULL << KEYBINDS_ACTION_GET_BIND_LABEL)); - strlcpy(text, g_settings.input.binds[rgui->current_pad][id].desc, sizeof(text)); - strlcpy(setting_text, key_label.desc, sizeof(setting_text)); - } - break; - case SETTING_CONTROLS_DEFAULT_ALL: - strlcpy(text, "DEFAULTS", sizeof(text)); - break; - case INGAME_MENU_LOAD_STATE: - strlcpy(text, "Load State", sizeof(text)); - snprintf(setting_text, sizeof(setting_text), "%d", g_extern.state_slot); - break; - case INGAME_MENU_SAVE_STATE: - strlcpy(text, "Save State", sizeof(text)); - snprintf(setting_text, sizeof(setting_text), "%d", g_extern.state_slot); - break; - case SETTING_ASPECT_RATIO: - strlcpy(text, "Aspect Ratio", sizeof(text)); - break; - case SETTING_ROTATION: - strlcpy(text, "Rotation", sizeof(text)); - break; - case SETTING_CUSTOM_VIEWPORT: - strlcpy(text, "Custom Ratio", sizeof(text)); - break; - case INGAME_MENU_CORE_OPTIONS_MODE: - strlcpy(text, "Core Options", sizeof(text)); - break; -#ifdef HAVE_SHADER_MANAGER - case INGAME_MENU_SHADER_OPTIONS_MODE: - strlcpy(text, "Shader Options", sizeof(text)); - break; -#endif - case INGAME_MENU_LOAD_GAME_HISTORY_MODE: - strlcpy(text, "Load Game (History)", sizeof(text)); - break; - case INGAME_MENU_VIDEO_OPTIONS_MODE: - strlcpy(text, "Video Options", sizeof(text)); - break; - case INGAME_MENU_AUDIO_OPTIONS_MODE: - strlcpy(text, "Audio Options", sizeof(text)); - break; - case INGAME_MENU_INPUT_OPTIONS_MODE: - strlcpy(text, "Input Options", sizeof(text)); - break; - case INGAME_MENU_PATH_OPTIONS_MODE: - strlcpy(text, "Path Options", sizeof(text)); - break; - case INGAME_MENU_SETTINGS_MODE: - strlcpy(text, "Settings", sizeof(text)); - break; - case INGAME_MENU_SCREENSHOT_MODE: - strlcpy(text, "Take Screenshot", sizeof(text)); - break; - case INGAME_MENU_RESET: - strlcpy(text, "Restart Game", sizeof(text)); - break; - case INGAME_MENU_RETURN_TO_GAME: - strlcpy(text, "Resume Game", sizeof(text)); - break; - case INGAME_MENU_CHANGE_GAME: - snprintf(text, sizeof(text), "Load Game (%s)", - rgui->info.library_name ? rgui->info.library_name : g_extern.system.info.library_name); - break; - case INGAME_MENU_CHANGE_LIBRETRO_CORE: - strlcpy(text, "Core", sizeof(text)); - break; -#ifdef HAVE_MULTIMAN - case INGAME_MENU_RETURN_TO_MULTIMAN: - strlcpy(text, "Return to multiMAN", sizeof(text)); - break; -#endif - case INGAME_MENU_CONFIG: - strlcpy(text, "RetroArch Config", sizeof(text)); - break; - case INGAME_MENU_SAVE_CONFIG: - strlcpy(text, "Save Config", sizeof(text)); - break; - case INGAME_MENU_QUIT_RETROARCH: - strlcpy(text, "Quit RetroArch", sizeof(text)); - break; - default: - break; -#ifdef HAVE_SHADER_MANAGER - case SHADERMAN_LOAD_CGP: - strlcpy(text, "Load Shader Preset", sizeof(text)); - break; - case SHADERMAN_SAVE_CGP: - strlcpy(text, "Save Shader Preset", sizeof(text)); - break; - case SHADERMAN_SHADER_PASSES: - strlcpy(text, "Shader Passes", sizeof(text)); - snprintf(setting_text, sizeof(setting_text), "%u", rgui->shader.passes); - break; - case SHADERMAN_APPLY_CHANGES: - strlcpy(text, "Apply Shader Changes", sizeof(text)); - break; - case SHADERMAN_SHADER_0: - case SHADERMAN_SHADER_1: - case SHADERMAN_SHADER_2: - case SHADERMAN_SHADER_3: - case SHADERMAN_SHADER_4: - case SHADERMAN_SHADER_5: - case SHADERMAN_SHADER_6: - case SHADERMAN_SHADER_7: - { - char type_str[256]; - uint8_t index = (i - SHADERMAN_SHADER_0) / 3; - if (*rgui->shader.pass[index].source.cg) - fill_pathname_base(type_str, - rgui->shader.pass[index].source.cg, sizeof(type_str)); - else - strlcpy(type_str, "N/A", sizeof(type_str)); - snprintf(text, sizeof(text), "Shader #%d", index); - strlcpy(setting_text, type_str, sizeof(setting_text)); - } - break; - case SHADERMAN_SHADER_0_FILTER: - case SHADERMAN_SHADER_1_FILTER: - case SHADERMAN_SHADER_2_FILTER: - case SHADERMAN_SHADER_3_FILTER: - case SHADERMAN_SHADER_4_FILTER: - case SHADERMAN_SHADER_5_FILTER: - case SHADERMAN_SHADER_6_FILTER: - case SHADERMAN_SHADER_7_FILTER: - { - char type_str[256]; - uint8_t index = (i - SHADERMAN_SHADER_0) / 3; - snprintf(text, sizeof(text), "Shader #%d filter", index); - shader_manager_get_str_filter(type_str, sizeof(type_str), index); - strlcpy(setting_text, type_str, sizeof(setting_text)); - } - break; - case SHADERMAN_SHADER_0_SCALE: - case SHADERMAN_SHADER_1_SCALE: - case SHADERMAN_SHADER_2_SCALE: - case SHADERMAN_SHADER_3_SCALE: - case SHADERMAN_SHADER_4_SCALE: - case SHADERMAN_SHADER_5_SCALE: - case SHADERMAN_SHADER_6_SCALE: - case SHADERMAN_SHADER_7_SCALE: - { - char type_str[256]; - uint8_t index = (i - SHADERMAN_SHADER_0) / 3; - unsigned scale = rgui->shader.pass[index].fbo.scale_x; - - snprintf(text, sizeof(text), "Shader #%d scale", index); - - if (!scale) - strlcpy(type_str, "Don't care", sizeof(type_str)); - else - snprintf(type_str, sizeof(type_str), "%ux", scale); - - strlcpy(setting_text, type_str, sizeof(setting_text)); - } - break; -#endif - } - - switch (i) - { -#ifdef __CELLOS_LV2__ - case SETTING_CHANGE_RESOLUTION: -#endif - case INGAME_MENU_CONFIG: - case SETTING_ROTATION: - case SETTING_ASPECT_RATIO: - case SETTING_CONTROLS_BIND_DEVICE_TYPE: - case SETTING_CONTROLS_NUMBER: - case SETTING_PATH_SYSTEM: - case SETTING_PATH_SRAM_DIRECTORY: - case SETTING_PATH_SAVESTATES_DIRECTORY: - case SETTING_PATH_DEFAULT_ROM_DIRECTORY: - case SETTING_AUDIO_CONTROL_RATE_DELTA: - case SETTING_EMU_AUDIO_MUTE: - case SETTING_REWIND_GRANULARITY: - case SETTING_REWIND_ENABLED: - case SETTING_VIDEO_CROP_OVERSCAN: - case SETTING_VIDEO_VSYNC: - case SETTING_REFRESH_RATE: - case SETTING_HW_TEXTURE_FILTER: - menu_set_settings_label(setting_text, sizeof(setting_text), &w, settings_lut[i]); - break; - case SETTING_CUSTOM_VIEWPORT: - case INGAME_MENU_SAVE_CONFIG: - case INGAME_MENU_CHANGE_LIBRETRO_CORE: - case INGAME_MENU_CHANGE_GAME: - case INGAME_MENU_SETTINGS_MODE: - case INGAME_MENU_PATH_OPTIONS_MODE: - case INGAME_MENU_INPUT_OPTIONS_MODE: - case INGAME_MENU_AUDIO_OPTIONS_MODE: - case INGAME_MENU_VIDEO_OPTIONS_MODE: - case INGAME_MENU_LOAD_GAME_HISTORY_MODE: -#ifdef HAVE_SHADER_MANAGER - case INGAME_MENU_SHADER_OPTIONS_MODE: -#endif - case INGAME_MENU_CORE_OPTIONS_MODE: - strlcpy(setting_text, "...", sizeof(setting_text)); - break; - } - - char setting_text_buf[256]; - menu_ticker_line(setting_text_buf, TICKER_LABEL_CHARS_MAX_PER_LINE, g_extern.frame_count / 15, setting_text, i == rgui->selection_ptr); - - if (!(j < NUM_ENTRY_PER_PAGE)) - { - j = 0; - item_page++; - } - - items_pages[i] = item_page; - j++; - - if (item_page != setting_page_number) - continue; - - y_increment += POSITION_Y_INCREMENT; - - font_parms.x = POSITION_X; - font_parms.y = y_increment; - font_parms.scale = FONT_SIZE_VARIABLE; - font_parms.color = (i == rgui->selection_ptr) ? YELLOW : WHITE; - - if (driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, text, &font_parms); - - font_parms.x = POSITION_X_CENTER; - font_parms.color = WHITE; - - if (driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, setting_text_buf, &font_parms); - - if (i != rgui->selection_ptr) - continue; - -#ifdef HAVE_MENU_PANEL - menu_panel->y = y_increment; -#endif - } - switch (action) { case RGUI_ACTION_UP: @@ -1905,59 +1273,6 @@ static int ingame_menu_resize(void *data, uint64_t action) static int ingame_menu_history_options(void *data, uint64_t action) { rgui_handle_t *rgui = (rgui_handle_t*)data; - size_t history_size = rom_history_size(rgui->history); - static unsigned hist_opt_selected = 0; - float y_increment = POSITION_Y_START; - - y_increment += POSITION_Y_INCREMENT; - - font_params_t font_parms = {0}; - font_parms.x = POSITION_X; - font_parms.y = y_increment; - font_parms.scale = CURRENT_PATH_FONT_SIZE; - font_parms.color = WHITE; - - if (history_size) - { - size_t opts = history_size; - for (size_t i = 0; i < opts; i++) - { - const char *path = NULL; - const char *core_path = NULL; - const char *core_name = NULL; - - rom_history_get_index(rgui->history, i, - &path, &core_path, &core_name); - - char path_short[PATH_MAX]; - fill_pathname(path_short, path_basename(path), "", sizeof(path_short)); - - char fill_buf[PATH_MAX]; - snprintf(fill_buf, sizeof(fill_buf), "%s (%s)", - path_short, core_name); - - /* not on same page? */ - if ((i / NUM_ENTRY_PER_PAGE) != (hist_opt_selected / NUM_ENTRY_PER_PAGE)) - continue; - -#ifdef HAVE_MENU_PANEL - //check if this is the currently selected option - if (i == hist_opt_selected) - menu_panel->y = font_parms.y; -#endif - - font_parms.x = POSITION_X; - font_parms.color = (hist_opt_selected == i) ? YELLOW : WHITE; - - if (driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, - fill_buf, &font_parms); - - font_parms.y += POSITION_Y_INCREMENT; - } - } - else if (driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, "No history available.", &font_parms); switch (action) { @@ -1967,14 +1282,14 @@ static int ingame_menu_history_options(void *data, uint64_t action) return -1; case RGUI_ACTION_UP: if (hist_opt_selected == 0) - hist_opt_selected = history_size - 1; + hist_opt_selected = rom_history_size(rgui->history) - 1; else hist_opt_selected--; break; case RGUI_ACTION_DOWN: hist_opt_selected++; - if (hist_opt_selected >= history_size) + if (hist_opt_selected >= rom_history_size(rgui->history)) hist_opt_selected = 0; break; case RGUI_ACTION_LEFT: @@ -1984,7 +1299,7 @@ static int ingame_menu_history_options(void *data, uint64_t action) hist_opt_selected -= 5; break; case FILEBROWSER_ACTION_RIGHT: - hist_opt_selected = (min(hist_opt_selected + 5, history_size-1)); + hist_opt_selected = (min(hist_opt_selected + 5, rom_history_size(rgui->history)-1)); break; case RGUI_ACTION_CANCEL: menu_stack_pop(rgui->menu_type); @@ -1997,52 +1312,6 @@ static int ingame_menu_history_options(void *data, uint64_t action) static int ingame_menu_core_options(void *data, uint64_t action) { rgui_handle_t *rgui = (rgui_handle_t*)data; - static unsigned core_opt_selected = 0; - float y_increment = POSITION_Y_START; - - y_increment += POSITION_Y_INCREMENT; - - font_params_t font_parms = {0}; - font_parms.x = POSITION_X; - font_parms.y = y_increment; - font_parms.scale = CURRENT_PATH_FONT_SIZE; - font_parms.color = WHITE; - - if (g_extern.system.core_options) - { - size_t opts = core_option_size(g_extern.system.core_options); - for (size_t i = 0; i < opts; i++, font_parms.y += POSITION_Y_INCREMENT) - { - char type_str[256]; - - /* not on same page? */ - if ((i / NUM_ENTRY_PER_PAGE) != (core_opt_selected / NUM_ENTRY_PER_PAGE)) - continue; - -#ifdef HAVE_MENU_PANEL - //check if this is the currently selected option - if (i == core_opt_selected) - menu_panel->y = font_parms.y; -#endif - - font_parms.x = POSITION_X; - font_parms.color = (core_opt_selected == i) ? YELLOW : WHITE; - - if (driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, - core_option_get_desc(g_extern.system.core_options, i), &font_parms); - - font_parms.x = POSITION_X_CENTER; - font_parms.color = WHITE; - - strlcpy(type_str, core_option_get_val(g_extern.system.core_options, i), sizeof(type_str)); - - if (driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, type_str, &font_parms); - } - } - else if (driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, "No options available.", &font_parms); switch (action) { diff --git a/frontend/menu/rmenudisp.c b/frontend/menu/rmenudisp.c new file mode 100644 index 0000000000..92816f4760 --- /dev/null +++ b/frontend/menu/rmenudisp.c @@ -0,0 +1,751 @@ +#if defined(_XBOX1) +#define HARDCODE_FONT_SIZE 21 +#define FONT_SIZE_VARIABLE FONT_SIZE + +#define POSITION_X 60 +#define POSITION_X_CENTER (POSITION_X + 350) +#define POSITION_Y_START 80 +#define Y_POSITION 430 +#define POSITION_Y_BEGIN (POSITION_Y_START + POSITION_Y_INCREMENT) +#define POSITION_Y_INCREMENT 20 +#define COMMENT_POSITION_Y (Y_POSITION - ((POSITION_Y_INCREMENT/2) * 3)) +#define CORE_MSG_POSITION_X FONT_SIZE +#define CORE_MSG_POSITION_Y (MSG_PREV_NEXT_Y_POSITION + 0.01f) +#define CORE_MSG_FONT_SIZE FONT_SIZE +#define MSG_QUEUE_X_POSITION POSITION_X +#define MSG_QUEUE_Y_POSITION (Y_POSITION - ((POSITION_Y_INCREMENT/2) * 7) + 10) +#define MSG_QUEUE_FONT_SIZE HARDCODE_FONT_SIZE +#define MSG_PREV_NEXT_Y_POSITION 24 +#define CURRENT_PATH_Y_POSITION (POSITION_Y_START - ((POSITION_Y_INCREMENT/2))) +#define CURRENT_PATH_FONT_SIZE 21 + +#define FONT_SIZE 21 + +#define NUM_ENTRY_PER_PAGE 15 +#elif defined(__CELLOS_LV2__) +#define HARDCODE_FONT_SIZE 0.91f +#define FONT_SIZE_VARIABLE g_settings.video.font_size +#define POSITION_X 0.09f +#define POSITION_X_CENTER 0.5f +#define POSITION_Y_START 0.17f +#define POSITION_Y_INCREMENT 0.035f +#define POSITION_Y_BEGIN (POSITION_Y_START + POSITION_Y_INCREMENT) +#define COMMENT_POSITION_Y 0.82f +#define CORE_MSG_POSITION_X 0.3f +#define CORE_MSG_POSITION_Y 0.06f +#define CORE_MSG_FONT_SIZE COMMENT_POSITION_Y + +#define MSG_QUEUE_X_POSITION g_settings.video.msg_pos_x +#define MSG_QUEUE_Y_POSITION 0.90f +#define MSG_QUEUE_FONT_SIZE 1.03f + +#define MSG_PREV_NEXT_Y_POSITION 0.03f +#define CURRENT_PATH_Y_POSITION 0.15f +#define CURRENT_PATH_FONT_SIZE (g_settings.video.font_size) + +#define NUM_ENTRY_PER_PAGE 18 +#endif + +static void render_text(void *data) +{ + rgui_handle_t *rgui = (rgui_handle_t*)data; + font_params_t font_parms = {0}; + + char msg[128]; + char label[64]; + + font_parms.x = POSITION_X; + font_parms.y = CURRENT_PATH_Y_POSITION; + font_parms.scale = CURRENT_PATH_FONT_SIZE; + font_parms.color = WHITE; + + switch(rgui->menu_type) + { +#ifdef HAVE_SHADER_MANAGER + case SHADER_CHOICE: + case CGP_CHOICE: +#endif + case BORDER_CHOICE: + case LIBRETRO_CHOICE: + 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: + case CONFIG_CHOICE: + case FILE_BROWSER_MENU: + if (rgui->menu_type == LIBRETRO_CHOICE) + strlcpy(label, "CORE SELECTION", sizeof(label)); + else if (rgui->menu_type == CONFIG_CHOICE) + strlcpy(label, "CONFIG", sizeof(label)); + else + strlcpy(label, "PATH", sizeof(label)); + snprintf(msg, sizeof(msg), "%s %s", label, rgui->browser->current_dir.directory_path); + break; + case INGAME_MENU_LOAD_GAME_HISTORY: + strlcpy(msg, "LOAD HISTORY", sizeof(msg)); + break; + case INGAME_MENU: + strlcpy(msg, "MENU", sizeof(msg)); + break; + case INGAME_MENU_CORE_OPTIONS: + strlcpy(msg, "CORE OPTIONS", sizeof(msg)); + break; + case INGAME_MENU_VIDEO_OPTIONS: + case INGAME_MENU_VIDEO_OPTIONS_MODE: + strlcpy(msg, "VIDEO OPTIONS", sizeof(msg)); + break; +#ifdef HAVE_SHADER_MANAGER + case INGAME_MENU_SHADER_OPTIONS: + case INGAME_MENU_SHADER_OPTIONS_MODE: + strlcpy(msg, "SHADER OPTIONS", sizeof(msg)); + break; +#endif + case INGAME_MENU_INPUT_OPTIONS: + case INGAME_MENU_INPUT_OPTIONS_MODE: + strlcpy(msg, "INPUT OPTIONS", sizeof(msg)); + break; + case INGAME_MENU_CUSTOM_RATIO: + strlcpy(msg, "CUSTOM RATIO", sizeof(msg)); + break; + case INGAME_MENU_SETTINGS: + case INGAME_MENU_SETTINGS_MODE: + strlcpy(msg, "MENU SETTINGS", sizeof(msg)); + break; + case INGAME_MENU_AUDIO_OPTIONS: + case INGAME_MENU_AUDIO_OPTIONS_MODE: + strlcpy(msg, "AUDIO OPTIONS", sizeof(msg)); + break; + case INGAME_MENU_PATH_OPTIONS: + case INGAME_MENU_PATH_OPTIONS_MODE: + strlcpy(msg, "PATH OPTIONS", sizeof(msg)); + break; + } + + if (driver.video_poke->set_osd_msg && msg[0] != '\0') + driver.video_poke->set_osd_msg(driver.video_data, msg, &font_parms); + + font_parms.x = POSITION_X; + font_parms.y = CORE_MSG_POSITION_Y; + font_parms.scale = CORE_MSG_FONT_SIZE; + font_parms.color = WHITE; + + snprintf(msg, sizeof(msg), "%s - %s %s", PACKAGE_VERSION, rgui->info.library_name, rgui->info.library_version); + + if (driver.video_poke->set_osd_msg) + driver.video_poke->set_osd_msg(driver.video_data, msg, &font_parms); + + bool render_browser = false; + bool render_settings = false; + bool render_history = false; + bool render_ingame_menu_resize = false; + bool render_core_options = false; + + switch(rgui->menu_type) + { + case FILE_BROWSER_MENU: + case LIBRETRO_CHOICE: + case CONFIG_CHOICE: +#ifdef HAVE_SHADER_MANAGER + case CGP_CHOICE: + case SHADER_CHOICE: +#endif + case BORDER_CHOICE: + case PATH_DEFAULT_ROM_DIR_CHOICE: + case PATH_SAVESTATES_DIR_CHOICE: + case PATH_SRAM_DIR_CHOICE: +#ifdef HAVE_XML + case PATH_CHEATS_DIR_CHOICE: +#endif + case PATH_SYSTEM_DIR_CHOICE: + render_browser = true; + break; + case INGAME_MENU_CUSTOM_RATIO: + render_ingame_menu_resize = true; + break; + case INGAME_MENU_SETTINGS: + render_settings = true; + break; + case INGAME_MENU_LOAD_GAME_HISTORY: + render_history = true; + break; + case INGAME_MENU_CORE_OPTIONS: + render_core_options = true; + break; + } + + if (render_browser) + { + font_params_t font_parms = {0}; + font_parms.scale = FONT_SIZE_VARIABLE; + + if (rgui->browser->list->size) + { + unsigned file_count = rgui->browser->list->size; + unsigned current_index = 0; + unsigned page_number = 0; + unsigned page_base = 0; + unsigned i; + float y_increment = POSITION_Y_START; + + current_index = rgui->browser->current_dir.ptr; + page_number = current_index / NUM_ENTRY_PER_PAGE; + page_base = page_number * NUM_ENTRY_PER_PAGE; + + + for (i = page_base; i < file_count && i < page_base + NUM_ENTRY_PER_PAGE; ++i) + { + char fname[128]; + fill_pathname_base(fname, rgui->browser->list->elems[i].data, sizeof(fname)); + y_increment += POSITION_Y_INCREMENT; + +#ifdef HAVE_MENU_PANEL + //check if this is the currently selected file + if (strcmp(rgui->browser->current_dir.path, rgui->browser->list->elems[i].data) == 0) + menu_panel->y = y_increment; +#endif + + font_parms.x = POSITION_X; + font_parms.y = y_increment; + font_parms.color = i == current_index ? YELLOW : rgui->browser->list->elems[i].attr.b ? GREEN : WHITE; + + if (driver.video_poke->set_osd_msg) + driver.video_poke->set_osd_msg(driver.video_data, fname, &font_parms); + } + } + else + { + char entry[128]; + font_parms.x = POSITION_X; + font_parms.y = POSITION_Y_START + POSITION_Y_INCREMENT; + font_parms.color = WHITE; + strlcpy(entry, "No entries available.", sizeof(entry)); + + if (driver.video_poke->set_osd_msg) + driver.video_poke->set_osd_msg(driver.video_data, entry, &font_parms); + } + } + + if (render_core_options) + { + float y_increment = POSITION_Y_START; + + y_increment += POSITION_Y_INCREMENT; + + font_parms.x = POSITION_X; + font_parms.y = y_increment; + font_parms.scale = CURRENT_PATH_FONT_SIZE; + font_parms.color = WHITE; + + if (g_extern.system.core_options) + { + size_t opts = core_option_size(g_extern.system.core_options); + for (size_t i = 0; i < opts; i++, font_parms.y += POSITION_Y_INCREMENT) + { + char type_str[256]; + + /* not on same page? */ + if ((i / NUM_ENTRY_PER_PAGE) != (core_opt_selected / NUM_ENTRY_PER_PAGE)) + continue; + +#ifdef HAVE_MENU_PANEL + //check if this is the currently selected option + if (i == core_opt_selected) + menu_panel->y = font_parms.y; +#endif + + font_parms.x = POSITION_X; + font_parms.color = (core_opt_selected == i) ? YELLOW : WHITE; + + if (driver.video_poke->set_osd_msg) + driver.video_poke->set_osd_msg(driver.video_data, + core_option_get_desc(g_extern.system.core_options, i), &font_parms); + + font_parms.x = POSITION_X_CENTER; + font_parms.color = WHITE; + + strlcpy(type_str, core_option_get_val(g_extern.system.core_options, i), sizeof(type_str)); + + if (driver.video_poke->set_osd_msg) + driver.video_poke->set_osd_msg(driver.video_data, type_str, &font_parms); + } + } + else if (driver.video_poke->set_osd_msg) + driver.video_poke->set_osd_msg(driver.video_data, "No options available.", &font_parms); + } + + if (render_settings) + { + float y_increment = POSITION_Y_START; + uint8_t i = 0; + uint8_t j = 0; + uint8_t item_page = 0; + + for(i = first_setting; i < max_settings; i++) + { + char text[PATH_MAX]; + char setting_text[PATH_MAX]; + unsigned w; + + strlcpy(setting_text, "", sizeof(setting_text)); + + switch (i) + { +#ifdef __CELLOS_LV2__ + case SETTING_CHANGE_RESOLUTION: + strlcpy(text, "Resolution", sizeof(text)); + break; + case SETTING_PAL60_MODE: + strlcpy(text, "PAL60 Mode", sizeof(text)); + if (g_extern.lifecycle_mode_state & (1ULL << MODE_VIDEO_PAL_TEMPORAL_ENABLE)) + strlcpy(setting_text, "ON", sizeof(setting_text)); + else + strlcpy(setting_text, "OFF", sizeof(setting_text)); + break; +#endif + case SETTING_EMU_SKIN: + strlcpy(text, "Menu Skin", sizeof(text)); + fill_pathname_base(setting_text, g_extern.menu_texture_path, sizeof(setting_text)); + break; + case SETTING_HW_TEXTURE_FILTER: + strlcpy(text, "Default Filter", sizeof(text)); + break; +#ifdef _XBOX1 + case SETTING_FLICKER_FILTER: + strlcpy(text, "Flicker Filter", sizeof(text)); + snprintf(setting_text, sizeof(setting_text), "%d", g_extern.console.screen.flicker_filter_index); + break; + case SETTING_SOFT_DISPLAY_FILTER: + strlcpy(text, "Soft Display Filter", sizeof(text)); + snprintf(setting_text, sizeof(setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_VIDEO_SOFT_FILTER_ENABLE)) ? "ON" : "OFF"); + break; +#endif + case SETTING_REFRESH_RATE: + strlcpy(text, "Estimated Monitor FPS", sizeof(text)); + break; + case SETTING_VIDEO_VSYNC: + strlcpy(text, "VSync", sizeof(text)); + break; + case SETTING_VIDEO_CROP_OVERSCAN: + strlcpy(text, "Crop Overscan (reload)", sizeof(text)); + break; + case SETTING_TRIPLE_BUFFERING: + strlcpy(text, "Triple Buffering", sizeof(text)); + snprintf(setting_text, sizeof(setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_VIDEO_TRIPLE_BUFFERING_ENABLE)) ? "ON" : "OFF"); + break; + case SETTING_SOUND_MODE: + strlcpy(text, "Sound Output", sizeof(text)); + switch(g_extern.console.sound.mode) + { + case SOUND_MODE_NORMAL: + strlcpy(setting_text, "Normal", sizeof(setting_text)); + break; +#ifdef HAVE_RSOUND + case SOUND_MODE_RSOUND: + strlcpy(setting_text, "RSound", sizeof(setting_text)); + break; +#endif +#ifdef HAVE_HEADSET + case SOUND_MODE_HEADSET: + strlcpy(setting_text, "USB/Bluetooth Headset", sizeof(setting_text)); + break; +#endif + default: + break; + } + break; +#ifdef HAVE_RSOUND + case SETTING_RSOUND_SERVER_IP_ADDRESS: + strlcpy(text, "RSound Server IP Address", sizeof(text)); + strlcpy(setting_text, g_settings.audio.device, sizeof(setting_text)); + break; +#endif + case SETTING_EMU_SHOW_DEBUG_INFO_MSG: + strlcpy(text, "Debug Info Messages", sizeof(text)); + snprintf(setting_text, sizeof(setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_FPS_DRAW)) ? "ON" : "OFF"); + break; + case SETTING_EMU_SHOW_INFO_MSG: + strlcpy(text, "Info Messages", sizeof(text)); + snprintf(setting_text, sizeof(setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_INFO_DRAW)) ? "ON" : "OFF"); + break; + case SETTING_REWIND_ENABLED: + strlcpy(text, "Rewind", sizeof(text)); + break; + case SETTING_REWIND_GRANULARITY: + strlcpy(text, "Rewind Granularity", sizeof(text)); + break; + case SETTING_EMU_AUDIO_MUTE: + strlcpy(text, "Mute Audio", sizeof(text)); + break; + case SETTING_AUDIO_CONTROL_RATE_DELTA: + strlcpy(text, "Rate Control Delta", sizeof(text)); + break; +#ifdef _XBOX1 + case SETTING_EMU_AUDIO_SOUND_VOLUME_LEVEL: + strlcpy(text, "Volume Level", sizeof(text)); + snprintf(setting_text, sizeof(setting_text), g_extern.console.sound.volume_level ? "Loud" : "Normal"); + break; +#endif + case SETTING_ENABLE_CUSTOM_BGM: + strlcpy(text, "Custom BGM Option", sizeof(text)); + snprintf(setting_text, sizeof(setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_AUDIO_CUSTOM_BGM_ENABLE)) ? "ON" : "OFF"); + break; + case SETTING_PATH_DEFAULT_ROM_DIRECTORY: + strlcpy(text, "Browser Directory", sizeof(text)); + break; + case SETTING_PATH_SAVESTATES_DIRECTORY: + strlcpy(text, "Savestate Directory", sizeof(text)); + break; + case SETTING_PATH_SRAM_DIRECTORY: + strlcpy(text, "Savefile Directory", sizeof(text)); + break; +#ifdef HAVE_XML + case SETTING_PATH_CHEATS: + strlcpy(text, "Cheatfile Directory", sizeof(text)); + strlcpy(setting_text, g_settings.cheat_database, sizeof(setting_text)); + break; +#endif + case SETTING_PATH_SYSTEM: + strlcpy(text, "System Directory", sizeof(text)); + break; + case SETTING_CONTROLS_NUMBER: + strlcpy(text, "Player", sizeof(text)); + break; + case SETTING_CONTROLS_BIND_DEVICE_TYPE: + strlcpy(text, "Device Type", sizeof(text)); + break; + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_B: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_Y: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_SELECT: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_START: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_UP: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_DOWN: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_LEFT: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_RIGHT: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_A: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_X: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_L: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_R: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_L2: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_R2: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_L3: + case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_R3: + { + unsigned id = i - FIRST_CONTROL_BIND; + struct platform_bind key_label; + strlcpy(key_label.desc, "Unknown", sizeof(key_label.desc)); + key_label.joykey = g_settings.input.binds[rgui->current_pad][id].joykey; + + if (driver.input->set_keybinds) + driver.input->set_keybinds(&key_label, 0, 0, 0, (1ULL << KEYBINDS_ACTION_GET_BIND_LABEL)); + strlcpy(text, g_settings.input.binds[rgui->current_pad][id].desc, sizeof(text)); + strlcpy(setting_text, key_label.desc, sizeof(setting_text)); + } + break; + case SETTING_CONTROLS_DEFAULT_ALL: + strlcpy(text, "DEFAULTS", sizeof(text)); + break; + case INGAME_MENU_LOAD_STATE: + strlcpy(text, "Load State", sizeof(text)); + snprintf(setting_text, sizeof(setting_text), "%d", g_extern.state_slot); + break; + case INGAME_MENU_SAVE_STATE: + strlcpy(text, "Save State", sizeof(text)); + snprintf(setting_text, sizeof(setting_text), "%d", g_extern.state_slot); + break; + case SETTING_ASPECT_RATIO: + strlcpy(text, "Aspect Ratio", sizeof(text)); + break; + case SETTING_ROTATION: + strlcpy(text, "Rotation", sizeof(text)); + break; + case SETTING_CUSTOM_VIEWPORT: + strlcpy(text, "Custom Ratio", sizeof(text)); + break; + case INGAME_MENU_CORE_OPTIONS_MODE: + strlcpy(text, "Core Options", sizeof(text)); + break; +#ifdef HAVE_SHADER_MANAGER + case INGAME_MENU_SHADER_OPTIONS_MODE: + strlcpy(text, "Shader Options", sizeof(text)); + break; +#endif + case INGAME_MENU_LOAD_GAME_HISTORY_MODE: + strlcpy(text, "Load Game (History)", sizeof(text)); + break; + case INGAME_MENU_VIDEO_OPTIONS_MODE: + strlcpy(text, "Video Options", sizeof(text)); + break; + case INGAME_MENU_AUDIO_OPTIONS_MODE: + strlcpy(text, "Audio Options", sizeof(text)); + break; + case INGAME_MENU_INPUT_OPTIONS_MODE: + strlcpy(text, "Input Options", sizeof(text)); + break; + case INGAME_MENU_PATH_OPTIONS_MODE: + strlcpy(text, "Path Options", sizeof(text)); + break; + case INGAME_MENU_SETTINGS_MODE: + strlcpy(text, "Settings", sizeof(text)); + break; + case INGAME_MENU_SCREENSHOT_MODE: + strlcpy(text, "Take Screenshot", sizeof(text)); + break; + case INGAME_MENU_RESET: + strlcpy(text, "Restart Game", sizeof(text)); + break; + case INGAME_MENU_RETURN_TO_GAME: + strlcpy(text, "Resume Game", sizeof(text)); + break; + case INGAME_MENU_CHANGE_GAME: + snprintf(text, sizeof(text), "Load Game (%s)", + rgui->info.library_name ? rgui->info.library_name : g_extern.system.info.library_name); + break; + case INGAME_MENU_CHANGE_LIBRETRO_CORE: + strlcpy(text, "Core", sizeof(text)); + break; +#ifdef HAVE_MULTIMAN + case INGAME_MENU_RETURN_TO_MULTIMAN: + strlcpy(text, "Return to multiMAN", sizeof(text)); + break; +#endif + case INGAME_MENU_CONFIG: + strlcpy(text, "RetroArch Config", sizeof(text)); + break; + case INGAME_MENU_SAVE_CONFIG: + strlcpy(text, "Save Config", sizeof(text)); + break; + case INGAME_MENU_QUIT_RETROARCH: + strlcpy(text, "Quit RetroArch", sizeof(text)); + break; + default: + break; +#ifdef HAVE_SHADER_MANAGER + case SHADERMAN_LOAD_CGP: + strlcpy(text, "Load Shader Preset", sizeof(text)); + break; + case SHADERMAN_SAVE_CGP: + strlcpy(text, "Save Shader Preset", sizeof(text)); + break; + case SHADERMAN_SHADER_PASSES: + strlcpy(text, "Shader Passes", sizeof(text)); + snprintf(setting_text, sizeof(setting_text), "%u", rgui->shader.passes); + break; + case SHADERMAN_APPLY_CHANGES: + strlcpy(text, "Apply Shader Changes", sizeof(text)); + break; + case SHADERMAN_SHADER_0: + case SHADERMAN_SHADER_1: + case SHADERMAN_SHADER_2: + case SHADERMAN_SHADER_3: + case SHADERMAN_SHADER_4: + case SHADERMAN_SHADER_5: + case SHADERMAN_SHADER_6: + case SHADERMAN_SHADER_7: + { + char type_str[256]; + uint8_t index = (i - SHADERMAN_SHADER_0) / 3; + if (*rgui->shader.pass[index].source.cg) + fill_pathname_base(type_str, + rgui->shader.pass[index].source.cg, sizeof(type_str)); + else + strlcpy(type_str, "N/A", sizeof(type_str)); + snprintf(text, sizeof(text), "Shader #%d", index); + strlcpy(setting_text, type_str, sizeof(setting_text)); + } + break; + case SHADERMAN_SHADER_0_FILTER: + case SHADERMAN_SHADER_1_FILTER: + case SHADERMAN_SHADER_2_FILTER: + case SHADERMAN_SHADER_3_FILTER: + case SHADERMAN_SHADER_4_FILTER: + case SHADERMAN_SHADER_5_FILTER: + case SHADERMAN_SHADER_6_FILTER: + case SHADERMAN_SHADER_7_FILTER: + { + char type_str[256]; + uint8_t index = (i - SHADERMAN_SHADER_0) / 3; + snprintf(text, sizeof(text), "Shader #%d filter", index); + shader_manager_get_str_filter(type_str, sizeof(type_str), index); + strlcpy(setting_text, type_str, sizeof(setting_text)); + } + break; + case SHADERMAN_SHADER_0_SCALE: + case SHADERMAN_SHADER_1_SCALE: + case SHADERMAN_SHADER_2_SCALE: + case SHADERMAN_SHADER_3_SCALE: + case SHADERMAN_SHADER_4_SCALE: + case SHADERMAN_SHADER_5_SCALE: + case SHADERMAN_SHADER_6_SCALE: + case SHADERMAN_SHADER_7_SCALE: + { + char type_str[256]; + uint8_t index = (i - SHADERMAN_SHADER_0) / 3; + unsigned scale = rgui->shader.pass[index].fbo.scale_x; + + snprintf(text, sizeof(text), "Shader #%d scale", index); + + if (!scale) + strlcpy(type_str, "Don't care", sizeof(type_str)); + else + snprintf(type_str, sizeof(type_str), "%ux", scale); + + strlcpy(setting_text, type_str, sizeof(setting_text)); + } + break; +#endif + } + + switch (i) + { +#ifdef __CELLOS_LV2__ + case SETTING_CHANGE_RESOLUTION: +#endif + case INGAME_MENU_CONFIG: + case SETTING_ROTATION: + case SETTING_ASPECT_RATIO: + case SETTING_CONTROLS_BIND_DEVICE_TYPE: + case SETTING_CONTROLS_NUMBER: + case SETTING_PATH_SYSTEM: + case SETTING_PATH_SRAM_DIRECTORY: + case SETTING_PATH_SAVESTATES_DIRECTORY: + case SETTING_PATH_DEFAULT_ROM_DIRECTORY: + case SETTING_AUDIO_CONTROL_RATE_DELTA: + case SETTING_EMU_AUDIO_MUTE: + case SETTING_REWIND_GRANULARITY: + case SETTING_REWIND_ENABLED: + case SETTING_VIDEO_CROP_OVERSCAN: + case SETTING_VIDEO_VSYNC: + case SETTING_REFRESH_RATE: + case SETTING_HW_TEXTURE_FILTER: + menu_set_settings_label(setting_text, sizeof(setting_text), &w, settings_lut[i]); + break; + case SETTING_CUSTOM_VIEWPORT: + case INGAME_MENU_SAVE_CONFIG: + case INGAME_MENU_CHANGE_LIBRETRO_CORE: + case INGAME_MENU_CHANGE_GAME: + case INGAME_MENU_SETTINGS_MODE: + case INGAME_MENU_PATH_OPTIONS_MODE: + case INGAME_MENU_INPUT_OPTIONS_MODE: + case INGAME_MENU_AUDIO_OPTIONS_MODE: + case INGAME_MENU_VIDEO_OPTIONS_MODE: + case INGAME_MENU_LOAD_GAME_HISTORY_MODE: +#ifdef HAVE_SHADER_MANAGER + case INGAME_MENU_SHADER_OPTIONS_MODE: +#endif + case INGAME_MENU_CORE_OPTIONS_MODE: + strlcpy(setting_text, "...", sizeof(setting_text)); + break; + } + + char setting_text_buf[256]; + menu_ticker_line(setting_text_buf, TICKER_LABEL_CHARS_MAX_PER_LINE, g_extern.frame_count / 15, setting_text, i == rgui->selection_ptr); + + if (!(j < NUM_ENTRY_PER_PAGE)) + { + j = 0; + item_page++; + } + + items_pages[i] = item_page; + j++; + + if (item_page != setting_page_number) + continue; + + y_increment += POSITION_Y_INCREMENT; + + font_parms.x = POSITION_X; + font_parms.y = y_increment; + font_parms.scale = FONT_SIZE_VARIABLE; + font_parms.color = (i == rgui->selection_ptr) ? YELLOW : WHITE; + + if (driver.video_poke->set_osd_msg) + driver.video_poke->set_osd_msg(driver.video_data, text, &font_parms); + + font_parms.x = POSITION_X_CENTER; + font_parms.color = WHITE; + + if (driver.video_poke->set_osd_msg) + driver.video_poke->set_osd_msg(driver.video_data, setting_text_buf, &font_parms); + + if (i != rgui->selection_ptr) + continue; + +#ifdef HAVE_MENU_PANEL + menu_panel->y = y_increment; +#endif + } + } + + if (render_history) + { + if (rom_history_size(rgui->history)) + { + float y_increment = POSITION_Y_START; + + y_increment += POSITION_Y_INCREMENT; + + font_parms.x = POSITION_X; + font_parms.y = y_increment; + font_parms.scale = CURRENT_PATH_FONT_SIZE; + font_parms.color = WHITE; + size_t opts = rom_history_size(rgui->history); + + for (size_t i = 0; i < opts; i++) + { + const char *path = NULL; + const char *core_path = NULL; + const char *core_name = NULL; + + rom_history_get_index(rgui->history, i, + &path, &core_path, &core_name); + + char path_short[PATH_MAX]; + fill_pathname(path_short, path_basename(path), "", sizeof(path_short)); + + char fill_buf[PATH_MAX]; + snprintf(fill_buf, sizeof(fill_buf), "%s (%s)", + path_short, core_name); + + /* not on same page? */ + if ((i / NUM_ENTRY_PER_PAGE) != (hist_opt_selected / NUM_ENTRY_PER_PAGE)) + continue; + +#ifdef HAVE_MENU_PANEL + //check if this is the currently selected option + if (i == hist_opt_selected) + menu_panel->y = font_parms.y; +#endif + + font_parms.x = POSITION_X; + font_parms.color = (hist_opt_selected == i) ? YELLOW : WHITE; + + if (driver.video_poke->set_osd_msg) + driver.video_poke->set_osd_msg(driver.video_data, + fill_buf, &font_parms); + + font_parms.y += POSITION_Y_INCREMENT; + } + } + else if (driver.video_poke->set_osd_msg) + driver.video_poke->set_osd_msg(driver.video_data, "No history available.", &font_parms); + } + + if (render_ingame_menu_resize && rgui->frame_buf_show) + { + char viewport[32]; + snprintf(viewport, sizeof(viewport), "Viewport X: #%d Y: %d (%dx%d)", g_extern.console.screen.viewports.custom_vp.x, g_extern.console.screen.viewports.custom_vp.y, g_extern.console.screen.viewports.custom_vp.width, + g_extern.console.screen.viewports.custom_vp.height); + + font_parms.x = POSITION_X; + font_parms.y = POSITION_Y_BEGIN; + font_parms.scale = HARDCODE_FONT_SIZE; + font_parms.color = WHITE; + + if (driver.video_poke->set_osd_msg) + driver.video_poke->set_osd_msg(driver.video_data, viewport, &font_parms); + } +}