(menu_navigation.c) Cleanup

This commit is contained in:
twinaphex 2017-05-17 02:48:52 +02:00
parent e6f5270c3d
commit 5072de4c0f

View File

@ -38,23 +38,28 @@ void menu_navigation_set_selection(size_t val)
selection_ptr = val; selection_ptr = val;
} }
#define SCROLL_INDEX_SIZE (2 * (26 + 2) + 1)
bool menu_navigation_ctl(enum menu_navigation_ctl_state state, void *data) bool menu_navigation_ctl(enum menu_navigation_ctl_state state, void *data)
{ {
unsigned i;
/* Quick jumping indices with L/R. /* Quick jumping indices with L/R.
* Rebuilt when parsing directory. */ * Rebuilt when parsing directory. */
static struct scroll_indices static size_t scroll_index_list[SCROLL_INDEX_SIZE];
{ static unsigned scroll_index_size = 0;
size_t list[2 * (26 + 2) + 1];
unsigned size;
} scroll_index;
static unsigned scroll_acceleration = 0; static unsigned scroll_acceleration = 0;
switch (state) switch (state)
{ {
case MENU_NAVIGATION_CTL_DEINIT: case MENU_NAVIGATION_CTL_DEINIT:
scroll_acceleration = 0; {
selection_ptr = 0; scroll_acceleration = 0;
memset(&scroll_index, 0, sizeof(struct scroll_indices)); selection_ptr = 0;
scroll_index_size = 0;
for (i = 0; i < SCROLL_INDEX_SIZE; i++)
scroll_index_list[i] = 0;
}
break; break;
case MENU_NAVIGATION_CTL_CLEAR: case MENU_NAVIGATION_CTL_CLEAR:
{ {
@ -150,22 +155,22 @@ bool menu_navigation_ctl(enum menu_navigation_ctl_state state, void *data)
size_t *ptr_out = (size_t*)&selection_ptr; size_t *ptr_out = (size_t*)&selection_ptr;
size_t menu_list_size = menu_entries_get_size(); size_t menu_list_size = menu_entries_get_size();
if (!scroll_index.size || !ptr_out) if (!scroll_index_size || !ptr_out)
return false; return false;
ptr = *ptr_out; ptr = *ptr_out;
if (ptr == scroll_index.list[scroll_index.size - 1]) if (ptr == scroll_index_list[scroll_index_size - 1])
{ {
*ptr_out = menu_list_size - 1; *ptr_out = menu_list_size - 1;
menu_driver_ctl(RARCH_MENU_CTL_NAVIGATION_ASCEND_ALPHABET, ptr_out); menu_driver_ctl(RARCH_MENU_CTL_NAVIGATION_ASCEND_ALPHABET, ptr_out);
return true; return true;
} }
while (i < scroll_index.size - 1 while (i < scroll_index_size - 1
&& scroll_index.list[i + 1] <= ptr) && scroll_index_list[i + 1] <= ptr)
i++; i++;
*ptr_out = scroll_index.list[i + 1]; *ptr_out = scroll_index_list[i + 1];
if (*ptr_out >= menu_list_size) if (*ptr_out >= menu_list_size)
*ptr_out = menu_list_size - 1; *ptr_out = menu_list_size - 1;
@ -178,7 +183,7 @@ bool menu_navigation_ctl(enum menu_navigation_ctl_state state, void *data)
size_t i = 0, ptr; size_t i = 0, ptr;
size_t *ptr_out = (size_t*)&selection_ptr; size_t *ptr_out = (size_t*)&selection_ptr;
if (!scroll_index.size || !ptr_out) if (!scroll_index_size || !ptr_out)
return false; return false;
ptr = *ptr_out; ptr = *ptr_out;
@ -186,25 +191,25 @@ bool menu_navigation_ctl(enum menu_navigation_ctl_state state, void *data)
if (ptr == 0) if (ptr == 0)
return false; return false;
i = scroll_index.size - 1; i = scroll_index_size - 1;
while (i && scroll_index.list[i - 1] >= ptr) while (i && scroll_index_list[i - 1] >= ptr)
i--; i--;
*ptr_out = scroll_index.list[i - 1]; *ptr_out = scroll_index_list[i - 1];
menu_driver_ctl( menu_driver_ctl(
RARCH_MENU_CTL_NAVIGATION_DESCEND_ALPHABET, ptr_out); RARCH_MENU_CTL_NAVIGATION_DESCEND_ALPHABET, ptr_out);
} }
break; break;
case MENU_NAVIGATION_CTL_CLEAR_SCROLL_INDICES: case MENU_NAVIGATION_CTL_CLEAR_SCROLL_INDICES:
scroll_index.size = 0; scroll_index_size = 0;
break; break;
case MENU_NAVIGATION_CTL_ADD_SCROLL_INDEX: case MENU_NAVIGATION_CTL_ADD_SCROLL_INDEX:
{ {
size_t *sel = (size_t*)data; size_t *sel = (size_t*)data;
if (!sel) if (!sel)
return false; return false;
scroll_index.list[scroll_index.size++] = *sel; scroll_index_list[scroll_index_size++] = *sel;
} }
break; break;
case MENU_NAVIGATION_CTL_GET_SCROLL_ACCEL: case MENU_NAVIGATION_CTL_GET_SCROLL_ACCEL: