summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2009-08-29 15:46:32 +0000
committerThomas Martitz <kugel@rockbox.org>2009-08-29 15:46:32 +0000
commit90a29dd611e9f0f1f9741272638f6c7b7d33ac4f (patch)
tree9798827358341ae1b2d69723616ec3ea5d5d4b42
parent2659aa7f924f66d533018dd60bfe33b72bf08e00 (diff)
downloadrockbox-90a29dd611e9f0f1f9741272638f6c7b7d33ac4f.tar.gz
rockbox-90a29dd611e9f0f1f9741272638f6c7b7d33ac4f.zip
Make UI viewport handling more multiscreen aware and bring a break; accidentally back lost in a previous commit (r22485).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22537 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/gui/viewport.c77
-rw-r--r--apps/menus/theme_menu.c1
2 files changed, 41 insertions, 37 deletions
diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c
index bb4c291cc0..78d517d58b 100644
--- a/apps/gui/viewport.c
+++ b/apps/gui/viewport.c
@@ -60,7 +60,7 @@ static int statusbar_enabled = 0;
60 60
61static struct { 61static struct {
62 struct viewport* vp; 62 struct viewport* vp;
63 int active; 63 int active[NB_SCREENS];
64} ui_vp_info; 64} ui_vp_info;
65 65
66static struct viewport custom_vp[NB_SCREENS]; 66static struct viewport custom_vp[NB_SCREENS];
@@ -68,7 +68,7 @@ static struct viewport custom_vp[NB_SCREENS];
68/* callbacks for GUI_EVENT_* events */ 68/* callbacks for GUI_EVENT_* events */
69static void viewportmanager_ui_vp_changed(void *param); 69static void viewportmanager_ui_vp_changed(void *param);
70static void statusbar_toggled(void* param); 70static void statusbar_toggled(void* param);
71static int viewport_init_ui_vp(void); 71static unsigned viewport_init_ui_vp(void);
72#endif 72#endif
73static void viewportmanager_redraw(void* data); 73static void viewportmanager_redraw(void* data);
74 74
@@ -148,12 +148,15 @@ void viewport_set_defaults(struct viewport *vp, enum screen_type screen)
148 148
149void viewportmanager_init(void) 149void viewportmanager_init(void)
150{ 150{
151 viewportmanager_set_statusbar(VP_SB_ALLSCREENS);
152#ifdef HAVE_LCD_BITMAP 151#ifdef HAVE_LCD_BITMAP
152 int retval, i;
153 add_event(GUI_EVENT_STATUSBAR_TOGGLE, false, statusbar_toggled); 153 add_event(GUI_EVENT_STATUSBAR_TOGGLE, false, statusbar_toggled);
154 ui_vp_info.active = viewport_init_ui_vp(); 154 retval = viewport_init_ui_vp();
155 FOR_NB_SCREENS(i)
156 ui_vp_info.active[i] = retval & BIT_N(i);
155 ui_vp_info.vp = custom_vp; 157 ui_vp_info.vp = custom_vp;
156#endif 158#endif
159 viewportmanager_set_statusbar(VP_SB_ALLSCREENS);
157} 160}
158 161
159int viewportmanager_get_statusbar(void) 162int viewportmanager_get_statusbar(void)
@@ -204,10 +207,15 @@ static void statusbar_toggled(void* param)
204 207
205void viewportmanager_theme_changed(int which) 208void viewportmanager_theme_changed(int which)
206{ 209{
210 int i;
207 if (which & THEME_UI_VIEWPORT) 211 if (which & THEME_UI_VIEWPORT)
208 { 212 {
213 int retval = viewport_init_ui_vp();
209 /* reset the ui viewport */ 214 /* reset the ui viewport */
210 if ((ui_vp_info.active = viewport_init_ui_vp())) 215 FOR_NB_SCREENS(i)
216 ui_vp_info.active[i] = retval & BIT_N(i);
217
218 if (retval != 0)
211 add_event(GUI_EVENT_REFRESH, false, viewportmanager_ui_vp_changed); 219 add_event(GUI_EVENT_REFRESH, false, viewportmanager_ui_vp_changed);
212 else 220 else
213 remove_event(GUI_EVENT_REFRESH, viewportmanager_ui_vp_changed); 221 remove_event(GUI_EVENT_REFRESH, viewportmanager_ui_vp_changed);
@@ -216,23 +224,24 @@ void viewportmanager_theme_changed(int which)
216 } 224 }
217 if (which & THEME_STATUSBAR) 225 if (which & THEME_STATUSBAR)
218 { 226 {
219 statusbar_enabled = 0; 227 statusbar_enabled = VP_SB_HIDE_ALL;
220 if (global_settings.statusbar != STATUSBAR_OFF) 228
221 statusbar_enabled = VP_SB_ONSCREEN(SCREEN_MAIN); 229 FOR_NB_SCREENS(i)
222#ifdef HAVE_REMOTE_LCD 230 {
223 if (global_settings.remote_statusbar != STATUSBAR_OFF) 231 if (statusbar_position(i) != STATUSBAR_OFF)
224 statusbar_enabled |= VP_SB_ONSCREEN(SCREEN_REMOTE); 232 statusbar_enabled |= VP_SB_ONSCREEN(i);
225#endif 233 }
226 if (statusbar_enabled) 234
235 if (statusbar_enabled != VP_SB_HIDE_ALL)
227 add_event(GUI_EVENT_ACTIONUPDATE, false, viewportmanager_redraw); 236 add_event(GUI_EVENT_ACTIONUPDATE, false, viewportmanager_redraw);
228 else 237 else
229 remove_event(GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw); 238 remove_event(GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw);
230 239
231 /* reposition viewport to fit statusbar, only if not using the ui vp */ 240 /* reposition viewport to fit statusbar, only if not using the ui vp */
232 if (!ui_vp_info.active) 241
242 FOR_NB_SCREENS(i)
233 { 243 {
234 int i; 244 if (!ui_vp_info.active[i])
235 FOR_NB_SCREENS(i)
236 viewport_set_fullscreen(&custom_vp[i], i); 245 viewport_set_fullscreen(&custom_vp[i], i);
237 } 246 }
238 } 247 }
@@ -365,35 +374,29 @@ const char* viewport_parse_viewport(struct viewport *vp,
365/* 374/*
366 * (re)parse the UI vp from the settings 375 * (re)parse the UI vp from the settings
367 * - Returns 376 * - Returns
368 * 0 if no UI vp is used 377 * 0 if no UI vp is used at all
369 * >0 if it's used at least partly (on multiscreen targets) 378 * else the bit for the screen (1<<screen) is set
370 * NB_SCREENS if all screens have a UI vp
371 */ 379 */
372static int viewport_init_ui_vp(void) 380static unsigned viewport_init_ui_vp(void)
373{ 381{
374 int screen, ret = NB_SCREENS; 382 int screen;
383 unsigned ret = 0;
384 char *setting;
375 FOR_NB_SCREENS(screen) 385 FOR_NB_SCREENS(screen)
376 { 386 {
377#ifdef HAVE_REMOTE_LCD 387#ifdef HAVE_REMOTE_LCD
378 if ((screen == SCREEN_REMOTE)) 388 if ((screen == SCREEN_REMOTE))
379 { 389 setting = global_settings.remote_ui_vp_config;
380 if(!(viewport_parse_viewport(&custom_vp[screen], screen,
381 global_settings.remote_ui_vp_config, ',')))
382 {
383 viewport_set_fullscreen(&custom_vp[screen], screen);
384 ret--;
385 }
386 }
387 else 390 else
388#endif 391#endif
389 { 392 setting = global_settings.ui_vp_config;
390 if (!(viewport_parse_viewport(&custom_vp[screen], screen, 393
391 global_settings.ui_vp_config, ','))) 394
392 { 395 if (!(viewport_parse_viewport(&custom_vp[screen], screen,
393 viewport_set_fullscreen(&custom_vp[screen], screen); 396 setting, ',')))
394 ret--; 397 viewport_set_fullscreen(&custom_vp[screen], screen);
395 } 398 else
396 } 399 ret |= BIT_N(screen);
397 } 400 }
398 return ret; 401 return ret;
399} 402}
diff --git a/apps/menus/theme_menu.c b/apps/menus/theme_menu.c
index f2e4579864..b4505de4b3 100644
--- a/apps/menus/theme_menu.c
+++ b/apps/menus/theme_menu.c
@@ -157,6 +157,7 @@ static int statusbar_callback_ex(int action,const struct menu_item_ex *this_item
157 { 157 {
158 case ACTION_ENTER_MENUITEM: 158 case ACTION_ENTER_MENUITEM:
159 old_bar[screen] = statusbar_position(screen); 159 old_bar[screen] = statusbar_position(screen);
160 break;
160 case ACTION_EXIT_MENUITEM: 161 case ACTION_EXIT_MENUITEM:
161 gui_statusbar_changed(screen, old_bar[screen]); 162 gui_statusbar_changed(screen, old_bar[screen]);
162 send_event(GUI_EVENT_STATUSBAR_TOGGLE, NULL); 163 send_event(GUI_EVENT_STATUSBAR_TOGGLE, NULL);