mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 22:20:21 +00:00
(Menu) Cleanups
This commit is contained in:
parent
bda03a52fe
commit
6d2a936cac
@ -140,9 +140,7 @@ typedef struct menu_ctx_driver_backend
|
||||
unsigned (*shader_manager_get_type)(const struct gfx_shader *);
|
||||
int (*shader_manager_setting_toggle)(unsigned, unsigned);
|
||||
unsigned (*type_is)(unsigned);
|
||||
int (*core_setting_toggle)(unsigned, unsigned);
|
||||
int (*setting_toggle)(unsigned, unsigned, unsigned);
|
||||
int (*setting_set)(unsigned, unsigned);
|
||||
void (*setting_set_label)(char *, size_t, unsigned *, unsigned,unsigned);
|
||||
void (*defer_decision_automatic)(void);
|
||||
void (*defer_decision_manual)(void);
|
||||
|
@ -2625,254 +2625,6 @@ static unsigned menu_common_shader_manager_get_type(const struct gfx_shader *sha
|
||||
return type;
|
||||
}
|
||||
|
||||
|
||||
static int menu_common_shader_manager_setting_toggle(unsigned id, unsigned action)
|
||||
{
|
||||
if (!driver.menu)
|
||||
{
|
||||
RARCH_ERR("Cannot toggle shader setting, menu handle is not initialized.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
rarch_setting_t *current_setting = NULL;
|
||||
rarch_setting_t *setting_data = (rarch_setting_t *)setting_data_get_list();
|
||||
|
||||
unsigned dist_shader = id - MENU_SETTINGS_SHADER_0;
|
||||
unsigned dist_filter = id - MENU_SETTINGS_SHADER_0_FILTER;
|
||||
unsigned dist_scale = id - MENU_SETTINGS_SHADER_0_SCALE;
|
||||
|
||||
if (id == MENU_SETTINGS_SHADER_FILTER)
|
||||
{
|
||||
if ((current_setting = setting_data_find_setting(setting_data, "video_smooth")))
|
||||
menu_common_setting_set_current_boolean(current_setting, action);
|
||||
}
|
||||
else if ((id == MENU_SETTINGS_SHADER_PARAMETERS
|
||||
|| id == MENU_SETTINGS_SHADER_PRESET_PARAMETERS))
|
||||
menu_common_setting_push_current_menu(driver.menu->menu_stack, "",
|
||||
"shader_parameters", id, driver.menu->selection_ptr, action);
|
||||
else if (id >= MENU_SETTINGS_SHADER_PARAMETER_0 && id <= MENU_SETTINGS_SHADER_PARAMETER_LAST)
|
||||
{
|
||||
struct gfx_shader *shader = NULL;
|
||||
struct gfx_shader_parameter *param = NULL;
|
||||
|
||||
if (!(shader = (struct gfx_shader*)driver.menu->parameter_shader))
|
||||
return 0;
|
||||
|
||||
if (!(param = &shader->parameters[id - MENU_SETTINGS_SHADER_PARAMETER_0]))
|
||||
return 0;
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case MENU_ACTION_START:
|
||||
param->current = param->initial;
|
||||
break;
|
||||
|
||||
case MENU_ACTION_LEFT:
|
||||
param->current -= param->step;
|
||||
break;
|
||||
|
||||
case MENU_ACTION_RIGHT:
|
||||
param->current += param->step;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
param->current = min(max(param->minimum, param->current), param->maximum);
|
||||
}
|
||||
else if ((id == MENU_SETTINGS_SHADER_APPLY || id == MENU_SETTINGS_SHADER_PASSES) &&
|
||||
(driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->setting_set))
|
||||
driver.menu_ctx->backend->setting_set(id, action);
|
||||
else if (((dist_shader % 3) == 0 || id == MENU_SETTINGS_SHADER_PRESET))
|
||||
{
|
||||
struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader;
|
||||
struct gfx_shader_pass *pass = NULL;
|
||||
|
||||
dist_shader /= 3;
|
||||
if (shader && id == MENU_SETTINGS_SHADER_PRESET)
|
||||
pass = &shader->pass[dist_shader];
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case MENU_ACTION_OK:
|
||||
menu_common_setting_push_current_menu(driver.menu->menu_stack,
|
||||
g_settings.video.shader_dir, "video_shader_preset",
|
||||
id, driver.menu->selection_ptr, action);
|
||||
break;
|
||||
|
||||
case MENU_ACTION_START:
|
||||
if (pass)
|
||||
*pass->source.path = '\0';
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if ((dist_filter % 3) == 0)
|
||||
{
|
||||
dist_filter /= 3;
|
||||
struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader;
|
||||
struct gfx_shader_pass *pass = (struct gfx_shader_pass*)&shader->pass[dist_filter];
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case MENU_ACTION_START:
|
||||
if (shader && shader->pass)
|
||||
shader->pass[dist_filter].filter = RARCH_FILTER_UNSPEC;
|
||||
break;
|
||||
|
||||
case MENU_ACTION_LEFT:
|
||||
case MENU_ACTION_RIGHT:
|
||||
case MENU_ACTION_OK:
|
||||
{
|
||||
unsigned delta = (action == MENU_ACTION_LEFT) ? 2 : 1;
|
||||
if (pass)
|
||||
pass->filter = ((pass->filter + delta) % 3);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if ((dist_scale % 3) == 0)
|
||||
{
|
||||
dist_scale /= 3;
|
||||
struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader;
|
||||
struct gfx_shader_pass *pass = (struct gfx_shader_pass*)&shader->pass[dist_scale];
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case MENU_ACTION_START:
|
||||
if (shader && shader->pass)
|
||||
{
|
||||
pass->fbo.scale_x = pass->fbo.scale_y = 0;
|
||||
pass->fbo.valid = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_ACTION_LEFT:
|
||||
case MENU_ACTION_RIGHT:
|
||||
case MENU_ACTION_OK:
|
||||
{
|
||||
unsigned current_scale = pass->fbo.scale_x;
|
||||
unsigned delta = action == MENU_ACTION_LEFT ? 5 : 1;
|
||||
current_scale = (current_scale + delta) % 6;
|
||||
|
||||
if (pass)
|
||||
{
|
||||
pass->fbo.valid = current_scale;
|
||||
pass->fbo.scale_x = pass->fbo.scale_y = current_scale;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int menu_common_setting_toggle(unsigned id, unsigned action,
|
||||
unsigned menu_type)
|
||||
{
|
||||
(void)menu_type;
|
||||
|
||||
if ((id >= MENU_SETTINGS_SHADER_FILTER) && (id <= MENU_SETTINGS_SHADER_LAST))
|
||||
{
|
||||
if (driver.menu_ctx && driver.menu_ctx->backend
|
||||
&& driver.menu_ctx->backend->shader_manager_setting_toggle)
|
||||
return driver.menu_ctx->backend->shader_manager_setting_toggle(id, action);
|
||||
return 0;
|
||||
}
|
||||
if ((id >= MENU_SETTINGS_CORE_OPTION_START) &&
|
||||
(driver.menu_ctx && driver.menu_ctx->backend
|
||||
&& driver.menu_ctx->backend->core_setting_toggle)
|
||||
)
|
||||
return driver.menu_ctx->backend->core_setting_toggle(id, action);
|
||||
|
||||
if (driver.menu_ctx && driver.menu_ctx->backend
|
||||
&& driver.menu_ctx->backend->setting_set)
|
||||
return driver.menu_ctx->backend->setting_set(id, action);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int menu_common_core_setting_toggle(unsigned setting, unsigned action)
|
||||
{
|
||||
unsigned index = setting - MENU_SETTINGS_CORE_OPTION_START;
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case MENU_ACTION_LEFT:
|
||||
core_option_prev(g_extern.system.core_options, index);
|
||||
break;
|
||||
|
||||
case MENU_ACTION_RIGHT:
|
||||
case MENU_ACTION_OK:
|
||||
core_option_next(g_extern.system.core_options, index);
|
||||
break;
|
||||
|
||||
case MENU_ACTION_START:
|
||||
core_option_set_default(g_extern.system.core_options, index);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
static unsigned menu_gx_resolutions[GX_RESOLUTIONS_LAST][2] = {
|
||||
{ 512, 192 },
|
||||
{ 598, 200 },
|
||||
{ 640, 200 },
|
||||
{ 384, 224 },
|
||||
{ 448, 224 },
|
||||
{ 480, 224 },
|
||||
{ 512, 224 },
|
||||
{ 576, 224 },
|
||||
{ 608, 224 },
|
||||
{ 640, 224 },
|
||||
{ 340, 232 },
|
||||
{ 512, 232 },
|
||||
{ 512, 236 },
|
||||
{ 336, 240 },
|
||||
{ 352, 240 },
|
||||
{ 384, 240 },
|
||||
{ 512, 240 },
|
||||
{ 530, 240 },
|
||||
{ 640, 240 },
|
||||
{ 512, 384 },
|
||||
{ 598, 400 },
|
||||
{ 640, 400 },
|
||||
{ 384, 448 },
|
||||
{ 448, 448 },
|
||||
{ 480, 448 },
|
||||
{ 512, 448 },
|
||||
{ 576, 448 },
|
||||
{ 608, 448 },
|
||||
{ 640, 448 },
|
||||
{ 340, 464 },
|
||||
{ 512, 464 },
|
||||
{ 512, 472 },
|
||||
{ 352, 480 },
|
||||
{ 384, 480 },
|
||||
{ 512, 480 },
|
||||
{ 530, 480 },
|
||||
{ 608, 480 },
|
||||
{ 640, 480 },
|
||||
};
|
||||
|
||||
static unsigned menu_current_gx_resolution = GX_RESOLUTIONS_640_480;
|
||||
#endif
|
||||
|
||||
static void handle_driver(unsigned id, char *driver, size_t sizeof_driver,
|
||||
unsigned action)
|
||||
{
|
||||
@ -3386,6 +3138,252 @@ static int menu_common_setting_set(unsigned id, unsigned action)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int menu_common_shader_manager_setting_toggle(unsigned id, unsigned action)
|
||||
{
|
||||
if (!driver.menu)
|
||||
{
|
||||
RARCH_ERR("Cannot toggle shader setting, menu handle is not initialized.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
rarch_setting_t *current_setting = NULL;
|
||||
rarch_setting_t *setting_data = (rarch_setting_t *)setting_data_get_list();
|
||||
|
||||
unsigned dist_shader = id - MENU_SETTINGS_SHADER_0;
|
||||
unsigned dist_filter = id - MENU_SETTINGS_SHADER_0_FILTER;
|
||||
unsigned dist_scale = id - MENU_SETTINGS_SHADER_0_SCALE;
|
||||
|
||||
if (id == MENU_SETTINGS_SHADER_FILTER)
|
||||
{
|
||||
if ((current_setting = setting_data_find_setting(setting_data, "video_smooth")))
|
||||
menu_common_setting_set_current_boolean(current_setting, action);
|
||||
}
|
||||
else if ((id == MENU_SETTINGS_SHADER_PARAMETERS
|
||||
|| id == MENU_SETTINGS_SHADER_PRESET_PARAMETERS))
|
||||
menu_common_setting_push_current_menu(driver.menu->menu_stack, "",
|
||||
"shader_parameters", id, driver.menu->selection_ptr, action);
|
||||
else if (id >= MENU_SETTINGS_SHADER_PARAMETER_0 && id <= MENU_SETTINGS_SHADER_PARAMETER_LAST)
|
||||
{
|
||||
struct gfx_shader *shader = NULL;
|
||||
struct gfx_shader_parameter *param = NULL;
|
||||
|
||||
if (!(shader = (struct gfx_shader*)driver.menu->parameter_shader))
|
||||
return 0;
|
||||
|
||||
if (!(param = &shader->parameters[id - MENU_SETTINGS_SHADER_PARAMETER_0]))
|
||||
return 0;
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case MENU_ACTION_START:
|
||||
param->current = param->initial;
|
||||
break;
|
||||
|
||||
case MENU_ACTION_LEFT:
|
||||
param->current -= param->step;
|
||||
break;
|
||||
|
||||
case MENU_ACTION_RIGHT:
|
||||
param->current += param->step;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
param->current = min(max(param->minimum, param->current), param->maximum);
|
||||
}
|
||||
else if ((id == MENU_SETTINGS_SHADER_APPLY || id == MENU_SETTINGS_SHADER_PASSES))
|
||||
menu_common_setting_set(id, action);
|
||||
else if (((dist_shader % 3) == 0 || id == MENU_SETTINGS_SHADER_PRESET))
|
||||
{
|
||||
struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader;
|
||||
struct gfx_shader_pass *pass = NULL;
|
||||
|
||||
dist_shader /= 3;
|
||||
if (shader && id == MENU_SETTINGS_SHADER_PRESET)
|
||||
pass = &shader->pass[dist_shader];
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case MENU_ACTION_OK:
|
||||
menu_common_setting_push_current_menu(driver.menu->menu_stack,
|
||||
g_settings.video.shader_dir, "video_shader_preset",
|
||||
id, driver.menu->selection_ptr, action);
|
||||
break;
|
||||
|
||||
case MENU_ACTION_START:
|
||||
if (pass)
|
||||
*pass->source.path = '\0';
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if ((dist_filter % 3) == 0)
|
||||
{
|
||||
dist_filter /= 3;
|
||||
struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader;
|
||||
struct gfx_shader_pass *pass = (struct gfx_shader_pass*)&shader->pass[dist_filter];
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case MENU_ACTION_START:
|
||||
if (shader && shader->pass)
|
||||
shader->pass[dist_filter].filter = RARCH_FILTER_UNSPEC;
|
||||
break;
|
||||
|
||||
case MENU_ACTION_LEFT:
|
||||
case MENU_ACTION_RIGHT:
|
||||
case MENU_ACTION_OK:
|
||||
{
|
||||
unsigned delta = (action == MENU_ACTION_LEFT) ? 2 : 1;
|
||||
if (pass)
|
||||
pass->filter = ((pass->filter + delta) % 3);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if ((dist_scale % 3) == 0)
|
||||
{
|
||||
dist_scale /= 3;
|
||||
struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader;
|
||||
struct gfx_shader_pass *pass = (struct gfx_shader_pass*)&shader->pass[dist_scale];
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case MENU_ACTION_START:
|
||||
if (shader && shader->pass)
|
||||
{
|
||||
pass->fbo.scale_x = pass->fbo.scale_y = 0;
|
||||
pass->fbo.valid = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_ACTION_LEFT:
|
||||
case MENU_ACTION_RIGHT:
|
||||
case MENU_ACTION_OK:
|
||||
{
|
||||
unsigned current_scale = pass->fbo.scale_x;
|
||||
unsigned delta = action == MENU_ACTION_LEFT ? 5 : 1;
|
||||
current_scale = (current_scale + delta) % 6;
|
||||
|
||||
if (pass)
|
||||
{
|
||||
pass->fbo.valid = current_scale;
|
||||
pass->fbo.scale_x = pass->fbo.scale_y = current_scale;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int menu_common_core_setting_toggle(unsigned setting, unsigned action)
|
||||
{
|
||||
unsigned index = setting - MENU_SETTINGS_CORE_OPTION_START;
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case MENU_ACTION_LEFT:
|
||||
core_option_prev(g_extern.system.core_options, index);
|
||||
break;
|
||||
|
||||
case MENU_ACTION_RIGHT:
|
||||
case MENU_ACTION_OK:
|
||||
core_option_next(g_extern.system.core_options, index);
|
||||
break;
|
||||
|
||||
case MENU_ACTION_START:
|
||||
core_option_set_default(g_extern.system.core_options, index);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int menu_common_setting_toggle(unsigned id, unsigned action,
|
||||
unsigned menu_type)
|
||||
{
|
||||
(void)menu_type;
|
||||
|
||||
if ((id >= MENU_SETTINGS_SHADER_FILTER) && (id <= MENU_SETTINGS_SHADER_LAST))
|
||||
{
|
||||
if (driver.menu_ctx && driver.menu_ctx->backend
|
||||
&& driver.menu_ctx->backend->shader_manager_setting_toggle)
|
||||
return driver.menu_ctx->backend->shader_manager_setting_toggle(id, action);
|
||||
return 0;
|
||||
}
|
||||
if ((id >= MENU_SETTINGS_CORE_OPTION_START))
|
||||
return menu_common_core_setting_toggle(id, action);
|
||||
|
||||
if (driver.menu_ctx && driver.menu_ctx->backend)
|
||||
return menu_common_setting_set(id, action);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#ifdef GEKKO
|
||||
static unsigned menu_gx_resolutions[GX_RESOLUTIONS_LAST][2] = {
|
||||
{ 512, 192 },
|
||||
{ 598, 200 },
|
||||
{ 640, 200 },
|
||||
{ 384, 224 },
|
||||
{ 448, 224 },
|
||||
{ 480, 224 },
|
||||
{ 512, 224 },
|
||||
{ 576, 224 },
|
||||
{ 608, 224 },
|
||||
{ 640, 224 },
|
||||
{ 340, 232 },
|
||||
{ 512, 232 },
|
||||
{ 512, 236 },
|
||||
{ 336, 240 },
|
||||
{ 352, 240 },
|
||||
{ 384, 240 },
|
||||
{ 512, 240 },
|
||||
{ 530, 240 },
|
||||
{ 640, 240 },
|
||||
{ 512, 384 },
|
||||
{ 598, 400 },
|
||||
{ 640, 400 },
|
||||
{ 384, 448 },
|
||||
{ 448, 448 },
|
||||
{ 480, 448 },
|
||||
{ 512, 448 },
|
||||
{ 576, 448 },
|
||||
{ 608, 448 },
|
||||
{ 640, 448 },
|
||||
{ 340, 464 },
|
||||
{ 512, 464 },
|
||||
{ 512, 472 },
|
||||
{ 352, 480 },
|
||||
{ 384, 480 },
|
||||
{ 512, 480 },
|
||||
{ 530, 480 },
|
||||
{ 608, 480 },
|
||||
{ 640, 480 },
|
||||
};
|
||||
|
||||
static unsigned menu_current_gx_resolution = GX_RESOLUTIONS_640_480;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
static void menu_common_setting_set_label_perf(char *type_str, size_t type_str_size, unsigned *w, unsigned type,
|
||||
const struct retro_perf_counter **counters, unsigned offset)
|
||||
{
|
||||
@ -3690,9 +3688,7 @@ const menu_ctx_driver_backend_t menu_ctx_backend_common = {
|
||||
menu_common_shader_manager_get_type,
|
||||
menu_common_shader_manager_setting_toggle,
|
||||
menu_common_type_is,
|
||||
menu_common_core_setting_toggle,
|
||||
menu_common_setting_toggle,
|
||||
menu_common_setting_set,
|
||||
menu_common_setting_set_label,
|
||||
menu_common_defer_decision_automatic,
|
||||
menu_common_defer_decision_manual,
|
||||
|
Loading…
x
Reference in New Issue
Block a user