(Menu) Add Info button - press 'Select' on the RetroPad to

have a message box pop up on an item. It will provide you with
info on the item. Not all items covered yet but it's coming along.
This commit is contained in:
twinaphex 2014-05-31 05:14:04 +02:00
parent 0e28c455f3
commit db0da490fa
8 changed files with 663 additions and 35 deletions

View File

@ -268,7 +268,7 @@ static const bool load_dummy_on_core_shutdown = false;
static const bool load_dummy_on_core_shutdown = true;
#endif
// Forcibly disable composition. Only valid on Windows Vista/7 for now.
// Forcibly disable composition. Only valid on Windows Vista/7/8 for now.
static const bool disable_composition = false;
// Video VSYNC (recommended)
@ -432,7 +432,7 @@ static const bool font_enable = true;
// This is used to calculate audio input rate with the formula:
// audio_input_rate = game_input_rate * display_refresh_rate / game_refresh_rate.
// If the implementation does not report any values,
// SNES NTSC defaults will be assumed for compatibility.
// NTSC defaults will be assumed for compatibility.
// This value should stay close to 60Hz to avoid large pitch changes.
// If your monitor does not run at 60Hz, or something close to it, disable VSync,
// and leave this at its default.
@ -474,7 +474,7 @@ static const char *audio_resampler = "CC";
static const char *audio_resampler = "sinc";
#endif
// Experimental rate control
// Audio rate control
#if defined(GEKKO) || !defined(RARCH_CONSOLE)
static const bool rate_control = true;
#else
@ -482,11 +482,7 @@ static const bool rate_control = false;
#endif
// Rate control delta. Defines how much rate_control is allowed to adjust input rate.
#if defined(__QNX__)
static const float rate_control_delta = 0.000;
#else
static const float rate_control_delta = 0.005;
#endif
// Default audio volume in dB. (0.0 dB == unity gain).
static const float audio_volume = 0.0;

View File

@ -43,6 +43,8 @@
#endif
#endif
static unsigned info_selection_ptr = 0;
#ifdef HAVE_SHADER_MANAGER
static inline struct gfx_shader *shader_manager_get_current_shader(void *data, unsigned type)
{
@ -461,7 +463,7 @@ static void menu_common_entries_init(void *data, unsigned menu_type)
driver.menu_ctx->populate_entries(rgui, menu_type);
}
static int menu_start_screen_iterate(unsigned action)
static int menu_info_screen_iterate(unsigned action)
{
unsigned i;
char msg[1024];
@ -500,6 +502,620 @@ static int menu_start_screen_iterate(unsigned action)
}
}
switch(info_selection_ptr)
{
case RGUI_SETTINGS_WINDOW_COMPOSITING_ENABLE:
snprintf(msg, sizeof(msg),
"-- Forcibly disable composition.\n"
"Only valid on Windows Vista/7/8 for now.");
break;
case RGUI_SETTINGS_LIBRETRO_LOG_LEVEL:
snprintf(msg, sizeof(msg),
"-- Sets log level for libretro cores \n"
"(GET_LOG_INTERFACE). \n"
" \n"
" If a log level issued by a libretro \n"
" core is below libretro_log level, it \n"
" is ignored.\n"
" \n"
" DEBUG logs are always ignored unless \n"
" verbose mode is activated (--verbose).\n"
" \n"
" DEBUG = 0\n"
" INFO = 1\n"
" WARN = 2\n"
" ERROR = 3"
);
break;
case RGUI_SETTINGS_LOGGING_VERBOSITY:
snprintf(msg, sizeof(msg),
"-- Enable or disable verbosity level \n"
"of frontend.");
break;
case RGUI_SYSTEM_DIR_PATH:
snprintf(msg, sizeof(msg),
"-- Sets the 'system' directory.\n"
"Implementations can query for this\n"
"directory to load BIOSes, system-\n"
"specific configs, etc.");
break;
case RGUI_START_SCREEN:
snprintf(msg, sizeof(msg),
" -- Show startup screen in menu.\n"
"Is automatically set to false when seen\n"
"for the first time.\n"
" \n"
"This is only updated in config if\n"
"'Config Save On Exit' is set to true.\n");
break;
case RGUI_SETTINGS_CONFIG_SAVE_ON_EXIT:
snprintf(msg, sizeof(msg),
" -- Flushes config to disk on exit.\n"
"Useful for menu as settings can be\n"
"modified. Overwrites the config.\n"
" \n"
"#include's and comments are not pre-\n"
"served.\n");
break;
case RGUI_SETTINGS_PER_CORE_CONFIG:
snprintf(msg, sizeof(msg),
" -- Load up a specific config file \n"
"based on the core being used.\n");
break;
case RGUI_SETTINGS_VIDEO_WINDOW_SCALE_X:
case RGUI_SETTINGS_VIDEO_WINDOW_SCALE_Y:
snprintf(msg, sizeof(msg),
" -- Fullscreen resolution.\n"
" \n"
"Resolution of 0 uses the \n"
"resolution of the environment.\n");
break;
case RGUI_SETTINGS_VIDEO_VSYNC:
snprintf(msg, sizeof(msg),
" -- Video V-Sync.\n");
break;
case RGUI_SETTINGS_VIDEO_HARD_SYNC:
snprintf(msg, sizeof(msg),
" -- Attempts to hard-synchronize \n"
"CPU and GPU.\n"
" \n"
"Can reduce latency at cost of \n"
"performance.");
break;
case RGUI_SETTINGS_VIDEO_HARD_SYNC_FRAMES:
snprintf(msg, sizeof(msg),
" -- Sets how many frames CPU can \n"
"run ahead of GPU when using 'GPU \n"
"Hard Sync'.\n"
" \n"
"Maximum is 3.\n"
" \n"
" 0: Syncs to GPU immediately.\n"
" 1: Syncs to previous frame.\n"
" 2: Etc ...");
break;
case RGUI_SETTINGS_VIDEO_BLACK_FRAME_INSERTION:
snprintf(msg, sizeof(msg),
" -- Inserts a black frame inbetween \n"
"frames.\n"
" \n"
"Useful for 120 Hz monitors who want to \n"
"play 60 Hz material with eliminated \n"
"ghosting.\n"
" \n"
"Video refresh rate should still be con-\n"
"figured as if it is a 60 Hz monitor \n"
"(divide refresh rate by 2).");
break;
case RGUI_SETTINGS_VIDEO_THREADED:
snprintf(msg, sizeof(msg),
" -- Use threaded video driver.\n"
" \n"
"Using this might improve performance at \n"
"possible cost of latency and more video \n"
"stuttering.");
break;
case RGUI_SETTINGS_VIDEO_INTEGER_SCALE:
snprintf(msg, sizeof(msg),
" -- Only scales video in integer \n"
"steps.\n"
" \n"
"The base size depends on system-reported \n"
"geometry and aspect ratio.\n"
" \n"
"If Force Aspect is not set, X/Y will be \n"
"integer scaled independently.");
break;
case RGUI_SETTINGS_VIDEO_CROP_OVERSCAN:
snprintf(msg, sizeof(msg),
" -- Forces cropping of overscanned \n"
"frames.\n"
" \n"
"Exact behavior of this option is core-\n"
"implementation specific.");
break;
case RGUI_SETTINGS_VIDEO_MONITOR_INDEX:
snprintf(msg, sizeof(msg),
" -- Which monitor to prefer.\n"
" \n"
"0 (default) means no particular monitor \n"
"is preferred, 1 and up (1 being first \n"
"monitor), suggests RetroArch to use that \n"
"particular monitor.");
break;
case RGUI_SETTINGS_VIDEO_ROTATION:
snprintf(msg, sizeof(msg),
" -- Forces a certain rotation \n"
"of the screen.\n"
" \n"
"The rotation is added to rotations which\n"
"the libretro core sets (see Video Allow\n"
"Rotate).");
break;
case RGUI_SETTINGS_AUDIO_CONTROL_RATE_DELTA:
snprintf(msg, sizeof(msg),
" -- Audio rate control.\n"
" \n"
"Setting this to 0 disables rate control.\n"
"Any other value controls audio rate control \n"
"delta.\n"
" \n"
"Defines how much input rate can be adjusted \n"
"dynamically.\n"
" \n"
" Input rate is defined as: \n"
" input rate * (1.0 +/- (rate control delta))");
break;
case RGUI_SETTINGS_AUDIO_VOLUME:
snprintf(msg, sizeof(msg),
" -- Audio volume, expressed in dB.\n"
" \n"
" 0 dB is normal volume. No gain will be applied.\n"
"Gain can be controlled in runtime with Input\n"
"Volume Up / Input Volume Down.");
break;
case RGUI_SETTINGS_VIDEO_SOFTFILTER:
#ifdef HAVE_FILTERS_BUILTIN
snprintf(msg, sizeof(msg),
" -- CPU-based video filter.");
#else
snprintf(msg, sizeof(msg),
" -- CPU-based video filter.\n"
" \n"
"Path to a dynamic library.");
#endif
break;
case RGUI_SETTINGS_BLOCK_SRAM_OVERWRITE:
snprintf(msg, sizeof(msg),
" -- Block SRAM from being overwritten \n"
"when loading save states.\n"
" \n"
"Might potentially lead to buggy games.");
break;
case RGUI_SETTINGS_PRIVACY_CAMERA_ALLOW:
snprintf(msg, sizeof(msg),
" -- Allow or disallow camera access by \n"
"cores.");
break;
case RGUI_SETTINGS_PRIVACY_LOCATION_ALLOW:
snprintf(msg, sizeof(msg),
" -- Allow or disallow location services \n"
"access by cores.");
break;
case RGUI_SETTINGS_REWIND_ENABLE:
snprintf(msg, sizeof(msg),
" -- Enable rewinding.\n"
" \n"
"This will take a performance hit, \n"
"so it is disabled by default.");
break;
case RGUI_SETTINGS_REWIND_GRANULARITY:
snprintf(msg, sizeof(msg),
" -- Rewind granularity.\n"
" \n"
" When rewinding defined number of \n"
"frames, you can rewind several frames \n"
"at a time, increasing the rewinding \n"
"speed.");
break;
case RGUI_SETTINGS_DEVICE_AUTODETECT_ENABLE:
snprintf(msg, sizeof(msg),
" -- Enable input auto-detection.\n"
" \n"
"Will attempt to auto-configure \n"
"joypads, Plug-and-Play style.");
break;
case RGUI_SETTINGS_INPUT_AXIS_THRESHOLD:
snprintf(msg, sizeof(msg),
" -- Defines axis threshold.\n"
" \n"
" Possible values are [0.0, 1.0].");
break;
case RGUI_SETTINGS_DRIVER_INPUT:
snprintf(msg, sizeof(msg),
" -- Input driver.\n"
" \n"
"Depending on video driver, it might \n"
"force a different input driver.");
break;
case RGUI_SETTINGS_AUDIO_DSP_FILTER:
snprintf(msg, sizeof(msg),
" -- Audio DSP plugin.\n"
" Processes audio before it's sent to \n"
"the driver."
#ifndef HAVE_FILTERS_BUILTIN
" \n"
"Path to a dynamic library."
#endif
);
break;
case RGUI_SETTINGS_TOGGLE_FULLSCREEN:
snprintf(msg, sizeof(msg),
" -- Toggles fullscreen.");
break;
case RGUI_SETTINGS_SLOWMOTION_RATIO:
snprintf(msg, sizeof(msg),
" -- Slowmotion ratio."
" \n"
"When slowmotion, content will slow\n"
"down by factor.");
break;
case RGUI_SETTINGS_FASTFORWARD_RATIO:
snprintf(msg, sizeof(msg),
" -- Fastforward ratio."
" \n"
"The maximum rate at which content will\n"
"be run when using fast forward.\n"
" \n"
" (E.g. 5.0 for 60 fps content => 300 fps \n"
"cap).\n"
" \n"
"RetroArch will go to sleep to ensure that \n"
"the maximum rate will not be exceeded.\n"
"Do not rely on this cap to be perfectly \n"
"accurate.");
break;
case RGUI_SETTINGS_PAUSE_IF_WINDOW_FOCUS_LOST:
snprintf(msg, sizeof(msg),
" -- Pause gameplay when window focus \n"
"is lost.");
break;
case RGUI_SETTINGS_GPU_SCREENSHOT:
snprintf(msg, sizeof(msg),
" -- Screenshots output of GPU shaded \n"
"material if available.");
break;
case RGUI_SETTINGS_SRAM_AUTOSAVE:
snprintf(msg, sizeof(msg),
" -- Autosaves the non-volatile SRAM \n"
"at a regular interval.\n"
" \n"
"This is disabled by default unless set \n"
"otherwise. The interval is measured in \n"
"seconds. \n"
" \n"
"A value of 0 disables autosave.");
break;
case RGUI_SCREENSHOT_DIR_PATH:
snprintf(msg, sizeof(msg),
" -- Directory to dump screenshots to.");
break;
case RGUI_SETTINGS_DRIVER_AUDIO_DEVICE:
snprintf(msg, sizeof(msg),
" -- Override the default audio device \n"
"the audio driver uses.\n"
"This is driver dependent. E.g.\n"
#ifdef HAVE_ALSA
" \n"
"ALSA wants a PCM device."
#endif
#ifdef HAVE_OSS
" \n"
"OSS wants a path (e.g. /dev/dsp)."
#endif
#ifdef HAVE_JACK
" \n"
"JACK wants portnames (e.g. system:playback1\n"
",system:playback_2)."
#endif
#ifdef HAVE_RSOUND
" \n"
"RSound wants an IP address to an RSound \n"
"server."
#endif
);
break;
case RGUI_ASSETS_DIR_PATH:
snprintf(msg, sizeof(msg),
" -- Assets directory. \n"
" This location is queried by default when \n"
"menu interfaces try to look for loadable \n"
"assets, etc.");
break;
case RGUI_SETTINGS_SAVESTATE_AUTO_SAVE:
snprintf(msg, sizeof(msg),
" -- Automatically saves a savestate at the \n"
"end of RetroArch's lifetime.\n"
" \n"
"RetroArch will automatically load any savestate\n"
"with this path on startup if 'Savestate Auto\n"
"Load' is set.");
break;
case RGUI_SETTINGS_VIDEO_SWAP_INTERVAL:
snprintf(msg, sizeof(msg),
" -- VSync Swap Interval.\n"
" \n"
"Uses a custom swap interval for VSync. Set this \n"
"to effectively halve monitor refresh rate.");
break;
case RGUI_SETTINGS_VIDEO_REFRESH_RATE_AUTO:
snprintf(msg, sizeof(msg),
" -- Refresh Rate Auto.\n"
" \n"
"The accurate refresh rate of our monitor (Hz).\n"
"This is used to calculate audio input rate with \n"
"the formula: \n"
" \n"
"audio_input_rate = game input rate * display \n"
"refresh rate / game refresh rate\n"
" \n"
"If the implementation does not report any \n"
"values, NTSC defaults will be assumed for \n"
"compatibility.\n"
" \n"
"This value should stay close to 60Hz to avoid \n"
"large pitch changes. If your monitor does \n"
"not run at 60Hz, or something close to it, \n"
"disable VSync, and leave this at its default.");
break;
case RGUI_LIBRETRO_DIR_PATH:
snprintf(msg, sizeof(msg),
" -- A directory for where to search for \n"
"libretro core implementations.");
break;
case RGUI_SAVEFILE_DIR_PATH:
snprintf(msg, sizeof(msg),
" -- Save all save files (*.srm) to this \n"
"directory. This includes related files like \n"
".bsv, .rt, .psrm, etc...\n"
" \n"
"This will be overridden by explicit command line\n"
"options.");
break;
case RGUI_SAVESTATE_DIR_PATH:
snprintf(msg, sizeof(msg),
" -- Save all save states (*.state) to this \n"
"directory.\n"
" \n"
"This will be overridden by explicit command line\n"
"options.");
break;
case RGUI_SETTINGS_BIND_ANALOG_LEFT_X_PLUS:
case RGUI_SETTINGS_BIND_ANALOG_LEFT_X_MINUS:
case RGUI_SETTINGS_BIND_ANALOG_LEFT_Y_PLUS:
case RGUI_SETTINGS_BIND_ANALOG_LEFT_Y_MINUS:
case RGUI_SETTINGS_BIND_ANALOG_RIGHT_X_PLUS:
case RGUI_SETTINGS_BIND_ANALOG_RIGHT_X_MINUS:
case RGUI_SETTINGS_BIND_ANALOG_RIGHT_Y_PLUS:
case RGUI_SETTINGS_BIND_ANALOG_RIGHT_Y_MINUS:
snprintf(msg, sizeof(msg),
" -- Axis for analog stick (DualShock-esque.\n"
" \n"
"Bound as usual, however, if a real analog \n"
"axis is bound, it can be read as a true analog.\n"
" \n"
"Positive X axis is right. \n"
"Positive Y axis is down.");
break;
case RGUI_SETTINGS_BIND_SHADER_NEXT:
snprintf(msg, sizeof(msg),
" -- Applies next shader in directory.");
break;
case RGUI_SETTINGS_BIND_SHADER_PREV:
snprintf(msg, sizeof(msg),
" -- Applies previous shader in directory.");
break;
case RGUI_SETTINGS_BIND_LOAD_STATE_KEY:
snprintf(msg, sizeof(msg),
" -- Loads state.");
break;
case RGUI_SETTINGS_BIND_SAVE_STATE_KEY:
snprintf(msg, sizeof(msg),
" -- Saves state.");
break;
case RGUI_SETTINGS_BIND_STATE_SLOT_PLUS:
case RGUI_SETTINGS_BIND_STATE_SLOT_MINUS:
snprintf(msg, sizeof(msg),
" -- State slots.\n"
" \n"
" With slot set to 0, save state name is *.state \n"
" (or whatever defined on commandline).\n"
"When slot is != 0, path will be (path)(d), \n"
"where (d) is slot number.");
break;
case RGUI_SETTINGS_BIND_TURBO_ENABLE:
snprintf(msg, sizeof(msg),
" -- Turbo enable.\n"
" \n"
"Holding the turbo while pressing another \n"
"button will let the button enter a turbo \n"
"mode where the button state is modulated \n"
"with a periodic signal. \n"
" \n"
"The modulation stops when the button \n"
"itself (not turbo button) is released.");
break;
case RGUI_SETTINGS_BIND_FAST_FORWARD_HOLD_KEY:
snprintf(msg, sizeof(msg),
" -- Hold for fast-forward. Releasing button \n"
"disables fast-forward.");
break;
case RGUI_SETTINGS_BIND_QUIT_KEY:
snprintf(msg, sizeof(msg),
" -- Key to exit RetroArch cleanly."
#if !defined(RARCH_MOBILE) && !defined(RARCH_CONSOLE)
"\nKilling it in any hard way (SIGTERM, SIGKILL, \n"
"etc) will terminate without saving RAM, etc."
#endif
);
break;
case RGUI_SETTINGS_BIND_REWIND:
snprintf(msg, sizeof(msg),
" -- Hold button down to rewind.\n"
" \n"
"Rewind must be enabled.");
break;
case RGUI_SETTINGS_BIND_MOVIE_RECORD_TOGGLE:
snprintf(msg, sizeof(msg),
" -- Toggle between recording and not.");
break;
case RGUI_SETTINGS_BIND_PAUSE_TOGGLE:
snprintf(msg, sizeof(msg),
" -- Toggle between paused and non-paused state.");
break;
case RGUI_SETTINGS_BIND_FRAMEADVANCE:
snprintf(msg, sizeof(msg),
" -- Frame advance when content is paused.");
break;
case RGUI_SETTINGS_BIND_RESET:
snprintf(msg, sizeof(msg),
" -- Reset the content.\n");
break;
case RGUI_SETTINGS_BIND_CHEAT_INDEX_PLUS:
snprintf(msg, sizeof(msg),
" -- Increment cheat index.\n");
break;
case RGUI_SETTINGS_BIND_CHEAT_INDEX_MINUS:
snprintf(msg, sizeof(msg),
" -- Decrement cheat index.\n");
break;
case RGUI_SETTINGS_BIND_CHEAT_TOGGLE:
snprintf(msg, sizeof(msg),
" -- Toggle cheat index.\n");
break;
case RGUI_SETTINGS_BIND_SCREENSHOT:
snprintf(msg, sizeof(msg),
" -- Take screenshot.");
break;
case RGUI_SETTINGS_BIND_MUTE:
snprintf(msg, sizeof(msg),
" -- Mute/unmute audio.");
break;
case RGUI_SETTINGS_BIND_NETPLAY_FLIP:
snprintf(msg, sizeof(msg),
" -- Netplay flip players.");
break;
case RGUI_SETTINGS_BIND_SLOWMOTION:
snprintf(msg, sizeof(msg),
" -- Hold for slowmotion.");
break;
case RGUI_SETTINGS_BIND_ENABLE_HOTKEY:
snprintf(msg, sizeof(msg),
" -- Enable other hotkeys.\n"
" \n"
" If this hotkey is bound to either keyboard, \n"
"joybutton or joyaxis, all other hotkeys will \n"
"be disabled unless this hotkey is also held \n"
"at the same time. \n"
" \n"
"This is useful for RETRO_KEYBOARD centric \n"
"implementations which query a large area of \n"
"the keyboard, where it is not desirable that \n"
"hotkeys get in the way.");
break;
case RGUI_SETTINGS_BIND_VOLUME_UP:
snprintf(msg, sizeof(msg),
" -- Increases audio volume.");
break;
case RGUI_SETTINGS_BIND_VOLUME_DOWN:
snprintf(msg, sizeof(msg),
" -- Decreases audio volume.");
break;
case RGUI_SETTINGS_BIND_OVERLAY_NEXT:
snprintf(msg, sizeof(msg),
" -- Toggles to next overlay.\n"
" \n"
"Wraps around.");
break;
case RGUI_SETTINGS_BIND_DISK_EJECT_TOGGLE:
snprintf(msg, sizeof(msg),
" -- Toggles eject for disks.\n"
" \n"
"Used for multiple-disk content.");
break;
case RGUI_SETTINGS_BIND_DISK_NEXT:
snprintf(msg, sizeof(msg),
" -- Cycles through disk images. Use after \n"
"ejecting. \n"
" \n"
" Complete by toggling eject again.");
break;
case RGUI_SETTINGS_BIND_GRAB_MOUSE_TOGGLE:
snprintf(msg, sizeof(msg),
" -- Toggles mouse grab.\n"
" \n"
"When mouse is grabbed, RetroArch hides the \n"
"mouse, and keeps the mouse pointer inside \n"
"the window to allow relative mouse input to \n"
"work better.");
break;
case RGUI_SETTINGS_BIND_MENU_TOGGLE:
snprintf(msg, sizeof(msg),
" -- Toggles menu.");
break;
default:
snprintf(msg, sizeof(msg),
"-- No info on this item available. --\n");
}
if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render_messagebox)
driver.menu_ctx->render_messagebox(msg);
if (action == RGUI_ACTION_OK)
file_list_pop(rgui->menu_stack, &rgui->selection_ptr);
return 0;
}
static int menu_start_screen_iterate(unsigned action)
{
unsigned i;
char msg[1024];
rgui_handle_t *rgui = (rgui_handle_t*)driver.menu;
if (!rgui)
return 0;
if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render)
driver.menu_ctx->render();
char desc[6][64];
static const unsigned binds[] = {
RETRO_DEVICE_ID_JOYPAD_UP,
RETRO_DEVICE_ID_JOYPAD_DOWN,
RETRO_DEVICE_ID_JOYPAD_A,
RETRO_DEVICE_ID_JOYPAD_B,
RETRO_DEVICE_ID_JOYPAD_SELECT,
RARCH_MENU_TOGGLE,
RARCH_QUIT_KEY,
};
for (i = 0; i < ARRAY_SIZE(binds); i++)
{
if (driver.input && driver.input->set_keybinds)
{
struct platform_bind key_label;
strlcpy(key_label.desc, "Unknown", sizeof(key_label.desc));
key_label.joykey = g_settings.input.binds[0][binds[i]].joykey;
driver.input->set_keybinds(&key_label, 0, 0, 0, 1ULL << KEYBINDS_ACTION_GET_BIND_LABEL);
strlcpy(desc[i], key_label.desc, sizeof(desc[i]));
}
else
{
const struct retro_keybind *bind = &g_settings.input.binds[0][binds[i]];
input_get_bind_string(desc[i], bind, sizeof(desc[i]));
}
}
snprintf(msg, sizeof(msg),
"-- Welcome to RetroArch / RGUI --\n"
" \n" // strtok_r doesn't split empty strings.
@ -509,6 +1125,7 @@ static int menu_start_screen_iterate(unsigned action)
" Scroll (Down): %-20s\n"
" Accept/OK: %-20s\n"
" Back: %-20s\n"
" Info: %-20s\n"
"Enter/Exit RGUI: %-20s\n"
" Exit RetroArch: %-20s\n"
" \n"
@ -523,7 +1140,7 @@ static int menu_start_screen_iterate(unsigned action)
" \n"
"Press Accept/OK to continue.",
desc[0], desc[1], desc[2], desc[3], desc[4], desc[5]);
desc[0], desc[1], desc[2], desc[3], desc[4], desc[5], desc[6]);
if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render_messagebox)
driver.menu_ctx->render_messagebox(msg);
@ -653,7 +1270,13 @@ static int menu_settings_iterate(unsigned action)
rgui->need_refresh = true;
}
break;
case RGUI_ACTION_SELECT:
{
const char *path = NULL;
file_list_get_at_offset(rgui->selection_buf, rgui->selection_ptr, &path, &info_selection_ptr);
file_list_push(rgui->menu_stack, "", RGUI_INFO_SCREEN, 0);
}
break;
case RGUI_ACTION_LEFT:
case RGUI_ACTION_RIGHT:
case RGUI_ACTION_OK:
@ -1325,6 +1948,8 @@ static int menu_common_iterate(unsigned action)
if (menu_type == RGUI_START_SCREEN)
return menu_start_screen_iterate(action);
else if (menu_type == RGUI_INFO_SCREEN)
return menu_info_screen_iterate(action);
else if (menu_common_type_is(menu_type) == RGUI_SETTINGS)
return menu_settings_iterate(action);
else if (menu_type == RGUI_SETTINGS_CUSTOM_VIEWPORT || menu_type == RGUI_SETTINGS_CUSTOM_VIEWPORT_2)

View File

@ -357,6 +357,8 @@ static void rgui_render(void)
snprintf(title, sizeof(title), "MENU %s", dir);
else if (menu_type == RGUI_SETTINGS_OPEN_HISTORY)
strlcpy(title, "LOAD HISTORY", sizeof(title));
else if (menu_type == RGUI_INFO_SCREEN)
strlcpy(title, "INFO", sizeof(title));
#ifdef HAVE_OVERLAY
else if (menu_type == RGUI_SETTINGS_OVERLAY_PRESET)
snprintf(title, sizeof(title), "OVERLAY %s", dir);

View File

@ -215,6 +215,8 @@ static void rmenu_render(void)
snprintf(title, sizeof(title), "MENU %s", dir);
else if (menu_type == RGUI_SETTINGS_OPEN_HISTORY)
strlcpy(title, "LOAD HISTORY", sizeof(title));
else if (menu_type == RGUI_INFO_SCREEN)
strlcpy(title, "INFO", sizeof(title));
#ifdef HAVE_OVERLAY
else if (menu_type == RGUI_SETTINGS_OVERLAY_PRESET)
snprintf(title, sizeof(title), "OVERLAY %s", dir);

View File

@ -451,6 +451,8 @@ static void rmenu_xui_render(void)
snprintf(title, sizeof(title), "MENU %s", dir);
else if (menu_type == RGUI_SETTINGS_OPEN_HISTORY)
strlcpy(title, "LOAD HISTORY", sizeof(title));
else if (menu_type == RGUI_INFO_SCREEN)
strlcpy(title, "INFO", sizeof(title));
#ifdef HAVE_OVERLAY
else if (menu_type == RGUI_SETTINGS_OVERLAY_PRESET)
snprintf(title, sizeof(title), "OVERLAY %s", dir);

View File

@ -617,6 +617,8 @@ bool menu_iterate(void)
action = RGUI_ACTION_OK;
else if (rgui->trigger_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_START))
action = RGUI_ACTION_START;
else if (rgui->trigger_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_SELECT))
action = RGUI_ACTION_SELECT;
if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->iterate)
input_entry_ret = driver.menu_ctx->backend->iterate(action);

View File

@ -62,6 +62,7 @@ typedef enum
RGUI_FILE_DEVICE,
RGUI_FILE_USE_DIRECTORY,
RGUI_SETTINGS,
RGUI_INFO_SCREEN,
RGUI_START_SCREEN,
} rgui_file_type_t;
@ -74,6 +75,7 @@ typedef enum
RGUI_ACTION_OK,
RGUI_ACTION_CANCEL,
RGUI_ACTION_REFRESH,
RGUI_ACTION_SELECT,
RGUI_ACTION_START,
RGUI_ACTION_MESSAGE,
RGUI_ACTION_SCROLL_DOWN,

View File

@ -24,7 +24,7 @@
# Path to a libretro implementation.
# libretro_path = "/path/to/libretro.so"
# A directory for where to search for libretro implmentations.
# A directory for where to search for libretro core implementations.
# libretro_directory =
# Sets log level for libretro cores (GET_LOG_INTERFACE).
@ -54,7 +54,7 @@
# Implementations can query for this directory to load BIOSes, system-specific configs, etc.
# system_directory =
# Sets start directory for RGUI content browser.
# Sets start directory for menu content browser.
# rgui_browser_directory =
# Content directory. Interacts with RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY.
@ -109,7 +109,7 @@
# suggests RetroArch to use that particular monitor.
# video_monitor_index = 0
# Forcibly disable composition. Only works in Windows Vista/7 for now.
# Forcibly disable composition. Only works in Windows Vista/7/8 for now.
# video_disable_composition = false
# Video vsync.
@ -137,7 +137,7 @@
# Smoothens picture with bilinear filtering. Should be disabled if using pixel shaders.
# video_smooth = true
# Forces rendering area to stay equal to game aspect ratio or as defined in video_aspect_ratio.
# Forces rendering area to stay equal to content aspect ratio or as defined in video_aspect_ratio.
# video_force_aspect = true
# Only scales video in integer steps.
@ -166,17 +166,17 @@
# Other shaders can still be loaded later in runtime.
# video_shader_enable = false
# Defines a directory where shaders (Cg, CGP, XML) are kept for easy access.
# Defines a directory where shaders (Cg, CGP, GLSL) are kept for easy access.
# video_shader_dir =
# CPU-based filter. Path to a dynamic library.
# CPU-based video filter. Path to a dynamic library.
# video_filter =
# Path to a TTF font used for rendering messages. This path must be defined to enable fonts.
# Path to a font used for rendering messages. This path must be defined to enable fonts.
# Do note that the _full_ path of the font is necessary!
# video_font_path =
# Size of the TTF font rendered.
# Size of the font rendered.
# video_font_size = 48
# Attempt to scale the font to fit better for multiple window sizes.
@ -200,7 +200,7 @@
# Allows libretro cores to set rotation modes.
# Setting this to false will honor, but ignore this request.
# This is useful for vertically oriented games where one manually rotates the monitor.
# This is useful for vertically oriented content where one manually rotates the monitor.
# video_allow_rotate = true
# Forces a certain rotation of the screen.
@ -216,7 +216,7 @@
# Audio output samplerate.
# audio_out_rate = 48000
# Which resampler to use.
# Audio resampler backend. Which audio resampler to use.
# Default will use "sinc".
# audio_resampler =
@ -226,7 +226,7 @@
# Override the default audio device the audio_driver uses. This is driver dependant. E.g. ALSA wants a PCM device, OSS wants a path (e.g. /dev/dsp), Jack wants portnames (e.g. system:playback1,system:playback_2), and so on ...
# audio_device =
# External DSP plugin that processes audio before it's sent to the driver.
# Audio DSP plugin that processes audio before it's sent to the driver. Path to a dynamic library.
# audio_dsp_plugin =
# Will sync (block) on audio. Recommended.
@ -235,7 +235,7 @@
# Desired audio latency in milliseconds. Might not be honored if driver can't provide given latency.
# audio_latency = 64
# Enable experimental audio rate control.
# Enable audio rate control.
# audio_rate_control = true
# Controls audio rate control delta. Defines how much input rate can be adjusted dynamically.
@ -427,11 +427,11 @@
# Hold for fast-forward. Releasing button disables fast-forward.
# input_hold_fast_forward = l
# Key to exit emulator cleanly.
# Killing it in any hard way (SIGTERM, SIGKILL, etc, will terminate emulator without saving RAM, etc.)
# Key to exit RetroArch cleanly.
# Killing it in any hard way (SIGTERM, SIGKILL, etc, will terminate RetroArch without saving RAM, etc.)
# input_exit_emulator = escape
# Applies next and previous XML/Cg shader in directory.
# Applies next and previous shader in directory.
# input_shader_next = m
# input_shader_prev = n
@ -444,15 +444,12 @@
# Toggle between paused and non-paused state
# input_pause_toggle = p
# Frame advance when game is paused
# Frame advance when content is paused
# input_frame_advance = k
# Reset the game.
# Reset the content.
# input_reset = h
# Configures DSP plugin
# input_dsp_config = c
# Cheats.
# input_cheat_index_plus = y
# input_cheat_index_minus = t
@ -488,18 +485,18 @@
# Toggles to next overlay. Wraps around.
# input_overlay_next =
# Toggles eject for disks. Used for multiple-disk games.
# Toggles eject for disks. Used for multiple-disk content.
# input_disk_eject_toggle =
# Cycles through disk images. Use after ejecting.
# Complete by toggling eject again.
# input_disk_next =
# Toggles RGUI menu.
# Toggles menu.
# input_menu_toggle = f1
# Toggles mouse grab. When mouse is grabbed, RetroArch hides the mouse,
# and keeps the mouse pointer inside the window to allow relative mouse games
# and keeps the mouse pointer inside the window to allow relative mouse input
# to work better.
# input_grab_mouse_toggle = f11
@ -573,10 +570,10 @@
# There is no upper bound on the index.
# savestate_auto_index = false
# Slowmotion ratio. When slowmotion, game will slow down by factor.
# Slowmotion ratio. When slowmotion, content will slow down by factor.
# slowmotion_ratio = 3.0
# The maximum rate at which games will be run when using fast forward. (E.g. 5.0 for 60 fps game => 300 fps cap).
# The maximum rate at which content will be run when using fast forward. (E.g. 5.0 for 60 fps content => 300 fps cap).
# RetroArch will go to sleep to ensure that the maximum rate will not be exceeded.
# Do not rely on this cap to be perfectly accurate.
# A negative ratio equals no FPS cap.