mirror of
https://github.com/libretro/RetroArch
synced 2025-04-15 14:42:27 +00:00
Combine menu_settings_iterate and menu_common_iterate
This commit is contained in:
parent
659ec610ed
commit
43e3595790
@ -261,97 +261,6 @@ static int mouse_post_iterate(menu_file_list_cbs_t *cbs, unsigned action)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int menu_settings_iterate(unsigned action,
|
|
||||||
menu_file_list_cbs_t *cbs)
|
|
||||||
{
|
|
||||||
const char *path = NULL;
|
|
||||||
const char *label = NULL;
|
|
||||||
unsigned type = 0, scroll_speed = 0;
|
|
||||||
|
|
||||||
menu_list_get_at_offset(driver.menu->menu_list->selection_buf,
|
|
||||||
driver.menu->selection_ptr, &path, &label, &type);
|
|
||||||
|
|
||||||
if (driver.menu->need_refresh && action != MENU_ACTION_MESSAGE)
|
|
||||||
action = MENU_ACTION_REFRESH;
|
|
||||||
|
|
||||||
scroll_speed = (max(driver.menu->scroll_accel, 2) - 2) / 4 + 1;
|
|
||||||
|
|
||||||
switch (action)
|
|
||||||
{
|
|
||||||
case MENU_ACTION_UP:
|
|
||||||
if (driver.menu->selection_ptr >= scroll_speed)
|
|
||||||
menu_navigation_set(driver.menu,
|
|
||||||
driver.menu->selection_ptr - scroll_speed, true);
|
|
||||||
else
|
|
||||||
menu_navigation_set(driver.menu,
|
|
||||||
menu_list_get_size(driver.menu->menu_list) - 1, true);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MENU_ACTION_DOWN:
|
|
||||||
if (driver.menu->selection_ptr + scroll_speed < (menu_list_get_size(driver.menu->menu_list)))
|
|
||||||
menu_navigation_set(driver.menu,
|
|
||||||
driver.menu->selection_ptr + scroll_speed, true);
|
|
||||||
else
|
|
||||||
menu_navigation_clear(driver.menu, false);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MENU_ACTION_CANCEL:
|
|
||||||
apply_deferred_settings();
|
|
||||||
menu_list_pop_stack(driver.menu->menu_list);
|
|
||||||
break;
|
|
||||||
case MENU_ACTION_SELECT:
|
|
||||||
menu_list_push_stack(driver.menu->menu_list, "", "info_screen",
|
|
||||||
0, driver.menu->selection_ptr);
|
|
||||||
break;
|
|
||||||
case MENU_ACTION_OK:
|
|
||||||
if (cbs && cbs->action_ok)
|
|
||||||
return cbs->action_ok(path, label, type, driver.menu->selection_ptr);
|
|
||||||
/* fall-through */
|
|
||||||
case MENU_ACTION_START:
|
|
||||||
if (cbs && cbs->action_start)
|
|
||||||
return cbs->action_start(type, label, action);
|
|
||||||
/* fall-through */
|
|
||||||
case MENU_ACTION_LEFT:
|
|
||||||
case MENU_ACTION_RIGHT:
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
if (cbs && cbs->action_toggle)
|
|
||||||
ret = cbs->action_toggle(type, label, action);
|
|
||||||
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MENU_ACTION_REFRESH:
|
|
||||||
menu_entries_deferred_push(driver.menu->menu_list->selection_buf,
|
|
||||||
driver.menu->menu_list->menu_stack);
|
|
||||||
|
|
||||||
driver.menu->need_refresh = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MENU_ACTION_MESSAGE:
|
|
||||||
driver.menu->msg_force = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (driver.menu_ctx && driver.menu_ctx->render)
|
|
||||||
driver.menu_ctx->render();
|
|
||||||
|
|
||||||
/* Have to defer it so we let settings refresh. */
|
|
||||||
if (driver.menu->push_start_screen)
|
|
||||||
{
|
|
||||||
menu_list_push_stack(driver.menu->menu_list, "", "help", 0, 0);
|
|
||||||
driver.menu->push_start_screen = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return mouse_post_iterate(cbs, action);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int menu_viewport_iterate(unsigned action)
|
static int menu_viewport_iterate(unsigned action)
|
||||||
{
|
{
|
||||||
int stride_x = 1, stride_y = 1;
|
int stride_x = 1, stride_y = 1;
|
||||||
@ -620,8 +529,12 @@ static int menu_common_iterate(unsigned action)
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
unsigned type = 0;
|
unsigned type = 0;
|
||||||
|
unsigned type_offset = 0;
|
||||||
const char *label = NULL;
|
const char *label = NULL;
|
||||||
|
const char *label_offset = NULL;
|
||||||
|
const char *path_offset = NULL;
|
||||||
unsigned scroll_speed = 0, fast_scroll_speed = 0;
|
unsigned scroll_speed = 0, fast_scroll_speed = 0;
|
||||||
|
bool is_category = false;
|
||||||
menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)
|
menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)
|
||||||
menu_list_get_actiondata_at_offset(driver.menu->menu_list->selection_buf,
|
menu_list_get_actiondata_at_offset(driver.menu->menu_list->selection_buf,
|
||||||
driver.menu->selection_ptr);
|
driver.menu->selection_ptr);
|
||||||
@ -633,6 +546,8 @@ static int menu_common_iterate(unsigned action)
|
|||||||
if (driver.video_data && driver.menu_ctx && driver.menu_ctx->set_texture)
|
if (driver.video_data && driver.menu_ctx && driver.menu_ctx->set_texture)
|
||||||
driver.menu_ctx->set_texture(driver.menu);
|
driver.menu_ctx->set_texture(driver.menu);
|
||||||
|
|
||||||
|
is_category = menu_common_type_is(label, type) == MENU_SETTINGS;
|
||||||
|
|
||||||
if (!strcmp(label, "help"))
|
if (!strcmp(label, "help"))
|
||||||
return menu_start_screen_iterate(action);
|
return menu_start_screen_iterate(action);
|
||||||
else if (!strcmp(label, "message"))
|
else if (!strcmp(label, "message"))
|
||||||
@ -641,8 +556,6 @@ static int menu_common_iterate(unsigned action)
|
|||||||
return menu_load_or_open_zip_iterate(action);
|
return menu_load_or_open_zip_iterate(action);
|
||||||
else if (!strcmp(label, "info_screen"))
|
else if (!strcmp(label, "info_screen"))
|
||||||
return menu_info_screen_iterate(action);
|
return menu_info_screen_iterate(action);
|
||||||
else if (menu_common_type_is(label, type) == MENU_SETTINGS)
|
|
||||||
return menu_settings_iterate(action, cbs);
|
|
||||||
else if (
|
else if (
|
||||||
type == MENU_SETTINGS_CUSTOM_VIEWPORT ||
|
type == MENU_SETTINGS_CUSTOM_VIEWPORT ||
|
||||||
!strcmp(label, "custom_viewport_2")
|
!strcmp(label, "custom_viewport_2")
|
||||||
@ -661,6 +574,9 @@ static int menu_common_iterate(unsigned action)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
menu_list_get_at_offset(driver.menu->menu_list->selection_buf,
|
||||||
|
driver.menu->selection_ptr, &path_offset, &label_offset, &type_offset);
|
||||||
|
|
||||||
if (driver.menu->need_refresh && action != MENU_ACTION_MESSAGE)
|
if (driver.menu->need_refresh && action != MENU_ACTION_MESSAGE)
|
||||||
action = MENU_ACTION_REFRESH;
|
action = MENU_ACTION_REFRESH;
|
||||||
|
|
||||||
@ -686,21 +602,6 @@ static int menu_common_iterate(unsigned action)
|
|||||||
menu_navigation_clear(driver.menu, false);
|
menu_navigation_clear(driver.menu, false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MENU_ACTION_LEFT:
|
|
||||||
if (driver.menu->selection_ptr > fast_scroll_speed)
|
|
||||||
menu_navigation_set(driver.menu,
|
|
||||||
driver.menu->selection_ptr - fast_scroll_speed, true);
|
|
||||||
else
|
|
||||||
menu_navigation_clear(driver.menu, false);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MENU_ACTION_RIGHT:
|
|
||||||
if (driver.menu->selection_ptr + fast_scroll_speed < (menu_list_get_size(driver.menu->menu_list)))
|
|
||||||
menu_navigation_set(driver.menu,
|
|
||||||
driver.menu->selection_ptr + fast_scroll_speed, true);
|
|
||||||
else
|
|
||||||
menu_navigation_set_last(driver.menu);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MENU_ACTION_SCROLL_UP:
|
case MENU_ACTION_SCROLL_UP:
|
||||||
menu_navigation_descend_alphabet(driver.menu, &driver.menu->selection_ptr);
|
menu_navigation_descend_alphabet(driver.menu, &driver.menu->selection_ptr);
|
||||||
@ -710,13 +611,72 @@ static int menu_common_iterate(unsigned action)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MENU_ACTION_CANCEL:
|
case MENU_ACTION_CANCEL:
|
||||||
|
apply_deferred_settings();
|
||||||
menu_list_pop_stack(driver.menu->menu_list);
|
menu_list_pop_stack(driver.menu->menu_list);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MENU_ACTION_OK:
|
case MENU_ACTION_OK:
|
||||||
ret = menu_action_ok(cbs);
|
if (is_category)
|
||||||
break;
|
{
|
||||||
|
if (cbs && cbs->action_ok)
|
||||||
|
return cbs->action_ok(path_offset, label_offset, type_offset, driver.menu->selection_ptr);
|
||||||
|
/* fall-through */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = menu_action_ok(cbs);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MENU_ACTION_START:
|
||||||
|
if (is_category)
|
||||||
|
{
|
||||||
|
if (cbs && cbs->action_start)
|
||||||
|
return cbs->action_start(type_offset, label_offset, action);
|
||||||
|
/* fall-through */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
case MENU_ACTION_LEFT:
|
||||||
|
if (is_category)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
if (cbs && cbs->action_toggle)
|
||||||
|
ret = cbs->action_toggle(type_offset, label_offset, action);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (driver.menu->selection_ptr > fast_scroll_speed)
|
||||||
|
menu_navigation_set(driver.menu,
|
||||||
|
driver.menu->selection_ptr - fast_scroll_speed, true);
|
||||||
|
else
|
||||||
|
menu_navigation_clear(driver.menu, false);
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MENU_ACTION_RIGHT:
|
||||||
|
if (is_category)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
if (cbs && cbs->action_toggle)
|
||||||
|
ret = cbs->action_toggle(type_offset, label_offset, action);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (driver.menu->selection_ptr + fast_scroll_speed < (menu_list_get_size(driver.menu->menu_list)))
|
||||||
|
menu_navigation_set(driver.menu,
|
||||||
|
driver.menu->selection_ptr + fast_scroll_speed, true);
|
||||||
|
else
|
||||||
|
menu_navigation_set_last(driver.menu);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case MENU_ACTION_SELECT:
|
case MENU_ACTION_SELECT:
|
||||||
menu_list_push_stack(driver.menu->menu_list, "", "info_screen",
|
menu_list_push_stack(driver.menu->menu_list, "", "info_screen",
|
||||||
0, driver.menu->selection_ptr);
|
0, driver.menu->selection_ptr);
|
||||||
@ -745,6 +705,13 @@ static int menu_common_iterate(unsigned action)
|
|||||||
if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render)
|
if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render)
|
||||||
driver.menu_ctx->render();
|
driver.menu_ctx->render();
|
||||||
|
|
||||||
|
/* Have to defer it so we let settings refresh. */
|
||||||
|
if (driver.menu->push_start_screen)
|
||||||
|
{
|
||||||
|
menu_list_push_stack(driver.menu->menu_list, "", "help", 0, 0);
|
||||||
|
driver.menu->push_start_screen = false;
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user