(Menu) Refactors
This commit is contained in:
parent
aaab33c014
commit
711a776f02
|
@ -1254,18 +1254,18 @@ static int menu_settings_iterate(unsigned action)
|
|||
if (rgui->selection_ptr > 0)
|
||||
menu_decrement_navigation(rgui);
|
||||
else
|
||||
menu_set_navigation(rgui, rgui->selection_buf->size - 1);
|
||||
menu_set_navigation(rgui, file_list_get_size(rgui->selection_buf) - 1);
|
||||
break;
|
||||
|
||||
case RGUI_ACTION_DOWN:
|
||||
if (rgui->selection_ptr + 1 < rgui->selection_buf->size)
|
||||
if (rgui->selection_ptr + 1 < file_list_get_size(rgui->selection_buf))
|
||||
menu_increment_navigation(rgui);
|
||||
else
|
||||
menu_clear_navigation(rgui);
|
||||
break;
|
||||
|
||||
case RGUI_ACTION_CANCEL:
|
||||
if (rgui->menu_stack->size > 1)
|
||||
if (file_list_get_size(rgui->menu_stack) > 1)
|
||||
{
|
||||
file_list_pop(rgui->menu_stack, &rgui->selection_ptr);
|
||||
rgui->need_refresh = true;
|
||||
|
@ -1728,7 +1728,8 @@ static void menu_parse_and_resolve(unsigned menu_type)
|
|||
if (menu_common_type_is(menu_type) == RGUI_FILE_DIRECTORY)
|
||||
file_list_push(rgui->selection_buf, "<Use this directory>", RGUI_FILE_USE_DIRECTORY, 0);
|
||||
|
||||
for (i = 0; i < list->size; i++)
|
||||
list_size = list->size;
|
||||
for (i = 0; i < list_size; i++)
|
||||
{
|
||||
bool is_dir = list->elems[i].attr.b;
|
||||
|
||||
|
@ -1765,7 +1766,7 @@ static void menu_parse_and_resolve(unsigned menu_type)
|
|||
dir = NULL;
|
||||
list = (file_list_t*)rgui->selection_buf;
|
||||
file_list_get_last(rgui->menu_stack, &dir, &menu_type);
|
||||
list_size = list->size;
|
||||
list_size = file_list_get_size(list);
|
||||
for (i = 0; i < list_size; i++)
|
||||
{
|
||||
const char *path;
|
||||
|
@ -1804,9 +1805,9 @@ static void menu_parse_and_resolve(unsigned menu_type)
|
|||
|
||||
// Before a refresh, we could have deleted a file on disk, causing
|
||||
// selection_ptr to suddendly be out of range. Ensure it doesn't overflow.
|
||||
if (rgui->selection_ptr >= rgui->selection_buf->size && rgui->selection_buf->size)
|
||||
menu_set_navigation(rgui, rgui->selection_buf->size - 1);
|
||||
else if (!rgui->selection_buf->size)
|
||||
if (rgui->selection_ptr >= file_list_get_size(rgui->selection_buf) && file_list_get_size(rgui->selection_buf))
|
||||
menu_set_navigation(rgui, file_list_get_size(rgui->selection_buf) - 1);
|
||||
else if (!file_list_get_size(rgui->selection_buf))
|
||||
menu_clear_navigation(rgui);
|
||||
}
|
||||
|
||||
|
@ -1972,11 +1973,11 @@ static int menu_common_iterate(unsigned action)
|
|||
if (rgui->selection_ptr >= scroll_speed)
|
||||
menu_set_navigation(rgui, rgui->selection_ptr - scroll_speed);
|
||||
else
|
||||
menu_set_navigation(rgui, rgui->selection_buf->size - 1);
|
||||
menu_set_navigation(rgui, file_list_get_size(rgui->selection_buf) - 1);
|
||||
break;
|
||||
|
||||
case RGUI_ACTION_DOWN:
|
||||
if (rgui->selection_ptr + scroll_speed < rgui->selection_buf->size)
|
||||
if (rgui->selection_ptr + scroll_speed < file_list_get_size(rgui->selection_buf))
|
||||
menu_set_navigation(rgui, rgui->selection_ptr + scroll_speed);
|
||||
else
|
||||
menu_clear_navigation(rgui);
|
||||
|
@ -1990,7 +1991,7 @@ static int menu_common_iterate(unsigned action)
|
|||
break;
|
||||
|
||||
case RGUI_ACTION_RIGHT:
|
||||
if (rgui->selection_ptr + fast_scroll_speed < rgui->selection_buf->size)
|
||||
if (rgui->selection_ptr + fast_scroll_speed < file_list_get_size(rgui->selection_buf))
|
||||
menu_set_navigation(rgui, rgui->selection_ptr + fast_scroll_speed);
|
||||
else
|
||||
menu_set_navigation_last(rgui);
|
||||
|
@ -2004,7 +2005,7 @@ static int menu_common_iterate(unsigned action)
|
|||
break;
|
||||
|
||||
case RGUI_ACTION_CANCEL:
|
||||
if (rgui->menu_stack->size > 1)
|
||||
if (file_list_get_size(rgui->menu_stack) > 1)
|
||||
{
|
||||
file_list_pop(rgui->menu_stack, &rgui->selection_ptr);
|
||||
rgui->need_refresh = true;
|
||||
|
@ -2013,7 +2014,7 @@ static int menu_common_iterate(unsigned action)
|
|||
|
||||
case RGUI_ACTION_OK:
|
||||
{
|
||||
if (rgui->selection_buf->size == 0)
|
||||
if (file_list_get_size(rgui->selection_buf) == 0)
|
||||
return 0;
|
||||
|
||||
const char *path = 0;
|
||||
|
@ -2697,7 +2698,8 @@ static int menu_common_shader_manager_setting_toggle(unsigned setting, unsigned
|
|||
if (!rgui->parameter_shader)
|
||||
return 0;
|
||||
|
||||
struct gfx_shader_parameter *param = &rgui->parameter_shader->parameters[setting - RGUI_SETTINGS_SHADER_PARAMETER_0];
|
||||
struct gfx_shader *shader = (struct gfx_shader*)&rgui->parameter_shader;
|
||||
struct gfx_shader_parameter *param = (struct gfx_shader_parameter*)&shader->parameters[setting - RGUI_SETTINGS_SHADER_PARAMETER_0];
|
||||
switch (action)
|
||||
{
|
||||
case RGUI_ACTION_START:
|
||||
|
|
|
@ -277,11 +277,11 @@ static void rgui_render(void)
|
|||
return;
|
||||
|
||||
begin = (rgui->selection_ptr >= RGUI_TERM_HEIGHT / 2) ? rgui->selection_ptr - RGUI_TERM_HEIGHT / 2 : 0;
|
||||
end = (rgui->selection_ptr + RGUI_TERM_HEIGHT <= rgui->selection_buf->size) ?
|
||||
rgui->selection_ptr + RGUI_TERM_HEIGHT : rgui->selection_buf->size;
|
||||
end = (rgui->selection_ptr + RGUI_TERM_HEIGHT <= file_list_get_size(rgui->selection_buf)) ?
|
||||
rgui->selection_ptr + RGUI_TERM_HEIGHT : file_list_get_size(rgui->selection_buf);
|
||||
|
||||
// Do not scroll if all items are visible.
|
||||
if (rgui->selection_buf->size <= RGUI_TERM_HEIGHT)
|
||||
if (file_list_get_size(rgui->selection_buf) <= RGUI_TERM_HEIGHT)
|
||||
begin = 0;
|
||||
|
||||
if (end - begin > RGUI_TERM_HEIGHT)
|
||||
|
|
|
@ -138,9 +138,9 @@ static void rmenu_render(void)
|
|||
return;
|
||||
|
||||
begin = (rgui->selection_ptr >= (ENTRIES_HEIGHT / 2)) ? (rgui->selection_ptr - (ENTRIES_HEIGHT / 2)) : 0;
|
||||
end = ((rgui->selection_ptr + ENTRIES_HEIGHT) <= rgui->selection_buf->size) ? rgui->selection_ptr + ENTRIES_HEIGHT : rgui->selection_buf->size;
|
||||
end = ((rgui->selection_ptr + ENTRIES_HEIGHT) <= file_list_get_size(rgui->selection_buf)) ? rgui->selection_ptr + ENTRIES_HEIGHT : file_list_get_size(rgui->selection_buf);
|
||||
|
||||
if (rgui->selection_buf->size <= ENTRIES_HEIGHT)
|
||||
if (file_list_get_size(rgui->selection_buf) <= ENTRIES_HEIGHT)
|
||||
begin = 0;
|
||||
|
||||
if (end - begin > ENTRIES_HEIGHT)
|
||||
|
|
|
@ -261,7 +261,7 @@ static void xui_render_message(const char *msg)
|
|||
j = 0;
|
||||
for (i = 0; i < list->size; i++, j++)
|
||||
{
|
||||
char *msg = list->elems[i].data;
|
||||
char *msg = (char*)list->elems[i].data;
|
||||
unsigned msglen = strlen(msg);
|
||||
#if 0
|
||||
if (msglen > RMENU_TERM_WIDTH)
|
||||
|
@ -388,7 +388,7 @@ static void rmenu_xui_render(void)
|
|||
return;
|
||||
|
||||
begin = rgui->selection_ptr;
|
||||
end = rgui->selection_buf->size;
|
||||
end = file_list_get_size(rgui->selection_buf);
|
||||
|
||||
rmenu_xui_render_background();
|
||||
|
||||
|
@ -710,7 +710,10 @@ static void rmenu_xui_list_clear(void *data)
|
|||
static void rmenu_xui_list_set_selection(void *data)
|
||||
{
|
||||
file_list_t *list = (file_list_t*)data;
|
||||
XuiListSetCurSel(m_menulist, list->list[list->size].directory_ptr);
|
||||
if (!list)
|
||||
return;
|
||||
|
||||
XuiListSetCurSel(m_menulist, file_list_get_directory_ptr(list));
|
||||
}
|
||||
|
||||
static void rmenu_xui_init_core_info(void *data)
|
||||
|
|
|
@ -53,6 +53,23 @@ void file_list_push(file_list_t *list,
|
|||
|
||||
}
|
||||
|
||||
size_t file_list_get_size(const file_list_t *list)
|
||||
{
|
||||
if (!list)
|
||||
return 0;
|
||||
|
||||
return list->size;
|
||||
}
|
||||
|
||||
size_t file_list_get_directory_ptr(const file_list_t *list)
|
||||
{
|
||||
size_t size;
|
||||
if (!list)
|
||||
return 0;
|
||||
size = file_list_get_size(list);
|
||||
return list->list[size].directory_ptr;
|
||||
}
|
||||
|
||||
void file_list_pop(file_list_t *list, size_t *directory_ptr)
|
||||
{
|
||||
if (!list)
|
||||
|
|
|
@ -42,6 +42,9 @@ void file_list_clear(file_list_t *list);
|
|||
void file_list_get_last(const file_list_t *list,
|
||||
const char **path, unsigned *type);
|
||||
|
||||
size_t file_list_get_size(const file_list_t *list);
|
||||
size_t file_list_get_directory_ptr(const file_list_t *list);
|
||||
|
||||
void file_list_get_at_offset(const file_list_t *list, size_t index,
|
||||
const char **path, unsigned *type);
|
||||
|
||||
|
|
|
@ -138,15 +138,15 @@ typedef struct
|
|||
size_t frame_buf_pitch;
|
||||
bool frame_buf_show;
|
||||
|
||||
file_list_t *menu_stack;
|
||||
file_list_t *selection_buf;
|
||||
void *menu_stack;
|
||||
void *selection_buf;
|
||||
size_t selection_ptr;
|
||||
unsigned info_selection;
|
||||
bool need_refresh;
|
||||
bool msg_force;
|
||||
bool push_start_screen;
|
||||
|
||||
core_info_list_t *core_info;
|
||||
void *core_info;
|
||||
core_info_t core_info_current;
|
||||
bool defer_core;
|
||||
char deferred_path[PATH_MAX];
|
||||
|
@ -168,11 +168,11 @@ typedef struct
|
|||
|
||||
#ifdef HAVE_SHADER_MANAGER
|
||||
struct gfx_shader shader;
|
||||
struct gfx_shader *parameter_shader; // Points to either shader or graphics driver current shader.
|
||||
void *parameter_shader; // Points to either shader or graphics driver current shader.
|
||||
#endif
|
||||
unsigned current_pad;
|
||||
|
||||
rom_history_t *history;
|
||||
void *history;
|
||||
retro_time_t last_time; // Used to throttle RGUI in case VSync is broken.
|
||||
|
||||
struct rgui_bind_state binds;
|
||||
|
|
|
@ -62,7 +62,7 @@ void menu_set_navigation(void *data, size_t i)
|
|||
void menu_set_navigation_last(void *data)
|
||||
{
|
||||
rgui_handle_t *rgui = (rgui_handle_t*)data;
|
||||
rgui->selection_ptr = rgui->selection_buf->size - 1;
|
||||
rgui->selection_ptr = file_list_get_size(rgui->selection_buf) - 1;
|
||||
|
||||
if (driver.menu_ctx && driver.menu_ctx->navigation_set_last)
|
||||
driver.menu_ctx->navigation_set_last(rgui);
|
||||
|
|
Loading…
Reference in New Issue