/** * menu_navigation_increment: * * Increment the navigation pointer. **/ void menu_navigation_increment(menu_navigation_t *nav, unsigned scroll_speed) { settings_t *settings = config_get_ptr(); menu_list_t *menu_list = menu_list_get_ptr(); if (!nav) return; if (nav->selection_ptr + scroll_speed < (menu_list_get_size(menu_list))) { menu_navigation_set(nav, nav->selection_ptr + scroll_speed, true); menu_driver_navigation_increment(); } else { if (settings->menu.navigation.wraparound.vertical_enable) menu_navigation_clear(nav, false); else { if ((menu_list_get_size(menu_list) > 0)) { menu_navigation_set_last(nav); menu_driver_navigation_increment(); } } } }
static int action_toggle_scroll(unsigned type, const char *label, unsigned action) { unsigned scroll_speed = 0, fast_scroll_speed = 0; menu_handle_t *menu = menu_driver_resolve(); if (!menu) return -1; scroll_speed = (max(menu->navigation.scroll.acceleration, 2) - 2) / 4 + 1; fast_scroll_speed = 4 + 4 * scroll_speed; switch (action) { case MENU_ACTION_LEFT: if (menu->navigation.selection_ptr > fast_scroll_speed) menu_navigation_set(&menu->navigation, menu->navigation.selection_ptr - fast_scroll_speed, true); else menu_navigation_clear(&menu->navigation, false); break; case MENU_ACTION_RIGHT: if (menu->navigation.selection_ptr + fast_scroll_speed < (menu_list_get_size(menu->menu_list))) menu_navigation_set(&menu->navigation, menu->navigation.selection_ptr + fast_scroll_speed, true); else { if ((menu_list_get_size(menu->menu_list) > 0)) menu_navigation_set_last(&menu->navigation); } break; } return 0; }
static int action_right_scroll(unsigned type, const char *label, bool wraparound) { unsigned scroll_speed = 0, fast_scroll_speed = 0; menu_list_t *menu_list = menu_list_get_ptr(); menu_navigation_t *nav = menu_navigation_get_ptr(); if (!nav || !menu_list) return -1; scroll_speed = (max(nav->scroll.acceleration, 2) - 2) / 4 + 1; fast_scroll_speed = 4 + 4 * scroll_speed; if (nav->selection_ptr + fast_scroll_speed < (menu_list_get_size(menu_list))) menu_navigation_set(nav, nav->selection_ptr + fast_scroll_speed, true); else { if ((menu_list_get_size(menu_list) > 0)) menu_navigation_set_last(nav); } return 0; }