From 711a776f021fc7eaf4ae2751ca5bd8f639fad3c7 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 31 May 2014 19:22:23 +0200 Subject: [PATCH] (Menu) Refactors --- frontend/menu/backend/menu_common_backend.c | 30 +++++++++++---------- frontend/menu/disp/rgui.c | 6 ++--- frontend/menu/disp/rmenu.c | 4 +-- frontend/menu/disp/rmenu_xui.cpp | 9 ++++--- frontend/menu/file_list.c | 17 ++++++++++++ frontend/menu/file_list.h | 3 +++ frontend/menu/menu_common.h | 10 +++---- frontend/menu/menu_navigation.c | 2 +- 8 files changed, 53 insertions(+), 28 deletions(-) diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c index c1dd9dfc24..44d7654f5b 100644 --- a/frontend/menu/backend/menu_common_backend.c +++ b/frontend/menu/backend/menu_common_backend.c @@ -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, "", 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: diff --git a/frontend/menu/disp/rgui.c b/frontend/menu/disp/rgui.c index 31e2f8349a..781fae6ef8 100644 --- a/frontend/menu/disp/rgui.c +++ b/frontend/menu/disp/rgui.c @@ -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) diff --git a/frontend/menu/disp/rmenu.c b/frontend/menu/disp/rmenu.c index 4bbd51ba92..493a105ed9 100644 --- a/frontend/menu/disp/rmenu.c +++ b/frontend/menu/disp/rmenu.c @@ -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) diff --git a/frontend/menu/disp/rmenu_xui.cpp b/frontend/menu/disp/rmenu_xui.cpp index 151d68a988..619cb1a089 100644 --- a/frontend/menu/disp/rmenu_xui.cpp +++ b/frontend/menu/disp/rmenu_xui.cpp @@ -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) diff --git a/frontend/menu/file_list.c b/frontend/menu/file_list.c index 11568ed073..1a9565d97e 100644 --- a/frontend/menu/file_list.c +++ b/frontend/menu/file_list.c @@ -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) diff --git a/frontend/menu/file_list.h b/frontend/menu/file_list.h index d4056d50dd..19518954c1 100644 --- a/frontend/menu/file_list.h +++ b/frontend/menu/file_list.h @@ -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); diff --git a/frontend/menu/menu_common.h b/frontend/menu/menu_common.h index 308b9af7f6..488c4863c4 100644 --- a/frontend/menu/menu_common.h +++ b/frontend/menu/menu_common.h @@ -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; diff --git a/frontend/menu/menu_navigation.c b/frontend/menu/menu_navigation.c index b3238c6baa..c521f33b5d 100644 --- a/frontend/menu/menu_navigation.c +++ b/frontend/menu/menu_navigation.c @@ -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);