diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/appevents.h | 1 | ||||
-rw-r--r-- | apps/gui/list.c | 61 | ||||
-rw-r--r-- | apps/gui/list.h | 1 | ||||
-rw-r--r-- | apps/gui/viewport.c | 13 | ||||
-rw-r--r-- | apps/gui/viewport.h | 5 | ||||
-rw-r--r-- | apps/main.c | 3 | ||||
-rw-r--r-- | apps/menus/theme_menu.c | 19 | ||||
-rw-r--r-- | apps/screen_access.c | 9 |
8 files changed, 78 insertions, 34 deletions
diff --git a/apps/appevents.h b/apps/appevents.h index f7e695d4a9..d3f7a2d194 100644 --- a/apps/appevents.h +++ b/apps/appevents.h | |||
@@ -51,6 +51,7 @@ enum { | |||
51 | GUI_EVENT_STATUSBAR_TOGGLE = (EVENT_CLASS_GUI|1), | 51 | GUI_EVENT_STATUSBAR_TOGGLE = (EVENT_CLASS_GUI|1), |
52 | GUI_EVENT_ACTIONUPDATE, | 52 | GUI_EVENT_ACTIONUPDATE, |
53 | GUI_EVENT_REFRESH, | 53 | GUI_EVENT_REFRESH, |
54 | GUI_EVENT_THEME_CHANGED, | ||
54 | }; | 55 | }; |
55 | 56 | ||
56 | #endif | 57 | #endif |
diff --git a/apps/gui/list.c b/apps/gui/list.c index 9b139dd47c..284b83012a 100644 --- a/apps/gui/list.c +++ b/apps/gui/list.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include "misc.h" | 38 | #include "misc.h" |
39 | #include "talk.h" | 39 | #include "talk.h" |
40 | #include "viewport.h" | 40 | #include "viewport.h" |
41 | #include "appevents.h" | ||
41 | 42 | ||
42 | #ifdef HAVE_LCD_CHARCELLS | 43 | #ifdef HAVE_LCD_CHARCELLS |
43 | #define SCROLL_LIMIT 1 | 44 | #define SCROLL_LIMIT 1 |
@@ -61,21 +62,41 @@ static void gui_list_select_at_offset(struct gui_synclist * gui_list, | |||
61 | void list_draw(struct screen *display, struct gui_synclist *list); | 62 | void list_draw(struct screen *display, struct gui_synclist *list); |
62 | 63 | ||
63 | #ifdef HAVE_LCD_BITMAP | 64 | #ifdef HAVE_LCD_BITMAP |
65 | static int list_need_reinit = false; | ||
66 | static struct viewport parent[NB_SCREENS]; | ||
67 | |||
68 | static void list_force_reinit(void *param) | ||
69 | { | ||
70 | (void)param; | ||
71 | list_need_reinit = true; | ||
72 | } | ||
73 | |||
74 | void list_init(void) | ||
75 | { | ||
76 | add_event(GUI_EVENT_THEME_CHANGED, false, list_force_reinit); | ||
77 | } | ||
78 | |||
64 | static void list_init_viewports(struct gui_synclist *list) | 79 | static void list_init_viewports(struct gui_synclist *list) |
65 | { | 80 | { |
66 | struct viewport* vp; | 81 | int i, parent_used; |
67 | int i; | 82 | |
68 | bool parent_used = (*list->parent != NULL); | 83 | if (!list) |
84 | return; | ||
85 | |||
86 | parent_used = (*list->parent != &parent[SCREEN_MAIN]); | ||
87 | |||
69 | if (!parent_used) | 88 | if (!parent_used) |
70 | { | 89 | { |
71 | vp = viewport_get_current_vp(); | ||
72 | FOR_NB_SCREENS(i) | 90 | FOR_NB_SCREENS(i) |
73 | list->parent[i] = &vp[i]; | 91 | { |
74 | } | 92 | list->parent[i] = &parent[i]; |
93 | viewport_set_defaults(&parent[i], i); | ||
75 | #ifdef HAVE_BUTTONBAR | 94 | #ifdef HAVE_BUTTONBAR |
76 | if (list && !parent_used && global_settings.buttonbar) | 95 | if (screens[i].has_buttonbar && !viewport_ui_vp_get_state(i)) |
77 | list->parent[0]->height -= BUTTONBAR_HEIGHT; | 96 | list->parent[i]->height -= BUTTONBAR_HEIGHT; |
78 | #endif | 97 | #endif |
98 | } | ||
99 | } | ||
79 | } | 100 | } |
80 | #else | 101 | #else |
81 | #define list_init_viewports(a) | 102 | #define list_init_viewports(a) |
@@ -135,12 +156,7 @@ void gui_synclist_init(struct gui_synclist * gui_list, | |||
135 | if (list_parent) | 156 | if (list_parent) |
136 | gui_list->parent[i] = &list_parent[i]; | 157 | gui_list->parent[i] = &list_parent[i]; |
137 | else | 158 | else |
138 | gui_list->parent[i] = | 159 | gui_list->parent[i] = &parent[i]; |
139 | #ifdef HAVE_LCD_BITMAP | ||
140 | NULL; | ||
141 | #else | ||
142 | &parent[i]; | ||
143 | #endif | ||
144 | } | 160 | } |
145 | list_init_viewports(gui_list); | 161 | list_init_viewports(gui_list); |
146 | gui_list->limit_scroll = false; | 162 | gui_list->limit_scroll = false; |
@@ -209,26 +225,13 @@ int gui_list_get_item_offset(struct gui_synclist * gui_list, | |||
209 | void gui_synclist_draw(struct gui_synclist *gui_list) | 225 | void gui_synclist_draw(struct gui_synclist *gui_list) |
210 | { | 226 | { |
211 | int i; | 227 | int i; |
212 | static struct gui_synclist *last_list = NULL; | 228 | #ifdef HAVE_LCD_BITMAP |
213 | static int last_count = -1; | 229 | if (list_need_reinit) |
214 | #ifdef HAVE_BUTTONBAR | ||
215 | static bool last_buttonbar = false; | ||
216 | #endif | ||
217 | if ( | ||
218 | #ifdef HAVE_BUTTONBAR | ||
219 | last_buttonbar != screens[SCREEN_MAIN].has_buttonbar || | ||
220 | #endif | ||
221 | last_list != gui_list || | ||
222 | gui_list->nb_items != last_count) | ||
223 | { | 230 | { |
224 | list_init_viewports(gui_list); | 231 | list_init_viewports(gui_list); |
225 | gui_synclist_select_item(gui_list, gui_list->selected_item); | 232 | gui_synclist_select_item(gui_list, gui_list->selected_item); |
226 | } | 233 | } |
227 | #ifdef HAVE_BUTTONBAR | ||
228 | last_buttonbar = screens[SCREEN_MAIN].has_buttonbar; | ||
229 | #endif | 234 | #endif |
230 | last_count = gui_list->nb_items; | ||
231 | last_list = gui_list; | ||
232 | FOR_NB_SCREENS(i) | 235 | FOR_NB_SCREENS(i) |
233 | { | 236 | { |
234 | list_draw(&screens[i], gui_list); | 237 | list_draw(&screens[i], gui_list); |
diff --git a/apps/gui/list.h b/apps/gui/list.h index 8a36acb005..ed61889083 100644 --- a/apps/gui/list.h +++ b/apps/gui/list.h | |||
@@ -132,6 +132,7 @@ struct gui_synclist | |||
132 | 132 | ||
133 | 133 | ||
134 | #ifdef HAVE_LCD_BITMAP | 134 | #ifdef HAVE_LCD_BITMAP |
135 | extern void list_init(void); | ||
135 | /* parse global setting to static int */ | 136 | /* parse global setting to static int */ |
136 | extern void gui_list_screen_scroll_step(int ofs); | 137 | extern void gui_list_screen_scroll_step(int ofs); |
137 | 138 | ||
diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c index 63f0b8fc20..281c04b2c5 100644 --- a/apps/gui/viewport.c +++ b/apps/gui/viewport.c | |||
@@ -208,6 +208,13 @@ static void statusbar_toggled(void* param) | |||
208 | void viewportmanager_theme_changed(int which) | 208 | void viewportmanager_theme_changed(int which) |
209 | { | 209 | { |
210 | int i; | 210 | int i; |
211 | #ifdef HAVE_BUTTONBAR | ||
212 | if (which & THEME_BUTTONBAR) | ||
213 | { /* don't handle further, the custom ui viewport ignores the buttonbar, | ||
214 | * as does viewport_set_defaults(), since only lists use it*/ | ||
215 | screens[SCREEN_MAIN].has_buttonbar = global_settings.buttonbar; | ||
216 | } | ||
217 | #endif | ||
211 | if (which & THEME_UI_VIEWPORT) | 218 | if (which & THEME_UI_VIEWPORT) |
212 | { | 219 | { |
213 | int retval = viewport_init_ui_vp(); | 220 | int retval = viewport_init_ui_vp(); |
@@ -245,6 +252,7 @@ void viewportmanager_theme_changed(int which) | |||
245 | viewport_set_fullscreen(&custom_vp[i], i); | 252 | viewport_set_fullscreen(&custom_vp[i], i); |
246 | } | 253 | } |
247 | } | 254 | } |
255 | send_event(GUI_EVENT_THEME_CHANGED, NULL); | ||
248 | } | 256 | } |
249 | 257 | ||
250 | static void viewportmanager_ui_vp_changed(void *param) | 258 | static void viewportmanager_ui_vp_changed(void *param) |
@@ -279,6 +287,11 @@ struct viewport* viewport_get_current_vp(void) | |||
279 | return ui_vp_info.vp; | 287 | return ui_vp_info.vp; |
280 | } | 288 | } |
281 | 289 | ||
290 | bool viewport_ui_vp_get_state(enum screen_type screen) | ||
291 | { | ||
292 | return ui_vp_info.active[screen]; | ||
293 | } | ||
294 | |||
282 | #ifdef HAVE_LCD_COLOR | 295 | #ifdef HAVE_LCD_COLOR |
283 | #define ARG_STRING(_depth) ((_depth) == 2 ? "dddddgg":"dddddcc") | 296 | #define ARG_STRING(_depth) ((_depth) == 2 ? "dddddgg":"dddddcc") |
284 | #else | 297 | #else |
diff --git a/apps/gui/viewport.h b/apps/gui/viewport.h index 93b5c70fc3..d431766ab5 100644 --- a/apps/gui/viewport.h +++ b/apps/gui/viewport.h | |||
@@ -58,6 +58,7 @@ void viewport_set_defaults(struct viewport *vp, enum screen_type screen); | |||
58 | 58 | ||
59 | #define THEME_STATUSBAR (BIT_N(0)) | 59 | #define THEME_STATUSBAR (BIT_N(0)) |
60 | #define THEME_UI_VIEWPORT (BIT_N(1)) | 60 | #define THEME_UI_VIEWPORT (BIT_N(1)) |
61 | #define THEME_BUTTONBAR (BIT_N(2)) | ||
61 | #define THEME_ALL (~(0u)) | 62 | #define THEME_ALL (~(0u)) |
62 | 63 | ||
63 | #define VP_SB_HIDE_ALL 0 | 64 | #define VP_SB_HIDE_ALL 0 |
@@ -116,6 +117,10 @@ struct viewport* viewport_get_current_vp(void); | |||
116 | */ | 117 | */ |
117 | void viewport_set_current_vp(struct viewport* vp); | 118 | void viewport_set_current_vp(struct viewport* vp); |
118 | 119 | ||
120 | /* | ||
121 | * returns true if the ui viewport is active on the screen | ||
122 | */ | ||
123 | bool viewport_ui_vp_get_state(enum screen_type screen); | ||
119 | #ifdef HAVE_TOUCHSCREEN | 124 | #ifdef HAVE_TOUCHSCREEN |
120 | bool viewport_point_within_vp(const struct viewport *vp, int x, int y); | 125 | bool viewport_point_within_vp(const struct viewport *vp, int x, int y); |
121 | #endif | 126 | #endif |
diff --git a/apps/main.c b/apps/main.c index 6aa16e5cb6..c7510801d4 100644 --- a/apps/main.c +++ b/apps/main.c | |||
@@ -135,6 +135,9 @@ static void app_main(void) | |||
135 | screens[i].clear_display(); | 135 | screens[i].clear_display(); |
136 | screens[i].update(); | 136 | screens[i].update(); |
137 | } | 137 | } |
138 | #ifdef HAVE_LCD_BITMAP | ||
139 | list_init(); | ||
140 | #endif | ||
138 | tree_gui_init(); | 141 | tree_gui_init(); |
139 | gui_syncstatusbar_init(&statusbars); | 142 | gui_syncstatusbar_init(&statusbars); |
140 | viewportmanager_init(); | 143 | viewportmanager_init(); |
diff --git a/apps/menus/theme_menu.c b/apps/menus/theme_menu.c index b4505de4b3..38e052b262 100644 --- a/apps/menus/theme_menu.c +++ b/apps/menus/theme_menu.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include "backdrop.h" | 38 | #include "backdrop.h" |
39 | #include "exported_menus.h" | 39 | #include "exported_menus.h" |
40 | #include "appevents.h" | 40 | #include "appevents.h" |
41 | #include "viewport.h" | ||
41 | 42 | ||
42 | #if LCD_DEPTH > 1 | 43 | #if LCD_DEPTH > 1 |
43 | /** | 44 | /** |
@@ -177,6 +178,20 @@ static int statusbar_callback(int action,const struct menu_item_ex *this_item) | |||
177 | { | 178 | { |
178 | return statusbar_callback_ex(action, this_item, SCREEN_MAIN); | 179 | return statusbar_callback_ex(action, this_item, SCREEN_MAIN); |
179 | } | 180 | } |
181 | |||
182 | #ifdef HAVE_BUTTONBAR | ||
183 | static int buttonbar_callback(int action, const struct menu_item_ex *this_item) | ||
184 | { | ||
185 | (void)this_item; | ||
186 | switch (action) | ||
187 | { | ||
188 | case ACTION_EXIT_MENUITEM: | ||
189 | viewportmanager_theme_changed(THEME_BUTTONBAR); | ||
190 | break; | ||
191 | } | ||
192 | return ACTION_REDRAW; | ||
193 | } | ||
194 | #endif | ||
180 | MENUITEM_SETTING(scrollbar_item, &global_settings.scrollbar, NULL); | 195 | MENUITEM_SETTING(scrollbar_item, &global_settings.scrollbar, NULL); |
181 | MENUITEM_SETTING(scrollbar_width, &global_settings.scrollbar_width, NULL); | 196 | MENUITEM_SETTING(scrollbar_width, &global_settings.scrollbar_width, NULL); |
182 | MENUITEM_SETTING(statusbar, &global_settings.statusbar, | 197 | MENUITEM_SETTING(statusbar, &global_settings.statusbar, |
@@ -185,8 +200,8 @@ MENUITEM_SETTING(statusbar, &global_settings.statusbar, | |||
185 | MENUITEM_SETTING(remote_statusbar, &global_settings.remote_statusbar, | 200 | MENUITEM_SETTING(remote_statusbar, &global_settings.remote_statusbar, |
186 | statusbar_callback_remote); | 201 | statusbar_callback_remote); |
187 | #endif | 202 | #endif |
188 | #if CONFIG_KEYPAD == RECORDER_PAD | 203 | #ifdef HAVE_BUTTONBAR |
189 | MENUITEM_SETTING(buttonbar, &global_settings.buttonbar, NULL); | 204 | MENUITEM_SETTING(buttonbar, &global_settings.buttonbar, buttonbar_callback); |
190 | #endif | 205 | #endif |
191 | MENUITEM_SETTING(volume_type, &global_settings.volume_type, NULL); | 206 | MENUITEM_SETTING(volume_type, &global_settings.volume_type, NULL); |
192 | MENUITEM_SETTING(battery_display, &global_settings.battery_display, NULL); | 207 | MENUITEM_SETTING(battery_display, &global_settings.battery_display, NULL); |
diff --git a/apps/screen_access.c b/apps/screen_access.c index d0b483f3f4..5b2b4724f1 100644 --- a/apps/screen_access.c +++ b/apps/screen_access.c | |||
@@ -56,7 +56,7 @@ static int screen_helper_getnblines(void) | |||
56 | { | 56 | { |
57 | int height=screens[0].lcdheight; | 57 | int height=screens[0].lcdheight; |
58 | #ifdef HAVE_LCD_BITMAP | 58 | #ifdef HAVE_LCD_BITMAP |
59 | if(global_settings.statusbar) | 59 | if(global_settings.statusbar != STATUSBAR_OFF) |
60 | height -= STATUSBAR_HEIGHT; | 60 | height -= STATUSBAR_HEIGHT; |
61 | #ifdef HAVE_BUTTONBAR | 61 | #ifdef HAVE_BUTTONBAR |
62 | if(global_settings.buttonbar && screens[0].has_buttonbar) | 62 | if(global_settings.buttonbar && screens[0].has_buttonbar) |
@@ -89,10 +89,10 @@ static int screen_helper_remote_getnblines(void) | |||
89 | { | 89 | { |
90 | int height=screens[1].lcdheight; | 90 | int height=screens[1].lcdheight; |
91 | #ifdef HAVE_LCD_BITMAP | 91 | #ifdef HAVE_LCD_BITMAP |
92 | if(global_settings.statusbar) | 92 | if(global_settings.statusbar != STATUSBAR_OFF) |
93 | height -= STATUSBAR_HEIGHT; | 93 | height -= STATUSBAR_HEIGHT; |
94 | #ifdef HAVE_BUTTONBAR | 94 | #ifdef HAVE_BUTTONBAR |
95 | if(global_settings.buttonbar && screens[0].has_buttonbar) | 95 | if(global_settings.buttonbar && screens[1].has_buttonbar) |
96 | height -= BUTTONBAR_HEIGHT; | 96 | height -= BUTTONBAR_HEIGHT; |
97 | #endif | 97 | #endif |
98 | #endif | 98 | #endif |
@@ -286,6 +286,9 @@ struct screen screens[NB_SCREENS] = | |||
286 | .backdrop_load=&remote_backdrop_load, | 286 | .backdrop_load=&remote_backdrop_load, |
287 | .backdrop_unload=&remote_backdrop_unload, | 287 | .backdrop_unload=&remote_backdrop_unload, |
288 | .backdrop_show=&remote_backdrop_show, | 288 | .backdrop_show=&remote_backdrop_show, |
289 | #ifdef HAVE_BUTTONBAR | ||
290 | .has_buttonbar=false, | ||
291 | #endif | ||
289 | } | 292 | } |
290 | #endif /* HAVE_REMOTE_LCD */ | 293 | #endif /* HAVE_REMOTE_LCD */ |
291 | }; | 294 | }; |