summaryrefslogtreecommitdiff
path: root/apps/gui/list.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/gui/list.c')
-rw-r--r--apps/gui/list.c34
1 files changed, 27 insertions, 7 deletions
diff --git a/apps/gui/list.c b/apps/gui/list.c
index 1a90ff9e40..66c3438574 100644
--- a/apps/gui/list.c
+++ b/apps/gui/list.c
@@ -78,6 +78,21 @@ 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
82static 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
88static int list_line_height(const struct viewport *vp)
89{
90 if (global_settings.list_line_padding == -1)
91 return line_height_from_lcd_dpi(vp);
92 return font_get(vp->font)->height + global_settings.list_line_padding;
93}
94#endif
95
81static void list_init_viewports(struct gui_synclist *list) 96static void list_init_viewports(struct gui_synclist *list)
82{ 97{
83 int parent_used; 98 int parent_used;
@@ -90,6 +105,9 @@ static void list_init_viewports(struct gui_synclist *list)
90 { 105 {
91 list->parent[i] = &parent[i]; 106 list->parent[i] = &parent[i];
92 viewport_set_defaults(&parent[i], i); 107 viewport_set_defaults(&parent[i], i);
108#ifdef HAVE_TOUCHSCREEN
109 parent[i].line_height = list_line_height(list->parent[i]);
110#endif
93#ifdef HAVE_BUTTONBAR 111#ifdef HAVE_BUTTONBAR
94 if (screens[i].has_buttonbar) 112 if (screens[i].has_buttonbar)
95 list->parent[i]->height -= BUTTONBAR_HEIGHT; 113 list->parent[i]->height -= BUTTONBAR_HEIGHT;
@@ -124,13 +142,15 @@ bool list_display_title(struct gui_synclist *list, enum screen_type screen)
124 142
125static int list_get_nb_lines(struct gui_synclist *list, enum screen_type screen) 143static int list_get_nb_lines(struct gui_synclist *list, enum screen_type screen)
126{ 144{
127 struct viewport vp = *list->parent[screen]; 145 struct viewport *vp = list->parent[screen];
128 int skin_count = skinlist_get_line_count(screen, list); 146 int lines = skinlist_get_line_count(screen, list);
129 if (skin_count >= 0) 147 if (lines < 0)
130 return skin_count; 148 {
131 if (list_display_title(list, screen)) 149 lines = viewport_get_nb_lines(vp);
132 vp.height -= font_get(list->parent[screen]->font)->height; 150 if (list_display_title(list, screen))
133 return viewport_get_nb_lines(&vp); 151 lines -= 1;
152 }
153 return lines;
134} 154}
135#else 155#else
136#define list_display_title(l, i) false 156#define list_display_title(l, i) false