(Menu) Refactors

This commit is contained in:
twinaphex 2014-05-31 19:22:23 +02:00
parent aaab33c014
commit 711a776f02
8 changed files with 53 additions and 28 deletions

View File

@ -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:

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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);

View File

@ -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;

View File

@ -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);