diff --git a/apps/filetypes.c b/apps/filetypes.c index 25dc0fe7da..832d67799b 100644 --- a/apps/filetypes.c +++ b/apps/filetypes.c @@ -63,6 +63,8 @@ struct file_type { char* extension; /* NULL for none */ }; static struct file_type filetypes[MAX_FILETYPES]; +static int custom_filetype_icons[MAX_FILETYPES]; +static bool custom_icons_loaded = false; static int filetype_count = 0; static unsigned char heighest_attr = 0; @@ -81,6 +83,10 @@ void read_viewer_theme_file(void) int fd; char *ext, *icon; int i; + custom_icons_loaded = false; + for (i=0; i= '0' && *icon <= '9') - filetypes[i].icon = Icon_Last_Themeable + atoi(icon); + custom_filetype_icons[i] = Icon_Last_Themeable + atoi(icon); break; } } } close(fd); + custom_icons_loaded = true; } #endif @@ -258,6 +265,8 @@ int filetype_get_icon(int attr) int index = find_attr(attr); if (index < 0) return Icon_NOICON; + if (custom_icons_loaded) + return custom_filetype_icons[index]; return filetypes[index].icon; } diff --git a/apps/gui/icon.c b/apps/gui/icon.c index b844b4bb5b..6e4cd59059 100644 --- a/apps/gui/icon.c +++ b/apps/gui/icon.c @@ -74,11 +74,11 @@ static const int default_height[NB_SCREENS] = { #define IMG_BUFSIZE (MAX_ICON_HEIGHT * MAX_ICON_WIDTH * \ Icon_Last_Themeable *LCD_DEPTH/8) -static unsigned char icon_buffer[IMG_BUFSIZE][NB_SCREENS]; +static unsigned char icon_buffer[NB_SCREENS][IMG_BUFSIZE]; static bool custom_icons_loaded[NB_SCREENS] = {false}; static struct bitmap user_iconset[NB_SCREENS]; -static unsigned char viewer_icon_buffer[IMG_BUFSIZE][NB_SCREENS]; +static unsigned char viewer_icon_buffer[NB_SCREENS][IMG_BUFSIZE]; static bool viewer_icons_loaded[NB_SCREENS] = {false}; static struct bitmap viewer_iconset[NB_SCREENS]; @@ -252,13 +252,15 @@ void icons_init(void) { snprintf(path, MAX_PATH, "%s/%s.bmp", ICON_DIR, global_settings.icon_file); - load_icons(path, Iconset_Mainscreen); + load_icons((global_settings.icon_file[0] == '-')?NULL:path, + Iconset_Mainscreen); } if (global_settings.viewers_icon_file[0]) { snprintf(path, MAX_PATH, "%s/%s.bmp", ICON_DIR, global_settings.viewers_icon_file); - load_icons(path, Iconset_Mainscreen_viewers); + load_icons((global_settings.viewers_icon_file[0] == '-')?NULL:path, + Iconset_Mainscreen_viewers); read_viewer_theme_file(); } else @@ -268,13 +270,15 @@ void icons_init(void) { snprintf(path, MAX_PATH, "%s/%s.bmp", ICON_DIR, global_settings.remote_icon_file); - load_icons(path, Iconset_Remotescreen); + load_icons((global_settings.remote_icon_file[0] == '-')?NULL:path, + Iconset_Remotescreen); } if (global_settings.remote_viewers_icon_file[0]) { snprintf(path, MAX_PATH, "%s/%s.bmp", ICON_DIR, global_settings.remote_viewers_icon_file); - load_icons(path, Iconset_Remotescreen_viewers); + load_icons((global_settings.remote_viewers_icon_file[0] == '-')?NULL:path, + Iconset_Remotescreen_viewers); } else load_icons(DEFAULT_REMOTE_VIEWER_BMP, Iconset_Remotescreen_viewers); diff --git a/apps/gui/icon.h b/apps/gui/icon.h index fa6919030f..8408ed46b0 100644 --- a/apps/gui/icon.h +++ b/apps/gui/icon.h @@ -24,15 +24,14 @@ * char-based displays and bitmap displays */ #ifdef HAVE_LCD_BITMAP typedef const unsigned char * ICON; -#define NOICON Icon_NOICON #else typedef long ICON; -#define NOICON Icon_NOICON #endif +#define NOICON Icon_NOICON #define FORCE_INBUILT_ICON 0x80000000 /* Don't #ifdef icon values, or we wont be able to use the same - cmp for every target. */ + bmp for every target. */ enum themable_icons { Icon_NOICON = -1, /* Dont put this in a .bmp */ Icon_Audio, diff --git a/apps/settings.h b/apps/settings.h index c27b6e602b..1fee6b4838 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -708,8 +708,10 @@ struct user_settings int alarm_wake_up_screen; #endif /* customizable icons */ +#ifdef HAVE_LCD_BITMAP unsigned char icon_file[MAX_FILENAME+1]; unsigned char viewers_icon_file[MAX_FILENAME+1]; +#endif #ifdef HAVE_REMOTE_LCD unsigned char remote_icon_file[MAX_FILENAME+1]; unsigned char remote_viewers_icon_file[MAX_FILENAME+1]; diff --git a/apps/settings_list.c b/apps/settings_list.c index 2ebce0ea77..ce45074f36 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -1167,13 +1167,13 @@ const struct settings_list settings[] = { ICON_DIR "/", ".bmp", MAX_FILENAME+1), FILENAME_SETTING(F_THEMESETTING, viewers_icon_file, "viewers iconset", "", ICON_DIR "/", ".bmp", MAX_FILENAME+1), +#endif #ifdef HAVE_REMOTE_LCD FILENAME_SETTING(F_THEMESETTING, remote_icon_file, "remote iconset", "", ICON_DIR "/", ".bmp", MAX_FILENAME+1), FILENAME_SETTING(F_THEMESETTING, remote_viewers_icon_file, "remote viewers iconset", "", ICON_DIR "/", ".bmp", MAX_FILENAME+1), -#endif #endif /* HAVE_REMOTE_LCD */ }; diff --git a/tools/buildzip.pl b/tools/buildzip.pl index 8e1ca3b98a..06523c3ae3 100755 --- a/tools/buildzip.pl +++ b/tools/buildzip.pl @@ -209,6 +209,23 @@ sub buildzip { mkdir ".rockbox/wps", 0777; mkdir ".rockbox/themes", 0777; + if ($bitmap) { + open(THEME, ">.rockbox/themes/rockbox_default_icons.cfg"); + print THEME <