Get rid of menu_entries_set_start and menu_entries_get_start

This commit is contained in:
twinaphex 2015-12-12 14:39:35 +01:00
parent 75c6276ade
commit 3df4101321
6 changed files with 106 additions and 56 deletions

View File

@ -402,6 +402,7 @@ end:
static void mui_render(void *data) static void mui_render(void *data)
{ {
size_t i = 0;
float delta_time, dt; float delta_time, dt;
unsigned bottom, width, height, header_height; unsigned bottom, width, height, header_height;
mui_handle_t *mui = (mui_handle_t*)data; mui_handle_t *mui = (mui_handle_t*)data;
@ -461,10 +462,11 @@ static void mui_render(void *data)
< height - header_height - mui->tabs_height) < height - header_height - mui->tabs_height)
mui->scroll_y = 0; mui->scroll_y = 0;
if (menu_entries_get_end() < height / mui->line_height) if (menu_entries_get_end() < height / mui->line_height) { }
menu_entries_set_start(0);
else else
menu_entries_set_start(mui->scroll_y / mui->line_height); i = mui->scroll_y / mui->line_height;
menu_entries_ctl(MENU_ENTRIES_CTL_SET_START, &i);
} }
static void mui_render_label_value(mui_handle_t *mui, static void mui_render_label_value(mui_handle_t *mui,
@ -582,7 +584,9 @@ static void mui_render_menu_list(mui_handle_t *mui,
mui->list_block.carr.coords.vertices = 0; mui->list_block.carr.coords.vertices = 0;
for (i = menu_entries_get_start(); i < end; i++) menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &i);
for (; i < end; i++)
{ {
int y; int y;
size_t selection; size_t selection;
@ -1078,11 +1082,12 @@ static void mui_list_set_selection(void *data, file_list_t *list)
static void mui_navigation_clear(void *data, bool pending_push) static void mui_navigation_clear(void *data, bool pending_push)
{ {
size_t i = 0;
mui_handle_t *mui = (mui_handle_t*)data; mui_handle_t *mui = (mui_handle_t*)data;
if (!mui) if (!mui)
return; return;
menu_entries_set_start(0); menu_entries_ctl(MENU_ENTRIES_CTL_SET_START, &i);
mui->scroll_y = 0; mui->scroll_y = 0;
} }

View File

@ -411,7 +411,7 @@ static void rgui_render(void *data)
unsigned x, y; unsigned x, y;
bool display_kb, msg_force; bool display_kb, msg_force;
uint16_t hover_color, normal_color; uint16_t hover_color, normal_color;
size_t i, end, fb_pitch; size_t i, end, fb_pitch, old_start;
unsigned fb_width, fb_height; unsigned fb_width, fb_height;
int bottom; int bottom;
uint64_t *frame_count; uint64_t *frame_count;
@ -469,17 +469,26 @@ static void rgui_render(void *data)
if (settings->menu.pointer.enable) if (settings->menu.pointer.enable)
{ {
bool pointer_dragged = false; bool pointer_dragged = false;
unsigned new_val = menu_input_pointer_state(MENU_POINTER_Y_AXIS) unsigned new_val;
/ 11 - 2 + menu_entries_get_start();
menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &old_start);
new_val = menu_input_pointer_state(MENU_POINTER_Y_AXIS)
/ 11 - 2 + old_start;
menu_input_ctl(MENU_INPUT_CTL_POINTER_PTR, &new_val); menu_input_ctl(MENU_INPUT_CTL_POINTER_PTR, &new_val);
menu_input_ctl(MENU_INPUT_CTL_POINTER_DRAGGING, &pointer_dragged); menu_input_ctl(MENU_INPUT_CTL_POINTER_DRAGGING, &pointer_dragged);
if (pointer_dragged) if (pointer_dragged)
{ {
size_t start;
int16_t delta_y = menu_input_pointer_state(MENU_POINTER_DELTA_Y_AXIS); int16_t delta_y = menu_input_pointer_state(MENU_POINTER_DELTA_Y_AXIS);
rgui->scroll_y += delta_y; rgui->scroll_y += delta_y;
menu_entries_set_start(-rgui->scroll_y / 11 + 2);
start = -rgui->scroll_y / 11 + 2;
menu_entries_ctl(MENU_ENTRIES_CTL_SET_START, &start);
if (rgui->scroll_y > 0) if (rgui->scroll_y > 0)
rgui->scroll_y = 0; rgui->scroll_y = 0;
} }
@ -490,21 +499,30 @@ static void rgui_render(void *data)
unsigned new_mouse_ptr; unsigned new_mouse_ptr;
int16_t mouse_y = menu_input_mouse_state(MENU_MOUSE_Y_AXIS); int16_t mouse_y = menu_input_mouse_state(MENU_MOUSE_Y_AXIS);
new_mouse_ptr = mouse_y / 11 - 2 + menu_entries_get_start(); menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &old_start);
new_mouse_ptr = mouse_y / 11 - 2 + old_start;
menu_input_ctl(MENU_INPUT_CTL_MOUSE_PTR, &new_mouse_ptr); menu_input_ctl(MENU_INPUT_CTL_MOUSE_PTR, &new_mouse_ptr);
} }
/* Do not scroll if all items are visible. */ /* Do not scroll if all items are visible. */
if (menu_entries_get_end() <= RGUI_TERM_HEIGHT(fb_width, fb_height)) if (menu_entries_get_end() <= RGUI_TERM_HEIGHT(fb_width, fb_height))
menu_entries_set_start(0);; {
size_t start = 0;
menu_entries_ctl(MENU_ENTRIES_CTL_SET_START, &start);
}
bottom = menu_entries_get_end() - RGUI_TERM_HEIGHT(fb_width, fb_height); bottom = menu_entries_get_end() - RGUI_TERM_HEIGHT(fb_width, fb_height);
if (menu_entries_get_start() > (unsigned)bottom) menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &old_start);
menu_entries_set_start(bottom);
end = ((menu_entries_get_start() + RGUI_TERM_HEIGHT(fb_width, fb_height)) <= (menu_entries_get_end())) ? if (old_start > (unsigned)bottom)
menu_entries_get_start() + RGUI_TERM_HEIGHT(fb_width, fb_height) : menu_entries_get_end(); menu_entries_ctl(MENU_ENTRIES_CTL_SET_START, &bottom);
menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &old_start);
end = ((old_start + RGUI_TERM_HEIGHT(fb_width, fb_height)) <= (menu_entries_get_end())) ?
old_start + RGUI_TERM_HEIGHT(fb_width, fb_height) : menu_entries_get_end();
rgui_render_background(); rgui_render_background();
@ -553,7 +571,8 @@ static void rgui_render(void *data)
x = RGUI_TERM_START_X(fb_width); x = RGUI_TERM_START_X(fb_width);
y = RGUI_TERM_START_Y(fb_height); y = RGUI_TERM_START_Y(fb_height);
i = menu_entries_get_start();
menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &i);
for (; i < end; i++, y += FONT_HEIGHT_STRIDE) for (; i < end; i++, y += FONT_HEIGHT_STRIDE)
{ {
@ -629,7 +648,7 @@ static void rgui_render(void *data)
static void *rgui_init(void **userdata) static void *rgui_init(void **userdata)
{ {
size_t fb_pitch; size_t fb_pitch, start;
unsigned fb_width, fb_height, new_font_height; unsigned fb_width, fb_height, new_font_height;
uint16_t *fb_data = NULL; uint16_t *fb_data = NULL;
rgui_t *rgui = NULL; rgui_t *rgui = NULL;
@ -663,7 +682,8 @@ static void *rgui_init(void **userdata)
menu_display_ctl(MENU_DISPLAY_CTL_SET_HEADER_HEIGHT, &new_font_height); menu_display_ctl(MENU_DISPLAY_CTL_SET_HEADER_HEIGHT, &new_font_height);
menu_display_ctl(MENU_DISPLAY_CTL_SET_FB_PITCH, &fb_pitch); menu_display_ctl(MENU_DISPLAY_CTL_SET_FB_PITCH, &fb_pitch);
menu_entries_set_start(0); start = 0;
menu_entries_ctl(MENU_ENTRIES_CTL_SET_START, &start);
ret = rguidisp_init_font(menu); ret = rguidisp_init_font(menu);
@ -727,18 +747,21 @@ static void rgui_set_texture(void)
static void rgui_navigation_clear(void *data, bool pending_push) static void rgui_navigation_clear(void *data, bool pending_push)
{ {
size_t start;
rgui_t *rgui = (rgui_t*)data; rgui_t *rgui = (rgui_t*)data;
if (!rgui) if (!rgui)
return; return;
menu_entries_set_start(0); start = 0;
menu_entries_ctl(MENU_ENTRIES_CTL_SET_START, &start);
rgui->scroll_y = 0; rgui->scroll_y = 0;
} }
static void rgui_navigation_set(void *data, bool scroll) static void rgui_navigation_set(void *data, bool scroll)
{ {
size_t selection; size_t selection, start;
unsigned fb_width, fb_height; unsigned fb_width, fb_height;
bool do_set_start = false;
size_t end = menu_entries_get_end(); size_t end = menu_entries_get_end();
if (!menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection)) if (!menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection))
return; return;
@ -749,12 +772,24 @@ static void rgui_navigation_set(void *data, bool scroll)
menu_display_ctl(MENU_DISPLAY_CTL_HEIGHT, &fb_height); menu_display_ctl(MENU_DISPLAY_CTL_HEIGHT, &fb_height);
if (selection < RGUI_TERM_HEIGHT(fb_width, fb_height) /2) if (selection < RGUI_TERM_HEIGHT(fb_width, fb_height) /2)
menu_entries_set_start(0); {
start = 0;
do_set_start = true;
}
else if (selection >= (RGUI_TERM_HEIGHT(fb_width, fb_height) /2) else if (selection >= (RGUI_TERM_HEIGHT(fb_width, fb_height) /2)
&& selection < (end - RGUI_TERM_HEIGHT(fb_width, fb_height) /2)) && selection < (end - RGUI_TERM_HEIGHT(fb_width, fb_height) /2))
menu_entries_set_start(selection - RGUI_TERM_HEIGHT(fb_width, fb_height) /2); {
start = selection - RGUI_TERM_HEIGHT(fb_width, fb_height) /2;
do_set_start = true;
}
else if (selection >= (end - RGUI_TERM_HEIGHT(fb_width, fb_height) /2)) else if (selection >= (end - RGUI_TERM_HEIGHT(fb_width, fb_height) /2))
menu_entries_set_start(end - RGUI_TERM_HEIGHT(fb_width, fb_height)); {
start = end - RGUI_TERM_HEIGHT(fb_width, fb_height);
do_set_start = true;
}
if (do_set_start)
menu_entries_ctl(MENU_ENTRIES_CTL_SET_START, &start);
} }
static void rgui_navigation_set_last(void *data) static void rgui_navigation_set_last(void *data)

View File

@ -537,9 +537,10 @@ static void xmb_update_boxart_image(xmb_handle_t *xmb)
static void xmb_selection_pointer_changed(xmb_handle_t *xmb, bool allow_animations) static void xmb_selection_pointer_changed(xmb_handle_t *xmb, bool allow_animations)
{ {
size_t selection; size_t skip;
unsigned i, end, tag, height, skip, depth; unsigned i, end, tag, height, depth;
int threshold = 0; size_t selection, num = 0;
int threshold = 0;
menu_list_t *menu_list = NULL; menu_list_t *menu_list = NULL;
file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0); file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0);
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
@ -558,7 +559,7 @@ static void xmb_selection_pointer_changed(xmb_handle_t *xmb, bool allow_animatio
video_driver_get_size(NULL, &height); video_driver_get_size(NULL, &height);
menu_animation_kill_by_tag(tag); menu_animation_kill_by_tag(tag);
menu_entries_set_start(0); menu_entries_ctl(MENU_ENTRIES_CTL_SET_START, &num);
skip = 0; skip = 0;
for (i = 0; i < end; i++) for (i = 0; i < end; i++)
@ -605,7 +606,7 @@ static void xmb_selection_pointer_changed(xmb_handle_t *xmb, bool allow_animatio
} }
} }
menu_entries_set_start(skip); menu_entries_ctl(MENU_ENTRIES_CTL_SET_START, &skip);
} }
static void xmb_list_open_old(xmb_handle_t *xmb, static void xmb_list_open_old(xmb_handle_t *xmb,
@ -658,6 +659,7 @@ static void xmb_list_open_new(xmb_handle_t *xmb,
file_list_t *list, int dir, size_t current) file_list_t *list, int dir, size_t current)
{ {
unsigned i, height; unsigned i, height;
size_t skip = 0;
int threshold = xmb->icon.size * 10; int threshold = xmb->icon.size * 10;
size_t end = file_list_get_size(list); size_t end = file_list_get_size(list);
@ -709,7 +711,7 @@ static void xmb_list_open_new(xmb_handle_t *xmb,
} }
xmb->old_depth = xmb->depth; xmb->old_depth = xmb->depth;
menu_entries_set_start(0); menu_entries_ctl(MENU_ENTRIES_CTL_SET_START, &skip);
} }
static xmb_node_t *xmb_node_allocate_userdata(xmb_handle_t *xmb, unsigned i) static xmb_node_t *xmb_node_allocate_userdata(xmb_handle_t *xmb, unsigned i)
@ -1281,7 +1283,8 @@ static void xmb_draw_items(xmb_handle_t *xmb,
unsigned width, unsigned height) unsigned width, unsigned height)
{ {
uint64_t *frame_count; uint64_t *frame_count;
unsigned i, ticker_limit; size_t i;
unsigned ticker_limit;
math_matrix_4x4 mymat; math_matrix_4x4 mymat;
xmb_node_t *core_node = NULL; xmb_node_t *core_node = NULL;
size_t end = 0; size_t end = 0;
@ -1299,7 +1302,7 @@ static void xmb_draw_items(xmb_handle_t *xmb,
menu_display_matrix_4x4_rotate_z(&mymat, 0, 1, 1, 1, true); menu_display_matrix_4x4_rotate_z(&mymat, 0, 1, 1, 1, true);
i = menu_entries_get_start(); menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &i);
if (list == xmb->selection_buf_old) if (list == xmb->selection_buf_old)
i = 0; i = 0;
@ -1574,8 +1577,13 @@ static void xmb_render(void *data)
} }
} }
if (menu_entries_get_start() >= end) menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &i);
menu_entries_set_start(0);
if (i >= end)
{
i = 0;
menu_entries_ctl(MENU_ENTRIES_CTL_SET_START, &i);
}
menu_animation_ctl(MENU_ANIMATION_CTL_CLEAR_ACTIVE, NULL); menu_animation_ctl(MENU_ANIMATION_CTL_CLEAR_ACTIVE, NULL);
} }

View File

@ -35,7 +35,6 @@ struct menu_list
struct menu_entries struct menu_entries
{ {
size_t begin;
menu_list_t *menu_list; menu_list_t *menu_list;
rarch_setting_t *list_settings; rarch_setting_t *list_settings;
}; };
@ -353,22 +352,6 @@ void menu_entries_refresh(file_list_t *list)
} }
} }
/* Sets the starting index of the menu entry list. */
void menu_entries_set_start(size_t i)
{
if (menu_entries_data)
menu_entries_data->begin = i;
}
/* Returns the starting index of the menu entry list. */
size_t menu_entries_get_start(void)
{
if (!menu_entries_data)
return 0;
return menu_entries_data->begin;
}
/* Returns the last index (+1) of the menu entry list. */ /* Returns the last index (+1) of the menu entry list. */
size_t menu_entries_get_end(void) size_t menu_entries_get_end(void)
{ {
@ -658,6 +641,7 @@ bool menu_entries_ctl(enum menu_entries_ctl_state state, void *data)
/* Flagged when menu entries need to be refreshed */ /* Flagged when menu entries need to be refreshed */
static bool menu_entries_need_refresh = false; static bool menu_entries_need_refresh = false;
static bool menu_entries_nonblocking_refresh = false; static bool menu_entries_nonblocking_refresh = false;
static size_t menu_entries_begin = 0;
switch (state) switch (state)
{ {
@ -676,6 +660,7 @@ bool menu_entries_ctl(enum menu_entries_ctl_state state, void *data)
menu_entries_need_refresh = NULL; menu_entries_need_refresh = NULL;
menu_entries_nonblocking_refresh = NULL; menu_entries_nonblocking_refresh = NULL;
menu_entries_data = NULL; menu_entries_data = NULL;
menu_entries_begin = 0;
return true; return true;
case MENU_ENTRIES_CTL_NEEDS_REFRESH: case MENU_ENTRIES_CTL_NEEDS_REFRESH:
if (!menu_entries_data || menu_entries_nonblocking_refresh) if (!menu_entries_data || menu_entries_nonblocking_refresh)
@ -721,6 +706,21 @@ bool menu_entries_ctl(enum menu_entries_ctl_state state, void *data)
menu_entries_need_refresh = false; menu_entries_need_refresh = false;
} }
return true; return true;
case MENU_ENTRIES_CTL_SET_START:
{
size_t *idx = (size_t*)data;
if (idx)
menu_entries_begin = *idx;
}
case MENU_ENTRIES_CTL_START_GET:
{
size_t *idx = (size_t*)data;
if (!idx)
return 0;
*idx = menu_entries_begin;
}
return true;
case MENU_ENTRIES_CTL_INIT: case MENU_ENTRIES_CTL_INIT:
return menu_entries_init(); return menu_entries_init();
case MENU_ENTRIES_CTL_SHOW_BACK: case MENU_ENTRIES_CTL_SHOW_BACK:

View File

@ -111,15 +111,15 @@ enum menu_entries_ctl_state
MENU_ENTRIES_CTL_SET_REFRESH, MENU_ENTRIES_CTL_SET_REFRESH,
MENU_ENTRIES_CTL_UNSET_REFRESH, MENU_ENTRIES_CTL_UNSET_REFRESH,
MENU_ENTRIES_CTL_NEEDS_REFRESH, MENU_ENTRIES_CTL_NEEDS_REFRESH,
/* Sets the starting index of the menu entry list. */
MENU_ENTRIES_CTL_SET_START,
/* Returns the starting index of the menu entry list. */
MENU_ENTRIES_CTL_START_GET,
MENU_ENTRIES_CTL_SHOW_BACK MENU_ENTRIES_CTL_SHOW_BACK
}; };
typedef struct menu_list menu_list_t; typedef struct menu_list menu_list_t;
void menu_entries_set_start(size_t i);
size_t menu_entries_get_start(void);
size_t menu_entries_get_end(void); size_t menu_entries_get_end(void);
void menu_entries_get(size_t i, menu_entry_t *entry); void menu_entries_get(size_t i, menu_entry_t *entry);

View File

@ -665,7 +665,9 @@ didSelectRowAtIndexPath:(NSIndexPath *)indexPath
self.title = BOXSTRING(title); self.title = BOXSTRING(title);
end = menu_entries_get_end(); end = menu_entries_get_end();
for (i = menu_entries_get_start(); i < end; i++) menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &i);
for (; i < end; i++)
[everything addObject:[self make_menu_item_for_entry: i]]; [everything addObject:[self make_menu_item_for_entry: i]];
self.sections = [NSMutableArray array]; self.sections = [NSMutableArray array];