mirror of
https://github.com/libretro/RetroArch
synced 2025-02-09 09:39:56 +00:00
Refactor prev/next driver settings
This commit is contained in:
parent
d34e08fb76
commit
a44665bcae
129
driver.c
129
driver.c
@ -243,101 +243,100 @@ static const menu_ctx_driver_t *menu_ctx_drivers[] = {
|
||||
};
|
||||
#endif
|
||||
|
||||
static const void *find_driver_nonempty(unsigned cmd, int i,
|
||||
static const void *find_driver_nonempty(const char *label, int i,
|
||||
char *str, size_t sizeof_str)
|
||||
{
|
||||
const void *driver = NULL;
|
||||
|
||||
switch (cmd)
|
||||
if (!strcmp(label, "camera_driver"))
|
||||
{
|
||||
case RARCH_DRIVER_LOCATION:
|
||||
driver = location_drivers[i];
|
||||
if (driver)
|
||||
strlcpy(str, location_drivers[i]->ident, sizeof_str);
|
||||
break;
|
||||
case RARCH_DRIVER_CAMERA:
|
||||
driver = camera_drivers[i];
|
||||
if (driver)
|
||||
strlcpy(str, camera_drivers[i]->ident, sizeof_str);
|
||||
break;
|
||||
case RARCH_DRIVER_OSK:
|
||||
driver = osk_drivers[i];
|
||||
if (driver)
|
||||
strlcpy(str, osk_drivers[i]->ident, sizeof_str);
|
||||
break;
|
||||
driver = camera_drivers[i];
|
||||
if (driver)
|
||||
strlcpy(str, camera_drivers[i]->ident, sizeof_str);
|
||||
}
|
||||
else if (!strcmp(label, "location_driver"))
|
||||
{
|
||||
driver = location_drivers[i];
|
||||
if (driver)
|
||||
strlcpy(str, location_drivers[i]->ident, sizeof_str);
|
||||
}
|
||||
else if (!strcmp(label, "osk_driver"))
|
||||
{
|
||||
driver = osk_drivers[i];
|
||||
if (driver)
|
||||
strlcpy(str, osk_drivers[i]->ident, sizeof_str);
|
||||
}
|
||||
#ifdef HAVE_MENU
|
||||
case RARCH_DRIVER_MENU:
|
||||
driver = menu_ctx_drivers[i];
|
||||
if (driver)
|
||||
strlcpy(str, menu_ctx_drivers[i]->ident, sizeof_str);
|
||||
break;
|
||||
else if (!strcmp(label, "menu_driver"))
|
||||
{
|
||||
driver = menu_ctx_drivers[i];
|
||||
if (driver)
|
||||
strlcpy(str, menu_ctx_drivers[i]->ident, sizeof_str);
|
||||
}
|
||||
#endif
|
||||
case RARCH_DRIVER_INPUT:
|
||||
driver = input_drivers[i];
|
||||
if (driver)
|
||||
strlcpy(str, input_drivers[i]->ident, sizeof_str);
|
||||
break;
|
||||
case RARCH_DRIVER_VIDEO:
|
||||
driver = video_drivers[i];
|
||||
if (driver)
|
||||
strlcpy(str, video_drivers[i]->ident, sizeof_str);
|
||||
break;
|
||||
case RARCH_DRIVER_AUDIO:
|
||||
driver = audio_drivers[i];
|
||||
if (driver)
|
||||
strlcpy(str, audio_drivers[i]->ident, sizeof_str);
|
||||
break;
|
||||
else if (!strcmp(label, "input_driver"))
|
||||
{
|
||||
driver = input_drivers[i];
|
||||
if (driver)
|
||||
strlcpy(str, input_drivers[i]->ident, sizeof_str);
|
||||
}
|
||||
else if (!strcmp(label, "video_driver"))
|
||||
{
|
||||
driver = video_drivers[i];
|
||||
if (driver)
|
||||
strlcpy(str, video_drivers[i]->ident, sizeof_str);
|
||||
}
|
||||
else if (!strcmp(label, "audio_driver"))
|
||||
{
|
||||
driver = audio_drivers[i];
|
||||
if (driver)
|
||||
strlcpy(str, audio_drivers[i]->ident, sizeof_str);
|
||||
}
|
||||
|
||||
return driver;
|
||||
}
|
||||
|
||||
static int find_driver_index(unsigned cmd, const char *driver)
|
||||
static int find_driver_index(const char * label, const char *driver)
|
||||
{
|
||||
unsigned i;
|
||||
const void *obj = NULL;
|
||||
|
||||
switch (cmd)
|
||||
char str[PATH_MAX];
|
||||
|
||||
for (i = 0; (obj = (const void*)find_driver_nonempty(label, i, str, sizeof(str))) != NULL; i++)
|
||||
{
|
||||
case RARCH_DRIVER_NONE:
|
||||
break;
|
||||
default:
|
||||
{
|
||||
char str[PATH_MAX];
|
||||
for (i = 0; find_driver_nonempty(cmd, i, str, sizeof(str)) != NULL; i++)
|
||||
{
|
||||
if (str[0] == '\0')
|
||||
break;
|
||||
if (!strcasecmp(driver, str))
|
||||
return i;
|
||||
}
|
||||
}
|
||||
if (!obj)
|
||||
return -1;
|
||||
if (str[0] == '\0')
|
||||
break;
|
||||
if (!strcasecmp(driver, str))
|
||||
return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void find_prev_driver(unsigned cmd, char *str, size_t sizeof_str)
|
||||
void find_prev_driver(const char *label, char *str, size_t sizeof_str)
|
||||
{
|
||||
int i = find_driver_index(cmd, str);
|
||||
int i = find_driver_index(label, str);
|
||||
if (i > 0)
|
||||
find_driver_nonempty(cmd, i - 1, str, sizeof_str);
|
||||
find_driver_nonempty(label, i - 1, str, sizeof_str);
|
||||
else
|
||||
RARCH_WARN("Couldn't find any previous driver (current one: \"%s\").\n", str);
|
||||
}
|
||||
|
||||
void find_next_driver(unsigned cmd, char *str, size_t sizeof_str)
|
||||
void find_next_driver(const char *label, char *str, size_t sizeof_str)
|
||||
{
|
||||
int i = find_driver_index(cmd, str);
|
||||
int i = find_driver_index(label, str);
|
||||
if (i >= 0)
|
||||
find_driver_nonempty(cmd, i + 1, str, sizeof_str);
|
||||
find_driver_nonempty(label, i + 1, str, sizeof_str);
|
||||
else
|
||||
RARCH_WARN("Couldn't find any next driver (current one: \"%s\").\n", str);
|
||||
}
|
||||
|
||||
static void find_osk_driver(void)
|
||||
{
|
||||
int i = find_driver_index(RARCH_DRIVER_OSK, g_settings.osk.driver);
|
||||
int i = find_driver_index("osk_driver", g_settings.osk.driver);
|
||||
if (i >= 0)
|
||||
driver.osk = osk_drivers[i];
|
||||
else
|
||||
@ -386,7 +385,7 @@ void uninit_osk(void)
|
||||
|
||||
static void find_camera_driver(void)
|
||||
{
|
||||
int i = find_driver_index(RARCH_DRIVER_CAMERA, g_settings.camera.driver);
|
||||
int i = find_driver_index("camera_driver", g_settings.camera.driver);
|
||||
if (i >= 0)
|
||||
driver.camera = camera_drivers[i];
|
||||
else
|
||||
@ -474,7 +473,7 @@ void uninit_camera(void)
|
||||
|
||||
static void find_location_driver(void)
|
||||
{
|
||||
int i = find_driver_index(RARCH_DRIVER_LOCATION, g_settings.location.driver);
|
||||
int i = find_driver_index("location_driver", g_settings.location.driver);
|
||||
if (i >= 0)
|
||||
driver.location = location_drivers[i];
|
||||
else
|
||||
@ -569,7 +568,7 @@ void uninit_location(void)
|
||||
|
||||
void find_menu_driver(void)
|
||||
{
|
||||
int i = find_driver_index(RARCH_DRIVER_MENU, g_settings.menu.driver);
|
||||
int i = find_driver_index("menu_driver", g_settings.menu.driver);
|
||||
if (i >= 0)
|
||||
driver.menu_ctx = menu_ctx_drivers[i];
|
||||
else
|
||||
@ -592,7 +591,7 @@ void find_menu_driver(void)
|
||||
|
||||
static void find_audio_driver(void)
|
||||
{
|
||||
int i = find_driver_index(RARCH_DRIVER_AUDIO, g_settings.audio.driver);
|
||||
int i = find_driver_index("audio_driver", g_settings.audio.driver);
|
||||
if (i >= 0)
|
||||
driver.audio = audio_drivers[i];
|
||||
else
|
||||
@ -623,7 +622,7 @@ static void find_video_driver(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
int i = find_driver_index(RARCH_DRIVER_VIDEO, g_settings.video.driver);
|
||||
int i = find_driver_index("video_driver", g_settings.video.driver);
|
||||
if (i >= 0)
|
||||
driver.video = video_drivers[i];
|
||||
else
|
||||
@ -645,7 +644,7 @@ static void find_video_driver(void)
|
||||
|
||||
static void find_input_driver(void)
|
||||
{
|
||||
int i = find_driver_index(RARCH_DRIVER_INPUT, g_settings.input.driver);
|
||||
int i = find_driver_index("input_driver", g_settings.input.driver);
|
||||
if (i >= 0)
|
||||
driver.input = input_drivers[i];
|
||||
else
|
||||
|
16
driver.h
16
driver.h
@ -119,18 +119,6 @@ enum // RetroArch specific bind IDs.
|
||||
RARCH_BIND_LIST_END_NULL
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
RARCH_DRIVER_NONE = 0,
|
||||
RARCH_DRIVER_VIDEO,
|
||||
RARCH_DRIVER_AUDIO,
|
||||
RARCH_DRIVER_INPUT,
|
||||
RARCH_DRIVER_CAMERA,
|
||||
RARCH_DRIVER_OSK,
|
||||
RARCH_DRIVER_LOCATION,
|
||||
RARCH_DRIVER_MENU,
|
||||
};
|
||||
|
||||
struct retro_keybind
|
||||
{
|
||||
bool valid;
|
||||
@ -466,8 +454,8 @@ void uninit_video_input(void);
|
||||
void init_audio(void);
|
||||
void uninit_audio(void);
|
||||
|
||||
void find_prev_driver(unsigned cmd, char *str, size_t sizeof_str);
|
||||
void find_next_driver(unsigned cmd, char *str, size_t sizeof_str);
|
||||
void find_prev_driver(const char *label, char *str, size_t sizeof_str);
|
||||
void find_next_driver(const char *label, char *str, size_t sizeof_str);
|
||||
|
||||
void find_prev_resampler_driver(void);
|
||||
void find_next_resampler_driver(void);
|
||||
|
@ -805,16 +805,16 @@ void menu_common_setting_set_current_string(rarch_setting_t *setting, const char
|
||||
setting->change_handler(setting);
|
||||
}
|
||||
|
||||
static void handle_driver(unsigned id, char *driver, size_t sizeof_driver,
|
||||
static void handle_driver(const char *label, char *driver, size_t sizeof_driver,
|
||||
unsigned action)
|
||||
{
|
||||
switch (action)
|
||||
{
|
||||
case MENU_ACTION_LEFT:
|
||||
find_prev_driver(id, driver, sizeof_driver);
|
||||
find_prev_driver(label, driver, sizeof_driver);
|
||||
break;
|
||||
case MENU_ACTION_RIGHT:
|
||||
find_next_driver(id, driver, sizeof_driver);
|
||||
find_next_driver(label, driver, sizeof_driver);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -867,10 +867,10 @@ static void handle_setting(rarch_setting_t *setting,
|
||||
}
|
||||
#endif
|
||||
if (!strcmp(setting->name, "video_driver"))
|
||||
handle_driver(RARCH_DRIVER_VIDEO, g_settings.video.driver,
|
||||
handle_driver(setting->name, g_settings.video.driver,
|
||||
sizeof(g_settings.video.driver), action);
|
||||
else if (!strcmp(setting->name, "audio_driver"))
|
||||
handle_driver(RARCH_DRIVER_AUDIO, g_settings.audio.driver,
|
||||
handle_driver(setting->name, g_settings.audio.driver,
|
||||
sizeof(g_settings.audio.driver), action);
|
||||
else if (!strcmp(setting->name, "audio_resampler_driver"))
|
||||
{
|
||||
@ -880,16 +880,16 @@ static void handle_setting(rarch_setting_t *setting,
|
||||
find_next_resampler_driver();
|
||||
}
|
||||
else if (!strcmp(setting->name, "input_driver"))
|
||||
handle_driver(RARCH_DRIVER_INPUT, g_settings.input.driver,
|
||||
handle_driver(setting->name, g_settings.input.driver,
|
||||
sizeof(g_settings.input.driver), action);
|
||||
else if (!strcmp(setting->name, "camera_driver"))
|
||||
handle_driver(RARCH_DRIVER_CAMERA, g_settings.camera.driver,
|
||||
handle_driver(setting->name, g_settings.camera.driver,
|
||||
sizeof(g_settings.camera.driver), action);
|
||||
else if (!strcmp(setting->name, "location_driver"))
|
||||
handle_driver(RARCH_DRIVER_LOCATION, g_settings.location.driver,
|
||||
handle_driver(setting->name, g_settings.location.driver,
|
||||
sizeof(g_settings.location.driver), action);
|
||||
else if (!strcmp(setting->name, "menu_driver"))
|
||||
handle_driver(RARCH_DRIVER_MENU, g_settings.menu.driver,
|
||||
handle_driver(setting->name, g_settings.menu.driver,
|
||||
sizeof(g_settings.menu.driver), action);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user