From f19f3efb078b2947638f6f7a7f209de44daf78b3 Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Tue, 8 Nov 2011 10:09:33 +0000 Subject: Redo r30826 (and hopefully not reintroduce font issues) which cleans up the font API. FONT_UI is deprecated, use screens[screen].getuifont() instead (and .setuifont() to set it after a font has been loaded) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30932 a1c6a512-1295-4272-9138-f99709370657 --- apps/filetree.c | 7 ++----- apps/gui/skin_engine/skin_parser.c | 12 ++++++----- apps/gui/skin_engine/skin_render.c | 2 +- apps/gui/statusbar-skinned.c | 2 +- apps/gui/usb_screen.c | 4 ++-- apps/gui/viewport.c | 2 +- apps/plugins/bubbles.c | 2 +- apps/recorder/keyboard.c | 2 +- apps/screen_access.c | 43 +++++++++++++++++++++++++++++++++++--- apps/screen_access.h | 3 ++- apps/settings.c | 30 +++++++++++++------------- 11 files changed, 74 insertions(+), 35 deletions(-) (limited to 'apps') diff --git a/apps/filetree.c b/apps/filetree.c index 2407be9d79..d33b823fc0 100644 --- a/apps/filetree.c +++ b/apps/filetree.c @@ -424,13 +424,10 @@ static void ft_load_font(char *file) set_file(file, (char *)global_settings.font_file, MAX_FILENAME); #endif splash(0, ID2P(LANG_WAIT)); - current_font_id = global_status.font_id[screen]; + current_font_id = screens[screen].getuifont(); if (current_font_id >= 0) font_unload(current_font_id); - current_font_id = font_load(file); - if(screen==SCREEN_MAIN) - font_set_ui(current_font_id); - global_status.font_id[screen] = current_font_id; + screens[screen].setuifont(font_load(file)); viewportmanager_theme_changed(THEME_UI_VIEWPORT); } #endif diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 1557783a7c..d207a1fb3e 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c @@ -246,10 +246,12 @@ static int parse_statusbar_tags(struct skin_element* element, viewport_set_fullscreen(&default_vp->vp, curr_screen); } #ifdef HAVE_REMOTE_LCD - /* viewport_set_defaults() sets the font to FONT_UI+curr_screen. - * This parser requires font 1 to always be the UI font, - * so force it back to FONT_UI and handle the screen number at the end */ - default_vp->vp.font = FONT_UI; + /* This parser requires viewports which will use the settings font to + * have font == 1, but the above viewport_set() calls set font to + * the current real font id. So force 1 here it will be set correctly + * at the end + */ + default_vp->vp.font = 1; #endif } return 0; @@ -1645,7 +1647,7 @@ static bool skin_load_fonts(struct wps_data *data) font_id = skin_vp->parsed_fontid; if (font_id == 1) { /* the usual case -> built-in fonts */ - vp->font = global_status.font_id[curr_screen]; + vp->font = screens[curr_screen].getuifont(); continue; } else if (font_id <= 0) diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c index 369bd46be5..4d41a6f9b7 100644 --- a/apps/gui/skin_engine/skin_render.c +++ b/apps/gui/skin_engine/skin_render.c @@ -658,7 +658,7 @@ void skin_render_viewport(struct skin_element* viewport, struct gui_wps *gwps, /* fix font ID's */ if (skin_viewport->parsed_fontid == 1) - skin_viewport->vp.font = global_status.font_id[display->screen_type]; + skin_viewport->vp.font = display->getuifont(); #endif while (line) diff --git a/apps/gui/statusbar-skinned.c b/apps/gui/statusbar-skinned.c index 7850e7cc27..f79672c0d9 100644 --- a/apps/gui/statusbar-skinned.c +++ b/apps/gui/statusbar-skinned.c @@ -128,7 +128,7 @@ struct viewport *sb_skin_get_info_vp(enum screen_type screen) if (!vp) return NULL; if (vp->parsed_fontid == 1) - vp->vp.font = global_status.font_id[screen]; + vp->vp.font = screens[screen].getuifont(); return &vp->vp; } diff --git a/apps/gui/usb_screen.c b/apps/gui/usb_screen.c index 06770b1b94..2b7d47209b 100644 --- a/apps/gui/usb_screen.c +++ b/apps/gui/usb_screen.c @@ -265,8 +265,8 @@ void gui_usb_screen_run(bool early_usb) #ifdef HAVE_LCD_BITMAP FOR_NB_SCREENS(i) { - font_unload(global_status.font_id[i]); - global_status.font_id[i] = -1; + font_unload(screens[i].getuifont()); + screens[i].setuifont(FONT_SYSFIXED); } skin_unload_all(); #endif diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c index 33ffed79f3..940f7f9cfa 100644 --- a/apps/gui/viewport.c +++ b/apps/gui/viewport.c @@ -319,7 +319,7 @@ void viewport_set_fullscreen(struct viewport *vp, #ifndef __PCTOOL__ set_default_align_flags(vp); #endif - vp->font = global_status.font_id[screen]; + vp->font = screens[screen].getuifont(); vp->line_height = 0; /* calculate from font height */ vp->drawmode = DRMODE_SOLID; #if LCD_DEPTH > 1 diff --git a/apps/plugins/bubbles.c b/apps/plugins/bubbles.c index d9f76f7f72..1c4bbca788 100644 --- a/apps/plugins/bubbles.c +++ b/apps/plugins/bubbles.c @@ -1435,7 +1435,7 @@ static void bubbles_drawboard(struct game_context* bb) { /* clear screen */ rb->lcd_clear_display(); - int font = rb->screens[SCREEN_MAIN]->getfont(); + int font = rb->screens[SCREEN_MAIN]->getuifont(); h = rb->font_get(font)->height + 1; /* draw background */ #ifdef HAVE_LCD_COLOR diff --git a/apps/recorder/keyboard.c b/apps/recorder/keyboard.c index c4cfe48ad9..4910c74877 100644 --- a/apps/recorder/keyboard.c +++ b/apps/recorder/keyboard.c @@ -720,7 +720,7 @@ static void kbd_calc_params(struct keyboard_parameters *pm, (touchscreen_get_mode() == TOUCHSCREEN_POINT)); #endif - pm->curfont = pm->default_lines ? FONT_SYSFIXED : FONT_UI; + pm->curfont = pm->default_lines ? FONT_SYSFIXED : sc->getuifont(); font = font_get(pm->curfont); pm->font_h = font->height; diff --git a/apps/screen_access.c b/apps/screen_access.c index 01fdebe0db..f07b906fda 100644 --- a/apps/screen_access.c +++ b/apps/screen_access.c @@ -77,6 +77,24 @@ void screen_helper_setfont(int font) #endif } +int screen_helper_getuifont(void) +{ +#ifdef HAVE_LCD_BITMAP + return global_status.font_id[SCREEN_MAIN]; +#else + return FONT_SYSFIXED; +#endif +} + +void screen_helper_setuifont(int font) +{ +#ifdef HAVE_LCD_BITMAP + global_status.font_id[SCREEN_MAIN] = font; +#else + (void)font; +#endif +} + #if NB_SCREENS == 2 static int screen_helper_remote_getcharwidth(void) { @@ -116,6 +134,23 @@ void screen_helper_remote_setfont(int font) font = global_status.font_id[SCREEN_REMOTE]; lcd_remote_setfont(font); } + +int screen_helper_remote_getuifont(void) +{ +#ifdef HAVE_LCD_BITMAP + return global_status.font_id[SCREEN_REMOTE]; +#else + return FONT_SYSFIXED; +#endif +} + +void screen_helper_remote_setuifont(int font) +{ +#ifdef HAVE_LCD_BITMAP + global_status.font_id[SCREEN_REMOTE] = font; +#endif +} + #endif struct screen screens[NB_SCREENS] = @@ -147,7 +182,8 @@ struct screen screens[NB_SCREENS] = .getstringsize=&lcd_getstringsize, #ifdef HAVE_LCD_BITMAP .setfont=screen_helper_setfont, - .getfont=&lcd_getfont, + .getuifont=screen_helper_getuifont, + .setuifont=screen_helper_setuifont, .mono_bitmap=&lcd_mono_bitmap, .mono_bitmap_part=&lcd_mono_bitmap_part, .set_drawmode=&lcd_set_drawmode, @@ -246,8 +282,9 @@ struct screen screens[NB_SCREENS] = .getheight=&lcd_remote_getheight, .getstringsize=&lcd_remote_getstringsize, #if 1 /* all remote LCDs are bitmapped so far */ - .setfont=screen_helper_setfont, - .getfont=&lcd_remote_getfont, + .setfont=screen_helper_remote_setfont, + .getuifont=screen_helper_remote_getuifont, + .setuifont=screen_helper_remote_setuifont, .mono_bitmap=&lcd_remote_mono_bitmap, .mono_bitmap_part=&lcd_remote_mono_bitmap_part, .bitmap=(screen_bitmap_func*)&lcd_remote_bitmap, diff --git a/apps/screen_access.h b/apps/screen_access.h index 2713219811..04cc6f4f90 100644 --- a/apps/screen_access.h +++ b/apps/screen_access.h @@ -71,7 +71,8 @@ struct screen int (*getstringsize)(const unsigned char *str, int *w, int *h); #if defined(HAVE_LCD_BITMAP) || defined(HAVE_REMOTE_LCD) /* always bitmap */ void (*setfont)(int newfont); - int (*getfont)(void); + int (*getuifont)(void); + void (*setuifont)(int newfont); void (*scroll_step)(int pixels); void (*puts_style_offset)(int x, int y, const unsigned char *str, diff --git a/apps/settings.c b/apps/settings.c index 7142cfb0c6..fbfa438ab5 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -876,37 +876,38 @@ void settings_apply(bool read_disk) /* fonts need to be loaded before the WPS */ if (global_settings.font_file[0] && global_settings.font_file[0] != '-') { - const char* loaded_font = font_filename(global_status.font_id[SCREEN_MAIN]); + int font_ui = screens[SCREEN_MAIN].getuifont(); + const char* loaded_font = font_filename(font_ui); snprintf(buf, sizeof buf, FONT_DIR "/%s.fnt", global_settings.font_file); if (!loaded_font || strcmp(loaded_font, buf)) { CHART2(">font_load ", global_settings.font_file); - if (global_status.font_id[SCREEN_MAIN] >= 0) - font_unload(global_status.font_id[SCREEN_MAIN]); + if (font_ui >= 0) + font_unload(font_ui); rc = font_load(buf); - font_set_ui(rc); CHART2("font_load_remoteui ", global_settings.remote_font_file); - if (global_status.font_id[SCREEN_REMOTE] >= 0) - font_unload(global_status.font_id[SCREEN_REMOTE]); + if (font_ui >= 0) + font_unload(font_ui); rc = font_load(buf); CHART2(" FONT_SYSFIXED) + if (screens[i].getuifont() > FONT_SYSFIXED) { - font_unload(global_status.font_id[i]); - global_status.font_id[i] = FONT_SYSFIXED; + font_unload(screens[i].getuifont()); + screens[i].setuifont(FONT_SYSFIXED); + screens[i].setfont(FONT_SYSFIXED); } } #endif -- cgit v1.2.3