From 6b8aece1f783d9f6b4e88b38ae59a7eb1fe7456a Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 11 Feb 2015 19:28:06 +0100 Subject: [PATCH] (Menu) Cleanups --- menu/drivers/glui.c | 8 +-- menu/drivers/ios.c | 24 +-------- menu/drivers/rgui.c | 104 ++++++++++++++++++------------------- menu/drivers/rmenu.c | 8 +-- menu/drivers/rmenu_xui.cpp | 8 +-- menu/drivers/xmb.c | 8 +-- menu/menu.c | 6 +-- menu/menu_driver.h | 2 +- 8 files changed, 73 insertions(+), 95 deletions(-) diff --git a/menu/drivers/glui.c b/menu/drivers/glui.c index 8941c614ea..8500e4d202 100644 --- a/menu/drivers/glui.c +++ b/menu/drivers/glui.c @@ -42,14 +42,14 @@ typedef struct glui_handle GLuint bg; } glui_handle_t; -static int glui_entry_iterate(unsigned action) +static int glui_entry_iterate(menu_handle_t *menu, unsigned action) { const char *label = NULL; menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*) - menu_list_get_actiondata_at_offset(driver.menu->menu_list->selection_buf, - driver.menu->selection_ptr); + menu_list_get_actiondata_at_offset(menu->menu_list->selection_buf, + menu->selection_ptr); - menu_list_get_last_stack(driver.menu->menu_list, NULL, &label, NULL); + menu_list_get_last_stack(menu->menu_list, NULL, &label, NULL); if (cbs && cbs->action_iterate) return cbs->action_iterate(label, action); diff --git a/menu/drivers/ios.c b/menu/drivers/ios.c index 8136177512..4f15356e21 100644 --- a/menu/drivers/ios.c +++ b/menu/drivers/ios.c @@ -25,35 +25,15 @@ #include "ios.h" #include "../menu_input.h" -#if 1 -static int ios_entry_iterate(unsigned action) +static int ios_entry_iterate(menu_handle_t *menu, unsigned action) { - ios_handle_t *ios = NULL; - if (!driver.menu) - return 0; + ios_handle_t *ios = (ios_handle_t*)menu->userdata; - ios = (ios_handle_t*)driver.menu->userdata; if (ios->switch_to_ios) ios->switch_to_ios(); return 0; } -#else -static int ios_entry_iterate(unsigned action) -{ - const char *label = NULL; - menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*) - menu_list_get_actiondata_at_offset(driver.menu->menu_list->selection_buf, - driver.menu->selection_ptr); - - menu_list_get_last_stack(driver.menu->menu_list, NULL, &label, NULL); - - if (cbs && cbs->action_iterate) - return cbs->action_iterate(label, action); - - return -1; -} -#endif static void *ios_init(void) { diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index e2d71ccba9..e855604cd1 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -36,18 +36,18 @@ #define RGUI_TERM_WIDTH (((driver.menu->width - RGUI_TERM_START_X - RGUI_TERM_START_X) / (FONT_WIDTH_STRIDE))) #define RGUI_TERM_HEIGHT (((driver.menu->height - RGUI_TERM_START_Y - RGUI_TERM_START_X) / (FONT_HEIGHT_STRIDE)) - 1) -static int rgui_entry_iterate(unsigned action) +static int rgui_entry_iterate(menu_handle_t *menu, unsigned action) { const char *label = NULL; - if (!driver.menu || !driver.menu->menu_list) + if (!menu || !menu->menu_list) return -1; menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*) - menu_list_get_actiondata_at_offset(driver.menu->menu_list->selection_buf, - driver.menu->selection_ptr); + menu_list_get_actiondata_at_offset(menu->menu_list->selection_buf, + menu->selection_ptr); - menu_list_get_last_stack(driver.menu->menu_list, NULL, &label, NULL); + menu_list_get_last_stack(menu->menu_list, NULL, &label, NULL); if (cbs && cbs->action_iterate) return cbs->action_iterate(label, action); @@ -136,17 +136,13 @@ static void color_rect(menu_handle_t *menu, for (j = y; j < y + height; j++) for (i = x; i < x + width; i++) - if (i < driver.menu->width && j < driver.menu->height) + if (i < menu->width && j < menu->height) menu->frame_buf.data[j * (menu->frame_buf.pitch >> 1) + i] = color; } -static void blit_line(int x, int y, const char *message, bool green) +static void blit_line(menu_handle_t *menu, int x, int y, const char *message, bool green) { unsigned i, j; - menu_handle_t *menu = driver.menu; - - if (!menu) - return; while (*message) { @@ -240,8 +236,9 @@ static void rgui_render_messagebox(const char *message) int x, y; unsigned width, glyphs_width, height; struct string_list *list = NULL; + menu_handle_t *menu = driver.menu; - if (!driver.menu || !message || !*message) + if (!menu || !message || !*message) return; list = string_split(message, "\n"); @@ -274,21 +271,21 @@ static void rgui_render_messagebox(const char *message) } height = FONT_HEIGHT_STRIDE * list->size + 6 + 10; - x = (driver.menu->width - width) / 2; - y = (driver.menu->height - height) / 2; + x = (menu->width - width) / 2; + y = (menu->height - height) / 2; - fill_rect(driver.menu, x + 5, y + 5, width - 10, height - 10, gray_filler); - fill_rect(driver.menu, x, y, width - 5, 5, green_filler); - fill_rect(driver.menu, x + width - 5, y, 5, height - 5, green_filler); - fill_rect(driver.menu, x + 5, y + height - 5, width - 5, 5, green_filler); - fill_rect(driver.menu, x, y + 5, 5, height - 5, green_filler); + fill_rect(menu, x + 5, y + 5, width - 10, height - 10, gray_filler); + fill_rect(menu, x, y, width - 5, 5, green_filler); + fill_rect(menu, x + width - 5, y, 5, height - 5, green_filler); + fill_rect(menu, x + 5, y + height - 5, width - 5, 5, green_filler); + fill_rect(menu, x, y + 5, 5, height - 5, green_filler); for (i = 0; i < list->size; i++) { const char *msg = list->elems[i].data; int offset_x = FONT_WIDTH_STRIDE * (glyphs_width - strlen(msg)) / 2; int offset_y = FONT_HEIGHT_STRIDE * i; - blit_line(x + 8 + offset_x, y + 8 + offset_y, msg, false); + blit_line(menu, x + 8 + offset_x, y + 8 + offset_y, msg, false); } end: @@ -314,33 +311,34 @@ static void rgui_render(void) const char *label = NULL; const char *core_name = NULL; const char *core_version = NULL; + menu_handle_t *menu = driver.menu; - if (driver.menu->need_refresh + if (!menu || (menu->need_refresh && g_extern.is_menu - && !driver.menu->msg_force) + && !menu->msg_force)) return; - driver.menu->mouse.ptr = driver.menu->mouse.y / 11 - 2 + driver.menu->begin; + menu->mouse.ptr = menu->mouse.y / 11 - 2 + menu->begin; - if (driver.menu->mouse.wheeldown && driver.menu->begin - < menu_list_get_size(driver.menu->menu_list) - RGUI_TERM_HEIGHT) - driver.menu->begin++; + if (menu->mouse.wheeldown && menu->begin + < menu_list_get_size(menu->menu_list) - RGUI_TERM_HEIGHT) + menu->begin++; - if (driver.menu->mouse.wheelup && driver.menu->begin > 0) - driver.menu->begin--; + if (menu->mouse.wheelup && menu->begin > 0) + menu->begin--; /* Do not scroll if all items are visible. */ - if (menu_list_get_size(driver.menu->menu_list) <= RGUI_TERM_HEIGHT) - driver.menu->begin = 0; + if (menu_list_get_size(menu->menu_list) <= RGUI_TERM_HEIGHT) + menu->begin = 0; - end = (driver.menu->begin + RGUI_TERM_HEIGHT <= - menu_list_get_size(driver.menu->menu_list)) ? - driver.menu->begin + RGUI_TERM_HEIGHT : - menu_list_get_size(driver.menu->menu_list); + end = (menu->begin + RGUI_TERM_HEIGHT <= + menu_list_get_size(menu->menu_list)) ? + menu->begin + RGUI_TERM_HEIGHT : + menu_list_get_size(menu->menu_list); - rgui_render_background(driver.menu); + rgui_render_background(menu); - menu_list_get_last_stack(driver.menu->menu_list, + menu_list_get_last_stack(menu->menu_list, &dir, &label, &menu_type); #if 0 @@ -351,7 +349,7 @@ static void rgui_render(void) menu_animation_ticker_line(title_buf, RGUI_TERM_WIDTH - 3, g_extern.frame_count / RGUI_TERM_START_X, title, true); - blit_line(RGUI_TERM_START_X + RGUI_TERM_START_X, RGUI_TERM_START_X, title_buf, true); + blit_line(menu, RGUI_TERM_START_X + RGUI_TERM_START_X, RGUI_TERM_START_X, title_buf, true); core_name = g_extern.menu.info.library_name; if (!core_name) @@ -369,13 +367,13 @@ static void rgui_render(void) snprintf(title_msg, sizeof(title_msg), "%s - %s %s", PACKAGE_VERSION, core_name, core_version); - blit_line( + blit_line(menu, RGUI_TERM_START_X + RGUI_TERM_START_X, (RGUI_TERM_HEIGHT * FONT_HEIGHT_STRIDE) + RGUI_TERM_START_Y + 2, title_msg, true); if (g_settings.menu.timedate_enable) - blit_line( + blit_line(menu, (RGUI_TERM_WIDTH * FONT_HEIGHT_STRIDE) + (60), (RGUI_TERM_HEIGHT * FONT_HEIGHT_STRIDE) + RGUI_TERM_START_Y + 2, timedate, true); @@ -384,7 +382,7 @@ static void rgui_render(void) x = RGUI_TERM_START_X; y = RGUI_TERM_START_Y; - for (i = driver.menu->begin; i < end; i++, y += FONT_HEIGHT_STRIDE) + for (i = menu->begin; i < end; i++, y += FONT_HEIGHT_STRIDE) { char message[PATH_MAX_LENGTH], type_str[PATH_MAX_LENGTH], entry_title_buf[PATH_MAX_LENGTH], type_str_buf[PATH_MAX_LENGTH], @@ -394,23 +392,23 @@ static void rgui_render(void) bool selected = false; menu_file_list_cbs_t *cbs = NULL; - menu_list_get_at_offset(driver.menu->menu_list->selection_buf, i, &path, + menu_list_get_at_offset(menu->menu_list->selection_buf, i, &path, &entry_label, &type); cbs = (menu_file_list_cbs_t*) - menu_list_get_actiondata_at_offset(driver.menu->menu_list->selection_buf, + menu_list_get_actiondata_at_offset(menu->menu_list->selection_buf, i); if (cbs && cbs->action_get_representation) - cbs->action_get_representation(driver.menu->menu_list->selection_buf, + cbs->action_get_representation(menu->menu_list->selection_buf, &w, type, i, label, type_str, sizeof(type_str), entry_label, path, path_buf, sizeof(path_buf)); - selected = (i == driver.menu->selection_ptr); + selected = (i == menu->selection_ptr); - if (i > (driver.menu->selection_ptr + 100)) + if (i > (menu->selection_ptr + 100)) continue; menu_animation_ticker_line(entry_title_buf, RGUI_TERM_WIDTH - (w + 1 + 2), @@ -426,16 +424,16 @@ static void rgui_render(void) w, type_str_buf); - blit_line(x, y, message, selected); + blit_line(menu, x, y, message, selected); } #ifdef GEKKO const char *message_queue; - if (driver.menu->msg_force) + if (menu->msg_force) { message_queue = msg_queue_pull(g_extern.msg_queue); - driver.menu->msg_force = false; + menu->msg_force = false; } else message_queue = driver.current_msg; @@ -443,18 +441,18 @@ static void rgui_render(void) rgui_render_messagebox(message_queue); #endif - if (driver.menu->keyboard.display) + if (menu->keyboard.display) { char msg[PATH_MAX_LENGTH]; - const char *str = *driver.menu->keyboard.buffer; + const char *str = *menu->keyboard.buffer; if (!str) str = ""; - snprintf(msg, sizeof(msg), "%s\n%s", driver.menu->keyboard.label, str); + snprintf(msg, sizeof(msg), "%s\n%s", menu->keyboard.label, str); rgui_render_messagebox(msg); } - if (driver.menu->mouse.enable) - rgui_blit_cursor(driver.menu); + if (menu->mouse.enable) + rgui_blit_cursor(menu); } static void *rgui_init(void) diff --git a/menu/drivers/rmenu.c b/menu/drivers/rmenu.c index ca15af886c..7bdb2736b6 100644 --- a/menu/drivers/rmenu.c +++ b/menu/drivers/rmenu.c @@ -64,14 +64,14 @@ struct texture_image *menu_texture; static bool render_normal = true; static bool menu_texture_inited =false; -static int rmenu_entry_iterate(unsigned action) +static int rmenu_entry_iterate(menu_handle_t *menu, unsigned action) { const char *label = NULL; menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*) - menu_list_get_actiondata_at_offset(driver.menu->menu_list->selection_buf, - driver.menu->selection_ptr); + menu_list_get_actiondata_at_offset(menu->menu_list->selection_buf, + menu->selection_ptr); - menu_list_get_last_stack(driver.menu->menu_list, NULL, &label, NULL); + menu_list_get_last_stack(menu->menu_list, NULL, &label, NULL); if (cbs && cbs->action_iterate) return cbs->action_iterate(label, action); diff --git a/menu/drivers/rmenu_xui.cpp b/menu/drivers/rmenu_xui.cpp index 78f935788a..60012067d0 100644 --- a/menu/drivers/rmenu_xui.cpp +++ b/menu/drivers/rmenu_xui.cpp @@ -58,14 +58,14 @@ HXUIOBJ root_menu; HXUIOBJ current_menu; static msg_queue_t *xui_msg_queue; -static int rmenu_xui_entry_iterate(unsigned action) +static int rmenu_xui_entry_iterate(menu_handle_t *menu, unsigned action) { const char *label = NULL; menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*) - menu_list_get_actiondata_at_offset(driver.menu->menu_list->selection_buf, - driver.menu->selection_ptr); + menu_list_get_actiondata_at_offset(menu->menu_list->selection_buf, + menu->selection_ptr); - menu_list_get_last_stack(driver.menu->menu_list, NULL, &label, NULL); + menu_list_get_last_stack(menu->menu_list, NULL, &label, NULL); if (cbs && cbs->action_iterate) return cbs->action_iterate(label, action); diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 6162180895..79c09ca4b6 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -161,14 +161,14 @@ static float xmb_item_y(xmb_handle_t *xmb, int i, size_t current) return iy; } -static int xmb_entry_iterate(unsigned action) +static int xmb_entry_iterate(menu_handle_t *menu, unsigned action) { const char *label = NULL; menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*) - menu_list_get_actiondata_at_offset(driver.menu->menu_list->selection_buf, - driver.menu->selection_ptr); + menu_list_get_actiondata_at_offset(menu->menu_list->selection_buf, + menu->selection_ptr); - menu_list_get_last_stack(driver.menu->menu_list, NULL, &label, NULL); + menu_list_get_last_stack(menu->menu_list, NULL, &label, NULL); if (cbs && cbs->action_iterate) return cbs->action_iterate(label, action); diff --git a/menu/menu.c b/menu/menu.c index cf756436bd..9cd25d3b52 100644 --- a/menu/menu.c +++ b/menu/menu.c @@ -131,7 +131,7 @@ bool menu_load_content(void) driver.menu->msg_force = true; if (driver.menu_ctx && driver.menu_ctx->entry_iterate) - driver.menu_ctx->entry_iterate(MENU_ACTION_NOOP); + driver.menu_ctx->entry_iterate(driver.menu, MENU_ACTION_NOOP); draw_frame(); @@ -355,12 +355,12 @@ int menu_iterate(retro_input_t input, int32_t ret = 0; unsigned action = menu_input_frame(input, trigger_input); - if (driver.menu_ctx) + if (driver.menu && driver.menu_ctx) { if (driver.menu_ctx->set_texture) driver.menu_ctx->set_texture(driver.menu); if (driver.menu_ctx->entry_iterate) - ret = driver.menu_ctx->entry_iterate(action); + ret = driver.menu_ctx->entry_iterate(driver.menu, action); } if (g_extern.is_menu) diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 96e5f87378..e17eb913a4 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -204,7 +204,7 @@ typedef struct menu_ctx_driver void (*list_clear)(void *); void (*list_cache)(bool, unsigned); void (*list_set_selection)(void *); - int (*entry_iterate)(unsigned); + int (*entry_iterate)(menu_handle_t *menu, unsigned); const char *ident; } menu_ctx_driver_t;