unsigned tv_display_menu(void) { unsigned result = TV_MENU_RESULT_EXIT_MENU; MENUITEM_STRINGLIST(menu, "Viewer Menu", NULL, "Return", "Viewer Options", "Show Playback Menu", "Select Bookmark", "Global Settings", "Quit"); switch (rb->do_menu(&menu, NULL, NULL, false)) { case 0: /* return */ break; case 1: /* change settings */ tv_copy_preferences(&new_prefs); result = tv_options_menu(); tv_set_preferences(&new_prefs); break; case 2: /* playback control */ playback_control(NULL); break; case 3: /* select bookmark */ tv_select_bookmark(); result = TV_MENU_RESULT_MOVE_PAGE; break; case 4: /* change global settings */ if (!tv_load_global_settings(&new_prefs)) tv_set_default_preferences(&new_prefs); result = tv_options_menu(); tv_save_global_settings(&new_prefs); break; case 5: /* quit */ result = TV_MENU_RESULT_EXIT_PLUGIN; break; } return result; }
static int tv_change_preferences(const struct tv_preferences *oldp) { #ifdef HAVE_LCD_BITMAP static bool font_changing = false; const unsigned char *font_str; struct tv_preferences new_prefs; font_str = (oldp && !font_changing)? oldp->font_name : rb->global_settings->font_file; /* change font */ if (font_changing || rb->strcmp(font_str, preferences->font_name)) { if (!tv_set_font(preferences->font_name)) { /* * tv_set_font(rb->global_settings->font_file) doesn't fail usually. * if it fails, a fatal problem occurs in Rockbox. */ if (!rb->strcmp(preferences->font_name, rb->global_settings->font_file)) return TV_CALLBACK_ERROR; font_changing = true; tv_copy_preferences(&new_prefs); rb->strlcpy(new_prefs.font_name, font_str, MAX_PATH); return (tv_set_preferences(&new_prefs))? TV_CALLBACK_STOP : TV_CALLBACK_ERROR; } col_width = 2 * rb->font_get_width(preferences->font, ' '); font_changing = false; } #else (void)oldp; #endif tv_change_viewport(); return TV_CALLBACK_OK; }