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
This commit is contained in:
parent
452a3ce274
commit
f19f3efb07
13 changed files with 94 additions and 95 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 ", global_settings.font_file);
|
||||
global_status.font_id[SCREEN_MAIN] = rc;
|
||||
lcd_setfont(rc);
|
||||
screens[SCREEN_MAIN].setuifont(rc);
|
||||
screens[SCREEN_MAIN].setfont(rc);
|
||||
}
|
||||
}
|
||||
#ifdef HAVE_REMOTE_LCD
|
||||
if ( global_settings.remote_font_file[0]
|
||||
&& global_settings.remote_font_file[0] != '-') {
|
||||
const char* loaded_font = font_filename(global_status.font_id[SCREEN_REMOTE]);
|
||||
int font_ui = screens[SCREEN_REMOTE].getuifont();
|
||||
const char* loaded_font = font_filename(font_ui);
|
||||
snprintf(buf, sizeof buf, FONT_DIR "/%s.fnt",
|
||||
global_settings.remote_font_file);
|
||||
if (!loaded_font || strcmp(loaded_font, buf))
|
||||
{
|
||||
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_load_remoteui ", global_settings.remote_font_file);
|
||||
global_status.font_id[SCREEN_REMOTE] = rc;
|
||||
lcd_remote_setfont(rc);
|
||||
screens[SCREEN_REMOTE].setuifont(rc);
|
||||
screens[SCREEN_REMOTE].setfont(rc);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -1076,10 +1077,11 @@ void settings_reset(void)
|
|||
#ifdef HAVE_LCD_BITMAP
|
||||
FOR_NB_SCREENS(i)
|
||||
{
|
||||
if (global_status.font_id[i] > 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
|
||||
|
|
|
@ -55,7 +55,7 @@ enum {
|
|||
|
||||
/* SYSFONT, FONT_UI, FONT_UI_REMOTE + MAXUSERFONTS fonts in skins */
|
||||
#define MAXFONTS (FONT_FIRSTUSERFONT + MAXUSERFONTS)
|
||||
#define FONT_UI MAXUSERFONTS
|
||||
#define FONT_UI MAXFONTS
|
||||
|
||||
/*
|
||||
* .fnt loadable font file format definition
|
||||
|
@ -124,9 +124,6 @@ int font_glyphs_to_bufsize(const char *path, int glyphs);
|
|||
void font_unload(int font_id);
|
||||
void font_unload_all(void);
|
||||
void font_lock(int font_id, bool lock);
|
||||
/* set the default UI font */
|
||||
void font_set_ui(int font_id);
|
||||
int font_get_ui(void);
|
||||
|
||||
struct font* font_get(int font);
|
||||
|
||||
|
|
|
@ -88,7 +88,6 @@ struct buflib_alloc_data {
|
|||
};
|
||||
static int buflib_allocations[MAXFONTS];
|
||||
|
||||
static int font_ui = -1;
|
||||
static int cache_fd;
|
||||
static struct font* cache_pf;
|
||||
|
||||
|
@ -560,7 +559,7 @@ int font_load_ex(const char *path, size_t buffer_size)
|
|||
|
||||
lock_font_handle(handle, false);
|
||||
buflib_allocations[font_id] = handle;
|
||||
//printf("%s -> [%d] -> %d\n", path, font_id, handle);
|
||||
//printf("%s -> [%d] -> %d\n", path, font_id, *handle);
|
||||
return font_id; /* success!*/
|
||||
}
|
||||
int font_load(const char *path)
|
||||
|
@ -617,52 +616,28 @@ void font_unload_all(void)
|
|||
|
||||
/*
|
||||
* Return a pointer to an incore font structure.
|
||||
* Return the requested font, font_ui, or sysfont
|
||||
* If the requested font isn't loaded/compiled-in,
|
||||
* decrement the font number and try again.
|
||||
*/
|
||||
struct font* font_get(int font_id)
|
||||
struct font* font_get(int font)
|
||||
{
|
||||
struct buflib_alloc_data *alloc;
|
||||
struct font *pf;
|
||||
int handle, id=-1;
|
||||
|
||||
if( font_id == FONT_UI )
|
||||
id = font_ui;
|
||||
|
||||
if( font_id == FONT_SYSFIXED )
|
||||
struct font* pf;
|
||||
if (font == FONT_UI)
|
||||
font = MAXFONTS-1;
|
||||
if (font <= FONT_SYSFIXED)
|
||||
return &sysfont;
|
||||
|
||||
if( id == -1 )
|
||||
id = font_id;
|
||||
|
||||
handle = buflib_allocations[id];
|
||||
if( handle > 0 )
|
||||
{
|
||||
alloc = core_get_data(buflib_allocations[id]);
|
||||
pf=&alloc->font;
|
||||
if( pf && pf->height )
|
||||
return pf;
|
||||
|
||||
while (1) {
|
||||
if (buflib_allocations[font] > 0)
|
||||
{
|
||||
struct buflib_alloc_data *alloc = core_get_data(buflib_allocations[font]);
|
||||
pf = &alloc->font;
|
||||
if (pf && pf->height)
|
||||
return pf;
|
||||
}
|
||||
if (--font < 0)
|
||||
return &sysfont;
|
||||
}
|
||||
handle = buflib_allocations[font_ui];
|
||||
if( handle > 0 )
|
||||
{
|
||||
alloc = core_get_data(buflib_allocations[font_ui]);
|
||||
pf=&alloc->font;
|
||||
if( pf && pf->height )
|
||||
return pf;
|
||||
}
|
||||
|
||||
return &sysfont;
|
||||
}
|
||||
|
||||
void font_set_ui( int font_id )
|
||||
{
|
||||
font_ui = font_id;
|
||||
return;
|
||||
}
|
||||
|
||||
int font_get_ui()
|
||||
{
|
||||
return font_ui;
|
||||
}
|
||||
|
||||
static int pf_to_handle(struct font* pf)
|
||||
|
@ -1004,18 +979,6 @@ struct font* font_get(int font)
|
|||
return &sysfont;
|
||||
}
|
||||
|
||||
void font_set_ui(int font_id)
|
||||
{
|
||||
(void)font_id;
|
||||
return;
|
||||
}
|
||||
|
||||
int font_get_ui()
|
||||
{
|
||||
return FONT_SYSFIXED;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Returns width of character
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue