1
0
Fork 0
forked from len0rd/rockbox

gui: Remove list "limit_scroll" member

Get rid of the "limit_scroll" member from lists and make it a
local variable of gui_synclist_do_button().

Bump plugin API version since struct gui_synclist was changed.

Change-Id: Ie3244a85e5a1022a2f6e238a506fdbba67724962
This commit is contained in:
Aidan MacDonald 2022-09-19 13:12:14 +01:00
parent d5a081cbd1
commit 1c5a0497cf
3 changed files with 35 additions and 34 deletions

View file

@ -47,8 +47,6 @@
*/ */
#define FRAMEDROP_TRIGGER 6 #define FRAMEDROP_TRIGGER 6
static void gui_list_select_at_offset(struct gui_synclist * gui_list,
int offset);
void list_draw(struct screen *display, struct gui_synclist *list); void list_draw(struct screen *display, struct gui_synclist *list);
static long last_dirty_tick; static long last_dirty_tick;
@ -178,7 +176,6 @@ void gui_synclist_init(struct gui_synclist * gui_list,
list_init_viewports(gui_list); list_init_viewports(gui_list);
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
list_init_item_height(gui_list, i); list_init_item_height(gui_list, i);
gui_list->limit_scroll = false;
gui_list->data = data; gui_list->data = data;
gui_list->scroll_all = scroll_all; gui_list->scroll_all = scroll_all;
gui_list->selected_size = selected_size; gui_list->selected_size = selected_size;
@ -382,7 +379,7 @@ void gui_synclist_select_item(struct gui_synclist * gui_list, int item_number)
} }
static void gui_list_select_at_offset(struct gui_synclist * gui_list, static void gui_list_select_at_offset(struct gui_synclist * gui_list,
int offset) int offset, bool allow_wrap)
{ {
int new_selection; int new_selection;
if (gui_list->selected_size > 1) if (gui_list->selected_size > 1)
@ -394,15 +391,13 @@ static void gui_list_select_at_offset(struct gui_synclist * gui_list,
if (new_selection >= gui_list->nb_items) if (new_selection >= gui_list->nb_items)
{ {
new_selection = gui_list->limit_scroll ? new_selection = allow_wrap ? 0 : gui_list->nb_items - gui_list->selected_size;
gui_list->nb_items - gui_list->selected_size : 0; edge_beep(gui_list, allow_wrap);
edge_beep(gui_list, !gui_list->limit_scroll);
} }
else if (new_selection < 0) else if (new_selection < 0)
{ {
new_selection = gui_list->limit_scroll ? new_selection = allow_wrap ? gui_list->nb_items - gui_list->selected_size : 0;
0 : gui_list->nb_items - gui_list->selected_size; edge_beep(gui_list, allow_wrap);
edge_beep(gui_list, !gui_list->limit_scroll);
} }
gui_synclist_select_item(gui_list, new_selection); gui_synclist_select_item(gui_list, new_selection);
@ -508,21 +503,25 @@ void gui_synclist_set_sel_color(struct gui_synclist * lists,
#endif #endif
static void gui_synclist_select_next_page(struct gui_synclist * lists, static void gui_synclist_select_next_page(struct gui_synclist * lists,
enum screen_type screen) enum screen_type screen,
bool allow_wrap)
{ {
int nb_lines = list_get_nb_lines(lists, screen); int nb_lines = list_get_nb_lines(lists, screen);
if (lists->selected_size > 1) if (lists->selected_size > 1)
nb_lines = MAX(1, nb_lines/lists->selected_size); nb_lines = MAX(1, nb_lines/lists->selected_size);
gui_list_select_at_offset(lists, nb_lines);
gui_list_select_at_offset(lists, nb_lines, allow_wrap);
} }
static void gui_synclist_select_previous_page(struct gui_synclist * lists, static void gui_synclist_select_previous_page(struct gui_synclist * lists,
enum screen_type screen) enum screen_type screen,
bool allow_wrap)
{ {
int nb_lines = list_get_nb_lines(lists, screen); int nb_lines = list_get_nb_lines(lists, screen);
if (lists->selected_size > 1) if (lists->selected_size > 1)
nb_lines = MAX(1, nb_lines/lists->selected_size); nb_lines = MAX(1, nb_lines/lists->selected_size);
gui_list_select_at_offset(lists, -nb_lines);
gui_list_select_at_offset(lists, -nb_lines, allow_wrap);
} }
/* /*
@ -561,16 +560,22 @@ bool gui_synclist_keyclick_callback(int action, void* data)
{ {
struct gui_synclist *lists = (struct gui_synclist *)data; struct gui_synclist *lists = (struct gui_synclist *)data;
/* block the beep if we are at the end of the list and we are not wrapping. /* Block the beep if we're at the end of the list and we're not wrapping. */
* CAVEAT: mosts lists don't set limit_scroll untill it sees a repeat
* press at the end of the list so this can cause an extra beep.
*/
if (lists->limit_scroll == false)
return true;
if (lists->selected_item == 0) if (lists->selected_item == 0)
return (action != ACTION_STD_PREV && action != ACTION_STD_PREVREPEAT); {
if (action == ACTION_STD_PREVREPEAT)
return false;
if (action == ACTION_STD_PREV && !lists->wraparound)
return false;
}
if (lists->selected_item == lists->nb_items - lists->selected_size) if (lists->selected_item == lists->nb_items - lists->selected_size)
return (action != ACTION_STD_NEXT && action != ACTION_STD_NEXTREPEAT); {
if (action == ACTION_STD_NEXTREPEAT)
return false;
if (action == ACTION_STD_NEXT && !lists->wraparound)
return false;
}
return action != ACTION_NONE; return action != ACTION_NONE;
} }
@ -643,13 +648,12 @@ bool gui_synclist_do_button(struct gui_synclist * lists, int *actionptr)
current_lists = NULL; current_lists = NULL;
/* Prevent list wraparound by repeating actions */ /* Prevent list wraparound by repeating actions */
bool allow_wrap = lists->wraparound;
if (action == ACTION_STD_PREVREPEAT || if (action == ACTION_STD_PREVREPEAT ||
action == ACTION_STD_NEXTREPEAT || action == ACTION_STD_NEXTREPEAT ||
action == ACTION_LISTTREE_PGUP || action == ACTION_LISTTREE_PGUP ||
action == ACTION_LISTTREE_PGDOWN) action == ACTION_LISTTREE_PGDOWN)
lists->limit_scroll = true; allow_wrap = false;
else
lists->limit_scroll = !lists->wraparound;
switch (action) switch (action)
{ {
@ -669,7 +673,7 @@ bool gui_synclist_do_button(struct gui_synclist * lists, int *actionptr)
#endif #endif
case ACTION_STD_PREV: case ACTION_STD_PREV:
case ACTION_STD_PREVREPEAT: case ACTION_STD_PREVREPEAT:
gui_list_select_at_offset(lists, -next_item_modifier); gui_list_select_at_offset(lists, -next_item_modifier, allow_wrap);
#ifndef HAVE_WHEEL_ACCELERATION #ifndef HAVE_WHEEL_ACCELERATION
if (button_queue_count() < FRAMEDROP_TRIGGER) if (button_queue_count() < FRAMEDROP_TRIGGER)
#endif #endif
@ -680,7 +684,7 @@ bool gui_synclist_do_button(struct gui_synclist * lists, int *actionptr)
case ACTION_STD_NEXT: case ACTION_STD_NEXT:
case ACTION_STD_NEXTREPEAT: case ACTION_STD_NEXTREPEAT:
gui_list_select_at_offset(lists, next_item_modifier); gui_list_select_at_offset(lists, next_item_modifier, allow_wrap);
#ifndef HAVE_WHEEL_ACCELERATION #ifndef HAVE_WHEEL_ACCELERATION
if (button_queue_count() < FRAMEDROP_TRIGGER) if (button_queue_count() < FRAMEDROP_TRIGGER)
#endif #endif
@ -731,7 +735,7 @@ bool gui_synclist_do_button(struct gui_synclist * lists, int *actionptr)
SCREEN_REMOTE : SCREEN_REMOTE :
#endif #endif
SCREEN_MAIN; SCREEN_MAIN;
gui_synclist_select_previous_page(lists, screen); gui_synclist_select_previous_page(lists, screen, allow_wrap);
gui_synclist_draw(lists); gui_synclist_draw(lists);
yield(); yield();
*actionptr = ACTION_STD_NEXT; *actionptr = ACTION_STD_NEXT;
@ -746,7 +750,7 @@ bool gui_synclist_do_button(struct gui_synclist * lists, int *actionptr)
SCREEN_REMOTE : SCREEN_REMOTE :
#endif #endif
SCREEN_MAIN; SCREEN_MAIN;
gui_synclist_select_next_page(lists, screen); gui_synclist_select_next_page(lists, screen, allow_wrap);
gui_synclist_draw(lists); gui_synclist_draw(lists);
yield(); yield();
*actionptr = ACTION_STD_PREV; *actionptr = ACTION_STD_PREV;

View file

@ -149,9 +149,6 @@ struct gui_synclist
bool talk_menu; bool talk_menu;
bool wraparound; bool wraparound;
bool scroll_paginated; bool scroll_paginated;
/* defines wether the list should stop when reaching the top/bottom
* or should continue (by going to bottom/top) */
bool limit_scroll;
/* whether the text of the whole items of the list have to be /* whether the text of the whole items of the list have to be
* scrolled or only for the selected item */ * scrolled or only for the selected item */
bool scroll_all; bool scroll_all;

View file

@ -157,12 +157,12 @@ int plugin_open(const char *plugin, const char *parameter);
#define PLUGIN_MAGIC 0x526F634B /* RocK */ #define PLUGIN_MAGIC 0x526F634B /* RocK */
/* increase this every time the api struct changes */ /* increase this every time the api struct changes */
#define PLUGIN_API_VERSION 254 #define PLUGIN_API_VERSION 255
/* update this to latest version if a change to the api struct breaks /* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any backwards compatibility (and please take the opportunity to sort in any
new function which are "waiting" at the end of the function table) */ new function which are "waiting" at the end of the function table) */
#define PLUGIN_MIN_API_VERSION 254 #define PLUGIN_MIN_API_VERSION 255
/* 239 Marks the removal of ARCHOS HWCODEC and CHARCELL */ /* 239 Marks the removal of ARCHOS HWCODEC and CHARCELL */