diff options
| author | Thomas Martitz <kugel@rockbox.org> | 2011-10-07 17:22:49 +0000 |
|---|---|---|
| committer | Thomas Martitz <kugel@rockbox.org> | 2011-10-07 17:22:49 +0000 |
| commit | 0acdc87df4e97a1274a10d97fcbacf5696065cee (patch) | |
| tree | 8bb0cc2d87d6104abf9d7a00129813a12005c2ba | |
| parent | 40529dd0699ef28200380b89e1e758d69fe5fe94 (diff) | |
| download | rockbox-0acdc87df4e97a1274a10d97fcbacf5696065cee.zip rockbox-0acdc87df4e97a1274a10d97fcbacf5696065cee.tar.gz rockbox-0acdc87df4e97a1274a10d97fcbacf5696065cee.tar.bz2 rockbox-0acdc87df4e97a1274a10d97fcbacf5696065cee.tar.xz | |
lists: Detect dirtyness (need to reinit) for each list, instead of once globally.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30721 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | apps/gui/list.c | 15 | ||||
| -rw-r--r-- | apps/gui/list.h | 2 |
2 files changed, 12 insertions, 5 deletions
diff --git a/apps/gui/list.c b/apps/gui/list.c index fbcdcb2..7fe06f9 100644 --- a/apps/gui/list.c +++ b/apps/gui/list.c @@ -58,17 +58,18 @@ static void gui_list_select_at_offset(struct gui_synclist * gui_list, void list_draw(struct screen *display, struct gui_synclist *list); #ifdef HAVE_LCD_BITMAP -static int list_need_reinit = false; +static long last_dirty_tick; static struct viewport parent[NB_SCREENS]; static void list_force_reinit(void *param) { (void)param; - list_need_reinit = true; + last_dirty_tick = current_tick; } void list_init(void) { + last_dirty_tick = current_tick; add_event(GUI_EVENT_THEME_CHANGED, false, list_force_reinit); } @@ -93,7 +94,7 @@ static void list_init_viewports(struct gui_synclist *list) #endif } } - list_need_reinit = false; + list->dirty_tick = false; } #else static struct viewport parent[NB_SCREENS] = @@ -178,6 +179,7 @@ void gui_synclist_init(struct gui_synclist * gui_list, gui_list->title_icon = Icon_NOICON; gui_list->scheduled_talk_tick = gui_list->last_talked_tick = 0; + gui_list->dirty_tick = current_tick; gui_list->show_selection_marker = true; #ifdef HAVE_LCD_COLOR @@ -227,6 +229,11 @@ int gui_list_get_item_offset(struct gui_synclist * gui_list, } #endif +static bool is_dirty(struct gui_synclist *list) +{ + return TIME_BEFORE(list->dirty_tick, last_dirty_tick); +} + /* * Force a full screen update. */ @@ -234,7 +241,7 @@ void gui_synclist_draw(struct gui_synclist *gui_list) { int i; #ifdef HAVE_LCD_BITMAP - if (list_need_reinit) + if (is_dirty(gui_list)) { list_init_viewports(gui_list); gui_synclist_select_item(gui_list, gui_list->selected_item); diff --git a/apps/gui/list.h b/apps/gui/list.h index d40cfe9..636d36c 100644 --- a/apps/gui/list.h +++ b/apps/gui/list.h @@ -103,7 +103,7 @@ struct gui_synclist #ifdef HAVE_LCD_BITMAP int offset_position[NB_SCREENS]; /* the list's screen scroll placement in pixels */ #endif - long scheduled_talk_tick, last_talked_tick; + long scheduled_talk_tick, last_talked_tick, dirty_tick; list_get_icon *callback_get_item_icon; list_get_name *callback_get_item_name; |