mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
Add functions font_set_ui() and font_get_ui(). The font returned by FONT_UI used to be fixed at zero but since buflib-fonts (r30589) can be different, depending on the order of loads and unloads. Fixes broken behavoir in virtual keyboard (FS#12336), lyrics player (FS#12306), and hopefully, FS#12337
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30826 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
4d2ab32339
commit
e299eb3ea3
5 changed files with 66 additions and 21 deletions
|
@ -427,7 +427,10 @@ static void ft_load_font(char *file)
|
||||||
current_font_id = global_status.font_id[screen];
|
current_font_id = global_status.font_id[screen];
|
||||||
if (current_font_id >= 0)
|
if (current_font_id >= 0)
|
||||||
font_unload(current_font_id);
|
font_unload(current_font_id);
|
||||||
global_status.font_id[screen] = font_load(file);
|
current_font_id = font_load(file);
|
||||||
|
if(screen==SCREEN_MAIN)
|
||||||
|
font_set_ui(current_font_id);
|
||||||
|
global_status.font_id[screen] = current_font_id;
|
||||||
viewportmanager_theme_changed(THEME_UI_VIEWPORT);
|
viewportmanager_theme_changed(THEME_UI_VIEWPORT);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -133,6 +133,7 @@ bool list_display_title(struct gui_synclist *list, enum screen_type screen)
|
||||||
static int list_get_nb_lines(struct gui_synclist *list, enum screen_type screen)
|
static int list_get_nb_lines(struct gui_synclist *list, enum screen_type screen)
|
||||||
{
|
{
|
||||||
struct viewport *vp = list->parent[screen];
|
struct viewport *vp = list->parent[screen];
|
||||||
|
vp->line_height = font_get(vp->font)->height;
|
||||||
int lines = skinlist_get_line_count(screen, list);
|
int lines = skinlist_get_line_count(screen, list);
|
||||||
if (lines < 0)
|
if (lines < 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -886,6 +886,7 @@ void settings_apply(bool read_disk)
|
||||||
if (global_status.font_id[SCREEN_MAIN] >= 0)
|
if (global_status.font_id[SCREEN_MAIN] >= 0)
|
||||||
font_unload(global_status.font_id[SCREEN_MAIN]);
|
font_unload(global_status.font_id[SCREEN_MAIN]);
|
||||||
rc = font_load(buf);
|
rc = font_load(buf);
|
||||||
|
font_set_ui(rc);
|
||||||
CHART2("<font_load ", global_settings.font_file);
|
CHART2("<font_load ", global_settings.font_file);
|
||||||
global_status.font_id[SCREEN_MAIN] = rc;
|
global_status.font_id[SCREEN_MAIN] = rc;
|
||||||
lcd_setfont(rc);
|
lcd_setfont(rc);
|
||||||
|
|
|
@ -55,7 +55,7 @@ enum {
|
||||||
|
|
||||||
/* SYSFONT, FONT_UI, FONT_UI_REMOTE + MAXUSERFONTS fonts in skins */
|
/* SYSFONT, FONT_UI, FONT_UI_REMOTE + MAXUSERFONTS fonts in skins */
|
||||||
#define MAXFONTS (FONT_FIRSTUSERFONT + MAXUSERFONTS)
|
#define MAXFONTS (FONT_FIRSTUSERFONT + MAXUSERFONTS)
|
||||||
#define FONT_UI MAXFONTS
|
#define FONT_UI MAXUSERFONTS
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* .fnt loadable font file format definition
|
* .fnt loadable font file format definition
|
||||||
|
@ -124,6 +124,9 @@ int font_glyphs_to_bufsize(const char *path, int glyphs);
|
||||||
void font_unload(int font_id);
|
void font_unload(int font_id);
|
||||||
void font_unload_all(void);
|
void font_unload_all(void);
|
||||||
void font_lock(int font_id, bool lock);
|
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);
|
struct font* font_get(int font);
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,7 @@ struct buflib_alloc_data {
|
||||||
};
|
};
|
||||||
static int buflib_allocations[MAXFONTS];
|
static int buflib_allocations[MAXFONTS];
|
||||||
|
|
||||||
|
static int font_ui = -1;
|
||||||
static int cache_fd;
|
static int cache_fd;
|
||||||
static struct font* cache_pf;
|
static struct font* cache_pf;
|
||||||
|
|
||||||
|
@ -559,7 +560,7 @@ int font_load_ex(const char *path, size_t buffer_size)
|
||||||
|
|
||||||
lock_font_handle(handle, false);
|
lock_font_handle(handle, false);
|
||||||
buflib_allocations[font_id] = handle;
|
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!*/
|
return font_id; /* success!*/
|
||||||
}
|
}
|
||||||
int font_load(const char *path)
|
int font_load(const char *path)
|
||||||
|
@ -616,28 +617,52 @@ void font_unload_all(void)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return a pointer to an incore font structure.
|
* Return a pointer to an incore font structure.
|
||||||
* If the requested font isn't loaded/compiled-in,
|
* Return the requested font, font_ui, or sysfont
|
||||||
* decrement the font number and try again.
|
|
||||||
*/
|
*/
|
||||||
struct font* font_get(int font)
|
struct font* font_get(int font_id)
|
||||||
{
|
{
|
||||||
struct font* pf;
|
struct buflib_alloc_data *alloc;
|
||||||
if (font == FONT_UI)
|
struct font *pf;
|
||||||
font = MAXFONTS-1;
|
int handle, id=-1;
|
||||||
if (font <= FONT_SYSFIXED)
|
|
||||||
return &sysfont;
|
|
||||||
|
|
||||||
while (1) {
|
if( font_id == FONT_UI )
|
||||||
if (buflib_allocations[font] > 0)
|
id = font_ui;
|
||||||
{
|
|
||||||
struct buflib_alloc_data *alloc = core_get_data(buflib_allocations[font]);
|
if( font_id == FONT_SYSFIXED )
|
||||||
pf = &alloc->font;
|
return &sysfont;
|
||||||
if (pf && pf->height)
|
|
||||||
return pf;
|
if( id == -1 )
|
||||||
}
|
id = font_id;
|
||||||
if (--font < 0)
|
|
||||||
return &sysfont;
|
handle = buflib_allocations[id];
|
||||||
|
if( handle > 0 )
|
||||||
|
{
|
||||||
|
alloc = core_get_data(buflib_allocations[id]);
|
||||||
|
pf=&alloc->font;
|
||||||
|
if( pf && pf->height )
|
||||||
|
return pf;
|
||||||
}
|
}
|
||||||
|
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)
|
static int pf_to_handle(struct font* pf)
|
||||||
|
@ -980,6 +1005,18 @@ struct font* font_get(int font)
|
||||||
return &sysfont;
|
return &sysfont;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void font_set_ui(int font_id)
|
||||||
|
{
|
||||||
|
(void)font_id;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int font_get_ui()
|
||||||
|
{
|
||||||
|
return FONT_SYSFIXED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns width of character
|
* Returns width of character
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue