(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.
* Rebuilt when parsing directory. */
size_t scroll_indices[2 * (26 + 2) + 1];
unsigned scroll_indices_size;
unsigned scroll_accel;
struct
{
struct
{
size_t list[2 * (26 + 2) + 1];
unsigned size;
} indices;
unsigned acceleration;
} scroll;
char default_glslp[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)
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;
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,
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)
return 0;

View File

@ -478,7 +478,8 @@ unsigned menu_input_frame(retro_input_t input, retro_input_t trigger_input)
{
first_held = false;
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;
@ -487,7 +488,7 @@ unsigned menu_input_frame(retro_input_t input, retro_input_t trigger_input)
{
first_held = false;
initial_held = true;
driver.menu->scroll_accel = 0;
driver.menu->scroll.acceleration = 0;
}
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)
return;
driver.menu->scroll_indices_size = 0;
driver.menu->scroll.indices.size = 0;
if (!list->size)
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_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);
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_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;
}
@ -422,7 +422,7 @@ int menu_list_populate_generic(void *data,
if (!menu)
return -1;
driver.menu->scroll_indices_size = 0;
driver.menu->scroll.indices.size = 0;
menu_entries_build_scroll_indices(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 ptr = *ptr_out;
if (!menu->scroll_indices_size)
if (!menu->scroll.indices.size)
return;
if (ptr == 0)
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--;
*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)
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 ptr = *ptr_out;
if (!menu->scroll_indices_size)
if (!menu->scroll.indices.size)
return;
if (ptr == menu->scroll_indices[menu->scroll_indices_size - 1])
if (ptr == menu->scroll.indices.list[menu->scroll.indices.size - 1])
return;
while (i < menu->scroll_indices_size - 1
&& menu->scroll_indices[i + 1] <= ptr)
while (i < menu->scroll.indices.size - 1
&& menu->scroll.indices.list[i + 1] <= ptr)
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)
driver.menu_ctx->navigation_descend_alphabet(menu, ptr_out);