summaryrefslogtreecommitdiff
path: root/apps/menu.c
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2008-12-31 05:59:26 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2008-12-31 05:59:26 +0000
commite385ee18ce501e26189d5a2a68d092104720df30 (patch)
tree5219051887835d9750d80f71d9849ceb3aa65d82 /apps/menu.c
parent54919ae9176bd9cbffc8412f0c831f471b8ac4d5 (diff)
downloadrockbox-e385ee18ce501e26189d5a2a68d092104720df30.tar.gz
rockbox-e385ee18ce501e26189d5a2a68d092104720df30.zip
Decouple the statusbar drawing from the rest of the screen drawing. it is not drawn roughly 4x per second automatically.
viewport_Set_defaults() will setup the given viewport with the correct "full screen" dimensions (so start at 0,0 if statusbars are disabled or 0,8 if they are enabled.) All screens should keep the statusbar enabled, but if you really want to ignore the user setting you can disbaled it with viewportmanager_set_statusbar(false). This commit also includes some menu/list viewport cleanups from kugel in FS#9603 git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19622 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/menu.c')
-rw-r--r--apps/menu.c61
1 files changed, 10 insertions, 51 deletions
diff --git a/apps/menu.c b/apps/menu.c
index a0317e4a84..b5309a047e 100644
--- a/apps/menu.c
+++ b/apps/menu.c
@@ -283,29 +283,6 @@ static int talk_menu_item(int selected_item, void *data)
283 } 283 }
284 return 0; 284 return 0;
285} 285}
286/* this is used to reload the default menu viewports when the
287 theme changes. nothing happens if the menu is using a supplied parent vp */
288static void init_default_menu_viewports(struct viewport parent[NB_SCREENS], bool hide_bars)
289{
290 int i;
291 FOR_NB_SCREENS(i)
292 {
293 viewport_set_defaults(&parent[i], i);
294 /* viewport_set_defaults() fixes the vp for the bars, so resize */
295 if (hide_bars)
296 {
297 if (global_settings.statusbar)
298 {
299 parent[i].y -= STATUSBAR_HEIGHT;
300 parent[i].height += STATUSBAR_HEIGHT;
301 }
302 }
303 }
304#ifdef HAVE_BUTTONBAR
305 if (!hide_bars && global_settings.buttonbar)
306 parent[0].height -= BUTTONBAR_HEIGHT;
307#endif
308}
309 286
310bool do_setting_from_menu(const struct menu_item_ex *temp, 287bool do_setting_from_menu(const struct menu_item_ex *temp,
311 struct viewport parent[NB_SCREENS]) 288 struct viewport parent[NB_SCREENS])
@@ -383,8 +360,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
383 int menu_stack_selected_item[MAX_MENUS]; 360 int menu_stack_selected_item[MAX_MENUS];
384 int stack_top = 0; 361 int stack_top = 0;
385 bool in_stringlist, done = false; 362 bool in_stringlist, done = false;
386 363 struct viewport *vps = NULL;
387 struct viewport *vps, menu_vp[NB_SCREENS]; /* menu_vp will hopefully be phased out */
388#ifdef HAVE_BUTTONBAR 364#ifdef HAVE_BUTTONBAR
389 struct gui_buttonbar buttonbar; 365 struct gui_buttonbar buttonbar;
390 gui_buttonbar_init(&buttonbar); 366 gui_buttonbar_init(&buttonbar);
@@ -396,27 +372,12 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
396 if (start_menu == NULL) 372 if (start_menu == NULL)
397 menu = &main_menu_; 373 menu = &main_menu_;
398 else menu = start_menu; 374 else menu = start_menu;
399 375
400 init_default_menu_viewports(menu_vp, hide_bars); 376 /* if hide_bars is true, assume parent has been fixed before passed into
401 377 * this function, e.g. with viewport_set_defaults(parent, screen, true) */
402 if (parent) 378 init_menu_lists(menu, &lists, selected, true, parent);
403 { 379 vps = *(lists.parent);
404 vps = parent;
405 /* if hide_bars == true we assume the viewport is correctly sized */
406 }
407 else
408 {
409 vps = menu_vp;
410 }
411 FOR_NB_SCREENS(i)
412 {
413 screens[i].set_viewport(&vps[i]);
414 screens[i].clear_viewport();
415 screens[i].set_viewport(NULL);
416 }
417 init_menu_lists(menu, &lists, selected, true, vps);
418 in_stringlist = ((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID); 380 in_stringlist = ((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID);
419
420 /* load the callback, and only reload it if menu changes */ 381 /* load the callback, and only reload it if menu changes */
421 get_menu_callback(menu, &menu_callback); 382 get_menu_callback(menu, &menu_callback);
422 383
@@ -436,7 +397,6 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
436#ifdef HAVE_BUTTONBAR 397#ifdef HAVE_BUTTONBAR
437 gui_buttonbar_draw(&buttonbar); 398 gui_buttonbar_draw(&buttonbar);
438#endif 399#endif
439 gui_syncstatusbar_draw(&statusbars, true);
440 } 400 }
441 action = get_action(CONTEXT_MAINMENU, 401 action = get_action(CONTEXT_MAINMENU,
442 list_do_action_timeout(&lists, HZ)); 402 list_do_action_timeout(&lists, HZ));
@@ -496,7 +456,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
496 else if (!in_stringlist) 456 else if (!in_stringlist)
497 { 457 {
498 int type; 458 int type;
499 selected = get_menu_selection(gui_synclist_get_sel_pos(&lists), menu); 459 selected = get_menu_selection(gui_synclist_get_sel_pos(&lists),menu);
500 temp = menu->submenus[selected]; 460 temp = menu->submenus[selected];
501 type = (temp->flags&MENU_TYPE_MASK); 461 type = (temp->flags&MENU_TYPE_MASK);
502 if ((type == MT_SETTING_W_TEXT || type == MT_SETTING)) 462 if ((type == MT_SETTING_W_TEXT || type == MT_SETTING))
@@ -640,9 +600,9 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
640 temp->function->param); 600 temp->function->param);
641 else 601 else
642 return_value = temp->function->function(); 602 return_value = temp->function->function();
643 if (!(menu->flags&MENU_EXITAFTERTHISMENU) || (temp->flags&MENU_EXITAFTERTHISMENU)) 603 if (!(menu->flags&MENU_EXITAFTERTHISMENU) ||
604 (temp->flags&MENU_EXITAFTERTHISMENU))
644 { 605 {
645 init_default_menu_viewports(menu_vp, hide_bars);
646 init_menu_lists(menu, &lists, selected, true, vps); 606 init_menu_lists(menu, &lists, selected, true, vps);
647 } 607 }
648 if (temp->flags&MENU_FUNC_CHECK_RETVAL) 608 if (temp->flags&MENU_FUNC_CHECK_RETVAL)
@@ -658,9 +618,8 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
658 case MT_SETTING: 618 case MT_SETTING:
659 case MT_SETTING_W_TEXT: 619 case MT_SETTING_W_TEXT:
660 { 620 {
661 if (do_setting_from_menu(temp, menu_vp)) 621 if (do_setting_from_menu(temp, vps))
662 { 622 {
663 init_default_menu_viewports(menu_vp, hide_bars);
664 init_menu_lists(menu, &lists, selected, true,vps); 623 init_menu_lists(menu, &lists, selected, true,vps);
665 redraw_lists = false; /* above does the redraw */ 624 redraw_lists = false; /* above does the redraw */
666 } 625 }