diff options
author | Thomas Martitz <kugel@rockbox.org> | 2013-12-20 23:34:28 +0100 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2014-01-07 14:13:40 +0100 |
commit | eec89a90ffdd077d687914fe18a9e48028f07fb4 (patch) | |
tree | 9df85c16b973f5cb6dbf081685a14c68ef8f3e72 /apps/gui/list.c | |
parent | 5d6974641b14ef81396e8deebcc65a87c07334e5 (diff) | |
download | rockbox-eec89a90ffdd077d687914fe18a9e48028f07fb4.tar.gz rockbox-eec89a90ffdd077d687914fe18a9e48028f07fb4.zip |
lists: Adapt put_line().
This enables removing large portions of code, simplifiyng the drawing routine.
All of the removed code is functionaltiy now available through put_line().
Change-Id: Ib8e61772134189a8c3c6d22345c0b45e912bea76
Diffstat (limited to 'apps/gui/list.c')
-rw-r--r-- | apps/gui/list.c | 55 |
1 files changed, 29 insertions, 26 deletions
diff --git a/apps/gui/list.c b/apps/gui/list.c index 27032378c3..c393340c57 100644 --- a/apps/gui/list.c +++ b/apps/gui/list.c | |||
@@ -78,25 +78,6 @@ void list_init(void) | |||
78 | add_event(GUI_EVENT_THEME_CHANGED, false, list_force_reinit); | 78 | add_event(GUI_EVENT_THEME_CHANGED, false, list_force_reinit); |
79 | } | 79 | } |
80 | 80 | ||
81 | #ifdef HAVE_TOUCHSCREEN | ||
82 | static int line_height_from_lcd_dpi(const struct viewport *vp) | ||
83 | { | ||
84 | /* the 4/12 factor is designed for reasonable item size on a 160dpi screen */ | ||
85 | return MAX(lcd_get_dpi()*4/12, (int)font_get(vp->font)->height); | ||
86 | } | ||
87 | #endif | ||
88 | |||
89 | static int list_line_height(const struct viewport *vp) | ||
90 | { | ||
91 | #ifdef HAVE_TOUCHSCREEN | ||
92 | if (global_settings.list_line_padding == -1) | ||
93 | return line_height_from_lcd_dpi(vp); | ||
94 | return font_get(vp->font)->height + global_settings.list_line_padding; | ||
95 | #else | ||
96 | return font_get(vp->font)->height; | ||
97 | #endif | ||
98 | } | ||
99 | |||
100 | static void list_init_viewports(struct gui_synclist *list) | 81 | static void list_init_viewports(struct gui_synclist *list) |
101 | { | 82 | { |
102 | bool parent_used = (*list->parent == &parent[SCREEN_MAIN]); | 83 | bool parent_used = (*list->parent == &parent[SCREEN_MAIN]); |
@@ -127,29 +108,50 @@ static struct viewport parent[NB_SCREENS] = | |||
127 | #endif | 108 | #endif |
128 | 109 | ||
129 | #ifdef HAVE_LCD_BITMAP | 110 | #ifdef HAVE_LCD_BITMAP |
111 | static int list_nb_lines(struct gui_synclist *list, enum screen_type screen) | ||
112 | { | ||
113 | struct viewport *vp = list->parent[screen]; | ||
114 | return vp->height / list->line_height[screen]; | ||
115 | } | ||
116 | |||
130 | bool list_display_title(struct gui_synclist *list, enum screen_type screen) | 117 | bool list_display_title(struct gui_synclist *list, enum screen_type screen) |
131 | { | 118 | { |
132 | return list->title != NULL && | 119 | return list->title != NULL && |
133 | !sb_set_title_text(list->title, list->title_icon, screen) && | 120 | !sb_set_title_text(list->title, list->title_icon, screen) && |
134 | viewport_get_nb_lines(list->parent[screen]) > 2; | 121 | list_nb_lines(list, screen) > 2; |
135 | } | 122 | } |
136 | 123 | ||
137 | static int list_get_nb_lines(struct gui_synclist *list, enum screen_type screen) | 124 | int list_get_nb_lines(struct gui_synclist *list, enum screen_type screen) |
138 | { | 125 | { |
139 | struct viewport *vp = list->parent[screen]; | ||
140 | int lines = skinlist_get_line_count(screen, list); | 126 | int lines = skinlist_get_line_count(screen, list); |
141 | if (lines < 0) | 127 | if (lines < 0) |
142 | { | 128 | { |
143 | lines = viewport_get_nb_lines(vp); | 129 | lines = list_nb_lines(list, screen); |
144 | if (list_display_title(list, screen)) | 130 | if (list_display_title(list, screen)) |
145 | lines -= 1; | 131 | lines -= 1; |
146 | } | 132 | } |
147 | return lines; | 133 | return lines; |
148 | } | 134 | } |
135 | |||
136 | void list_init_item_height(struct gui_synclist *list, enum screen_type screen) | ||
137 | { | ||
138 | struct viewport *vp = list->parent[screen]; | ||
139 | #ifdef HAVE_TOUCHSCREEN | ||
140 | /* the 4/12 factor is designed for reasonable item size on a 160dpi screen */ | ||
141 | if (global_settings.list_line_padding == -1) | ||
142 | list->line_height[screen] = MAX(lcd_get_dpi()*4/12, (int)font_get(vp->font)->height); | ||
143 | else | ||
144 | list->line_height[screen] = font_get(vp->font)->height + global_settings.list_line_padding; | ||
145 | #else | ||
146 | list->line_height[screen] = font_get(vp->font)->height; | ||
147 | #endif | ||
148 | } | ||
149 | |||
149 | #else | 150 | #else |
150 | #define list_display_title(l, i) false | 151 | #define list_display_title(l, i) false |
151 | #define list_get_nb_lines(list, screen) \ | 152 | #define list_get_nb_lines(list, screen) \ |
152 | viewport_get_nb_lines((list)->parent[(screen)]); | 153 | viewport_get_nb_lines((list)->parent[(screen)]); |
154 | #define list_init_item_height(l, i) | ||
153 | #endif | 155 | #endif |
154 | 156 | ||
155 | /* | 157 | /* |
@@ -187,6 +189,8 @@ void gui_synclist_init(struct gui_synclist * gui_list, | |||
187 | gui_list->parent[i] = &parent[i]; | 189 | gui_list->parent[i] = &parent[i]; |
188 | } | 190 | } |
189 | list_init_viewports(gui_list); | 191 | list_init_viewports(gui_list); |
192 | FOR_NB_SCREENS(i) | ||
193 | list_init_item_height(gui_list, i); | ||
190 | gui_list->limit_scroll = false; | 194 | gui_list->limit_scroll = false; |
191 | gui_list->data = data; | 195 | gui_list->data = data; |
192 | gui_list->scroll_all = scroll_all; | 196 | gui_list->scroll_all = scroll_all; |
@@ -253,6 +257,8 @@ void gui_synclist_draw(struct gui_synclist *gui_list) | |||
253 | if (list_is_dirty(gui_list)) | 257 | if (list_is_dirty(gui_list)) |
254 | { | 258 | { |
255 | list_init_viewports(gui_list); | 259 | list_init_viewports(gui_list); |
260 | FOR_NB_SCREENS(i) | ||
261 | list_init_item_height(gui_list, i); | ||
256 | gui_synclist_select_item(gui_list, gui_list->selected_item); | 262 | gui_synclist_select_item(gui_list, gui_list->selected_item); |
257 | } | 263 | } |
258 | FOR_NB_SCREENS(i) | 264 | FOR_NB_SCREENS(i) |
@@ -502,9 +508,6 @@ void gui_synclist_set_viewport_defaults(struct viewport *vp, | |||
502 | enum screen_type screen) | 508 | enum screen_type screen) |
503 | { | 509 | { |
504 | viewport_set_defaults(vp, screen); | 510 | viewport_set_defaults(vp, screen); |
505 | #ifdef HAVE_LCD_BITMAP | ||
506 | vp->line_height = list_line_height(vp); | ||
507 | #endif | ||
508 | #ifdef HAVE_BUTTONBAR | 511 | #ifdef HAVE_BUTTONBAR |
509 | if (screens[screen].has_buttonbar) | 512 | if (screens[screen].has_buttonbar) |
510 | vp->height -= BUTTONBAR_HEIGHT; | 513 | vp->height -= BUTTONBAR_HEIGHT; |