summaryrefslogtreecommitdiffstats
path: root/firmware/font.c
diff options
context:
space:
mode:
authorFred Bauer <fred.w.bauer@gmail.com>2011-10-22 17:13:33 +0000
committerFred Bauer <fred.w.bauer@gmail.com>2011-10-22 17:13:33 +0000
commite299eb3ea36cba48875cf35bb1dcc93eaba0d279 (patch)
treea2d9e853522207fae414d82c9f5e6dba81252ea4 /firmware/font.c
parent4d2ab32339fb8e7c02841e52d35498081503d188 (diff)
downloadrockbox-e299eb3ea36cba48875cf35bb1dcc93eaba0d279.tar.gz
rockbox-e299eb3ea36cba48875cf35bb1dcc93eaba0d279.tar.bz2
rockbox-e299eb3ea36cba48875cf35bb1dcc93eaba0d279.zip
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
Diffstat (limited to 'firmware/font.c')
-rw-r--r--firmware/font.c75
1 files changed, 56 insertions, 19 deletions
diff --git a/firmware/font.c b/firmware/font.c
index f1cddb0f3c..eb15bb7420 100644
--- a/firmware/font.c
+++ b/firmware/font.c
@@ -88,6 +88,7 @@ struct buflib_alloc_data {
};
static int buflib_allocations[MAXFONTS];
+static int font_ui = -1;
static int cache_fd;
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);
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)
@@ -616,28 +617,52 @@ void font_unload_all(void)
/*
* Return a pointer to an incore font structure.
- * If the requested font isn't loaded/compiled-in,
- * decrement the font number and try again.
+ * Return the requested font, font_ui, or sysfont
*/
-struct font* font_get(int font)
+struct font* font_get(int font_id)
{
- struct font* pf;
- if (font == FONT_UI)
- font = MAXFONTS-1;
- if (font <= FONT_SYSFIXED)
- return &sysfont;
+ struct buflib_alloc_data *alloc;
+ struct font *pf;
+ int handle, id=-1;
- 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;
+ if( font_id == FONT_UI )
+ id = font_ui;
+
+ if( font_id == 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;
+ }
+ 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)
@@ -980,6 +1005,18 @@ 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
*/