Index: rockbox_svn/apps/filetree.c =================================================================== --- rockbox_svn.orig/apps/filetree.c +++ rockbox_svn/apps/filetree.c @@ -538,6 +538,6 @@ int ft_enter(struct tree_context* c) strcpy(buf_copy, buf); set_file(buf_copy, (char *)global_settings.recordfont, MAX_FILENAME); #endif + /* dont set userfonts because of the buffer problem */ break; case TREE_ATTR_KBD: Index: rockbox_svn/apps/settings.c =================================================================== --- rockbox_svn.orig/apps/settings.c +++ rockbox_svn/apps/settings.c @@ -905,6 +905,70 @@ void settings_apply(void) } } + /* Load all user fonts */ + if ( global_settings.userfont1[0] && + global_settings.userfont1[0] != 0xff ) { + snprintf(buf, sizeof buf, FONT_DIR "/%s.fnt", + global_settings.userfont1); + font_load(buf, FONT_USER1); + } + else + font_reset(FONT_USER1); + + if ( global_settings.userfont2[0] && + global_settings.userfont2[0] != 0xff ) { + snprintf(buf, sizeof buf, FONT_DIR "/%s.fnt", + global_settings.userfont2); + font_load(buf, FONT_USER2); + } + else + font_reset(FONT_USER2); + + if ( global_settings.userfont3[0] && + global_settings.userfont3[0] != 0xff ) { + snprintf(buf, sizeof buf, FONT_DIR "/%s.fnt", + global_settings.userfont3); + font_load(buf, FONT_USER3); + } + else + font_reset(FONT_USER3); + + if ( global_settings.userfont4[0] && + global_settings.userfont4[0] != 0xff ) { + snprintf(buf, sizeof buf, FONT_DIR "/%s.fnt", + global_settings.userfont4); + font_load(buf, FONT_USER4); + } + else + font_reset(FONT_USER4); + + if ( global_settings.userfont5[0] && + global_settings.userfont5[0] != 0xff ) { + snprintf(buf, sizeof buf, FONT_DIR "/%s.fnt", + global_settings.userfont5); + font_load(buf, FONT_USER5); + } + else + font_reset(FONT_USER5); + + if ( global_settings.userfont6[0] && + global_settings.userfont6[0] != 0xff ) { + snprintf(buf, sizeof buf, FONT_DIR "/%s.fnt", + global_settings.userfont6); + font_load(buf, FONT_USER6); + } + else + font_reset(FONT_USER6); + + if ( global_settings.userfont7[0] && + global_settings.userfont7[0] != 0xff ) { + snprintf(buf, sizeof buf, FONT_DIR "/%s.fnt", + global_settings.userfont7); + font_load(buf, FONT_USER7); + } + else + font_reset(FONT_USER7); + if ( global_settings.kbd_file[0]) { snprintf(buf, sizeof buf, ROCKBOX_DIR "/%s.kbd", global_settings.kbd_file); @@ -1016,6 +1080,13 @@ void settings_reset(void) { #if defined (HAVE_RECORDING) && CONFIG_CODEC == SWCODEC enc_global_settings_reset(); #endif + global_settings.userfont1[0] = '\0'; + global_settings.userfont2[0] = '\0'; + global_settings.userfont3[0] = '\0'; + global_settings.userfont4[0] = '\0'; + global_settings.userfont5[0] = '\0'; + global_settings.userfont6[0] = '\0'; + global_settings.userfont7[0] = '\0'; } /** Changing setting values **/ Index: rockbox_svn/apps/settings.h =================================================================== --- rockbox_svn.orig/apps/settings.h +++ rockbox_svn/apps/settings.h @@ -416,6 +416,14 @@ struct user_settings unsigned char recordfont[MAX_FILENAME+1]; #endif + unsigned char userfont1[MAX_FILENAME+1]; + unsigned char userfont2[MAX_FILENAME+1]; + unsigned char userfont3[MAX_FILENAME+1]; + unsigned char userfont4[MAX_FILENAME+1]; + unsigned char userfont5[MAX_FILENAME+1]; + unsigned char userfont6[MAX_FILENAME+1]; + unsigned char userfont7[MAX_FILENAME+1]; + unsigned char wps_file[MAX_FILENAME+1]; /* last wps */ unsigned char lang_file[MAX_FILENAME+1]; /* last language */ Index: rockbox_svn/firmware/export/font.h =================================================================== --- rockbox_svn.orig/firmware/export/font.h +++ rockbox_svn/firmware/export/font.h @@ -54,6 +54,13 @@ #ifdef HAVE_RECORDING #define GLYPH_CACHE_FILE_RECORD "/.rockbox/.glyphcache-record" #endif +#define GLYPH_CACHE_FILE_USER1 "/.rockbox/.glyphcache-user1" +#define GLYPH_CACHE_FILE_USER2 "/.rockbox/.glyphcache-user2" +#define GLYPH_CACHE_FILE_USER3 "/.rockbox/.glyphcache-user3" +#define GLYPH_CACHE_FILE_USER4 "/.rockbox/.glyphcache-user4" +#define GLYPH_CACHE_FILE_USER5 "/.rockbox/.glyphcache-user5" +#define GLYPH_CACHE_FILE_USER6 "/.rockbox/.glyphcache-user6" +#define GLYPH_CACHE_FILE_USER7 "/.rockbox/.glyphcache-user7" /* * Fonts are specified by number, and used for display @@ -76,6 +83,13 @@ enum { #ifdef HAVE_RECORDING FONT_RECORD, /* Recording font */ #endif + FONT_USER1, /* User custom fonts for use in wps */ + FONT_USER2, /* User custom fonts for use in wps */ + FONT_USER3, /* User custom fonts for use in wps */ + FONT_USER4, /* User custom fonts for use in wps */ + FONT_USER5, /* User custom fonts for use in wps */ + FONT_USER6, /* User custom fonts for use in wps */ + FONT_USER7, /* User custom fonts for use in wps */ MAXFONTS }; Index: rockbox_svn/firmware/font.c =================================================================== --- rockbox_svn.orig/firmware/font.c +++ rockbox_svn/firmware/font.c @@ -55,6 +55,13 @@ static struct font tunerfont; #ifdef HAVE_RECORDING static struct font recordfont; #endif +static struct font userfont1; +static struct font userfont2; +static struct font userfont3; +static struct font userfont4; +static struct font userfont5; +static struct font userfont6; +static struct font userfont7; /* system font table, in order of FONT_xxx definition */ static struct font* sysfonts[MAXFONTS] = { @@ -66,8 +73,15 @@ static struct font* sysfonts[MAXFONTS] = &tunerfont, #endif #ifdef HAVE_RECORDING - &recordfont + &recordfont, #endif + &userfont1, + &userfont2, + &userfont3, + &userfont4, + &userfont5, + &userfont6, + &userfont7 }; /* static buffer allocation structures */ @@ -598,7 +612,28 @@ void glyph_cache_save(int font) fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_RECORD); break; #endif - default: + case 5: + fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_USER1); + break; + case 6: + fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_USER2); + break; + case 7: + fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_USER3); + break; + case 8: + fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_USER4); + break; + case 9: + fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_USER5); + break; + case 10: + fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_USER6); + break; + case 11: + fntfile[font].glyph_fd = creat(GLYPH_CACHE_FILE_USER7); + break; + default: return; } @@ -632,17 +667,38 @@ void glyph_cache_load(int font) case 2: fd = open(GLYPH_CACHE_FILE_MENU, O_RDONLY|O_BINARY); break; - #ifdef CONFIG_TUNER +#ifdef CONFIG_TUNER case 3: fd = open(GLYPH_CACHE_FILE_TUNER, O_RDONLY|O_BINARY); break; - #endif - #ifdef HAVE_RECORDING +#endif +#ifdef HAVE_RECORDING case 4: fd = open(GLYPH_CACHE_FILE_RECORD, O_RDONLY|O_BINARY); break; - #endif - default: +#endif + case 5: + fd = open(GLYPH_CACHE_FILE_USER1, O_RDONLY|O_BINARY); + break; + case 6: + fd = open(GLYPH_CACHE_FILE_USER2, O_RDONLY|O_BINARY); + break; + case 7: + fd = open(GLYPH_CACHE_FILE_USER3, O_RDONLY|O_BINARY); + break; + case 8: + fd = open(GLYPH_CACHE_FILE_USER4, O_RDONLY|O_BINARY); + break; + case 9: + fd = open(GLYPH_CACHE_FILE_USER5, O_RDONLY|O_BINARY); + break; + case 10: + fd = open(GLYPH_CACHE_FILE_USER6, O_RDONLY|O_BINARY); + break; + case 11: + fd = open(GLYPH_CACHE_FILE_USER7, O_RDONLY|O_BINARY); + break; + default: return; } Index: rockbox_svn/apps/settings_list.c =================================================================== --- rockbox_svn.orig/apps/settings_list.c +++ rockbox_svn/apps/settings_list.c @@ -510,6 +510,13 @@ const struct settings_list settings[] = false,"remote reduce ticking", NULL), #endif #endif + FILENAME_SETTING(F_THEMESETTING,userfont1,"userfont1","",FONT_DIR "/",".fnt",MAX_FILENAME+1), + FILENAME_SETTING(F_THEMESETTING,userfont2,"userfont2","",FONT_DIR "/",".fnt",MAX_FILENAME+1), + FILENAME_SETTING(F_THEMESETTING,userfont3,"userfont3","",FONT_DIR "/",".fnt",MAX_FILENAME+1), + FILENAME_SETTING(F_THEMESETTING,userfont4,"userfont4","",FONT_DIR "/",".fnt",MAX_FILENAME+1), + FILENAME_SETTING(F_THEMESETTING,userfont5,"userfont5","",FONT_DIR "/",".fnt",MAX_FILENAME+1), + FILENAME_SETTING(F_THEMESETTING,userfont6,"userfont6","",FONT_DIR "/",".fnt",MAX_FILENAME+1), + FILENAME_SETTING(F_THEMESETTING,userfont7,"userfont7","",FONT_DIR "/",".fnt",MAX_FILENAME+1), #if CONFIG_BACKLIGHT OFFON_SETTING(0,bl_filter_first_keypress,