(Menu) Put scroll indices into struct

This commit is contained in:
twinaphex 2015-02-11 21:36:07 +01:00
parent b1c775849a
commit eb7a68a182
5 changed files with 28 additions and 21 deletions

View File

@ -99,9 +99,15 @@ typedef struct
/* Quick jumping indices with L/R. /* Quick jumping indices with L/R.
* Rebuilt when parsing directory. */ * Rebuilt when parsing directory. */
size_t scroll_indices[2 * (26 + 2) + 1]; struct
unsigned scroll_indices_size; {
unsigned scroll_accel; struct
{
size_t list[2 * (26 + 2) + 1];
unsigned size;
} indices;
unsigned acceleration;
} scroll;
char default_glslp[PATH_MAX_LENGTH]; char default_glslp[PATH_MAX_LENGTH];
char default_cgp[PATH_MAX_LENGTH]; char default_cgp[PATH_MAX_LENGTH];

View File

@ -2030,7 +2030,7 @@ static int action_toggle_scroll(unsigned type, const char *label,
if (!driver.menu) if (!driver.menu)
return -1; return -1;
scroll_speed = (max(driver.menu->scroll_accel, 2) - 2) / 4 + 1; scroll_speed = (max(driver.menu->scroll.acceleration, 2) - 2) / 4 + 1;
fast_scroll_speed = 4 + 4 * scroll_speed; fast_scroll_speed = 4 + 4 * scroll_speed;
switch (action) switch (action)
@ -3593,7 +3593,7 @@ static int deferred_push_default(void *data, void *userdata,
static int action_bind_up_or_down_generic(unsigned type, const char *label, static int action_bind_up_or_down_generic(unsigned type, const char *label,
unsigned action) unsigned action)
{ {
unsigned scroll_speed = (max(driver.menu->scroll_accel, 2) - 2) / 4 + 1; unsigned scroll_speed = (max(driver.menu->scroll.acceleration, 2) - 2) / 4 + 1;
if (menu_list_get_size(driver.menu->menu_list) <= 0) if (menu_list_get_size(driver.menu->menu_list) <= 0)
return 0; return 0;

View File

@ -478,7 +478,8 @@ unsigned menu_input_frame(retro_input_t input, retro_input_t trigger_input)
{ {
first_held = false; first_held = false;
trigger_input |= input & input_repeat; trigger_input |= input & input_repeat;
driver.menu->scroll_accel = min(driver.menu->scroll_accel + 1, 64); driver.menu->scroll.acceleration =
min(driver.menu->scroll.acceleration + 1, 64);
} }
initial_held = false; initial_held = false;
@ -487,7 +488,7 @@ unsigned menu_input_frame(retro_input_t input, retro_input_t trigger_input)
{ {
first_held = false; first_held = false;
initial_held = true; initial_held = true;
driver.menu->scroll_accel = 0; driver.menu->scroll.acceleration = 0;
} }
driver.menu->mouse.enable = g_settings.menu.mouse_enable; driver.menu->mouse.enable = g_settings.menu.mouse_enable;

View File

@ -98,11 +98,11 @@ static void menu_entries_build_scroll_indices(file_list_t *list)
if (!driver.menu || !list) if (!driver.menu || !list)
return; return;
driver.menu->scroll_indices_size = 0; driver.menu->scroll.indices.size = 0;
if (!list->size) if (!list->size)
return; return;
driver.menu->scroll_indices[driver.menu->scroll_indices_size++] = 0; driver.menu->scroll.indices.list[driver.menu->scroll.indices.size++] = 0;
current = menu_entries_list_get_first_char(list, 0); current = menu_entries_list_get_first_char(list, 0);
current_is_dir = menu_entries_list_elem_is_dir(list, 0); current_is_dir = menu_entries_list_elem_is_dir(list, 0);
@ -113,13 +113,13 @@ static void menu_entries_build_scroll_indices(file_list_t *list)
bool is_dir = menu_entries_list_elem_is_dir(list, i); bool is_dir = menu_entries_list_elem_is_dir(list, i);
if ((current_is_dir && !is_dir) || (first > current)) if ((current_is_dir && !is_dir) || (first > current))
driver.menu->scroll_indices[driver.menu->scroll_indices_size++] = i; driver.menu->scroll.indices.list[driver.menu->scroll.indices.size++] = i;
current = first; current = first;
current_is_dir = is_dir; current_is_dir = is_dir;
} }
driver.menu->scroll_indices[driver.menu->scroll_indices_size++] = driver.menu->scroll.indices.list[driver.menu->scroll.indices.size++] =
list->size - 1; list->size - 1;
} }
@ -422,7 +422,7 @@ int menu_list_populate_generic(void *data,
if (!menu) if (!menu)
return -1; return -1;
driver.menu->scroll_indices_size = 0; driver.menu->scroll.indices.size = 0;
menu_entries_build_scroll_indices(list); menu_entries_build_scroll_indices(list);
menu_entries_refresh(menu, list); menu_entries_refresh(menu, list);

View File

@ -111,17 +111,17 @@ void menu_navigation_descend_alphabet(menu_handle_t *menu, size_t *ptr_out)
size_t i = 0; size_t i = 0;
size_t ptr = *ptr_out; size_t ptr = *ptr_out;
if (!menu->scroll_indices_size) if (!menu->scroll.indices.size)
return; return;
if (ptr == 0) if (ptr == 0)
return; return;
i = menu->scroll_indices_size - 1; i = menu->scroll.indices.size - 1;
while (i && menu->scroll_indices[i - 1] >= ptr) while (i && menu->scroll.indices.list[i - 1] >= ptr)
i--; i--;
*ptr_out = menu->scroll_indices[i - 1]; *ptr_out = menu->scroll.indices.list[i - 1];
if (driver.menu_ctx && driver.menu_ctx->navigation_descend_alphabet) if (driver.menu_ctx && driver.menu_ctx->navigation_descend_alphabet)
driver.menu_ctx->navigation_descend_alphabet(menu, ptr_out); driver.menu_ctx->navigation_descend_alphabet(menu, ptr_out);
@ -143,16 +143,16 @@ void menu_navigation_ascend_alphabet(menu_handle_t *menu, size_t *ptr_out)
size_t i = 0; size_t i = 0;
size_t ptr = *ptr_out; size_t ptr = *ptr_out;
if (!menu->scroll_indices_size) if (!menu->scroll.indices.size)
return; return;
if (ptr == menu->scroll_indices[menu->scroll_indices_size - 1]) if (ptr == menu->scroll.indices.list[menu->scroll.indices.size - 1])
return; return;
while (i < menu->scroll_indices_size - 1 while (i < menu->scroll.indices.size - 1
&& menu->scroll_indices[i + 1] <= ptr) && menu->scroll.indices.list[i + 1] <= ptr)
i++; i++;
*ptr_out = menu->scroll_indices[i + 1]; *ptr_out = menu->scroll.indices.list[i + 1];
if (driver.menu_ctx && driver.menu_ctx->navigation_descend_alphabet) if (driver.menu_ctx && driver.menu_ctx->navigation_descend_alphabet)
driver.menu_ctx->navigation_descend_alphabet(menu, ptr_out); driver.menu_ctx->navigation_descend_alphabet(menu, ptr_out);