mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-14 10:37:38 -04:00
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:
parent
d5a081cbd1
commit
1c5a0497cf
3 changed files with 35 additions and 34 deletions
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue