* its name[rows][columns] you drongo!

* make custom viewer icons work slightly better
* minor nit-picks to keep crop happy
* create a /.rockbox/themes/default_rockbox_icons.cfg to restore the default icons easily


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13183 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jonathan Gordon 2007-04-16 14:33:29 +00:00
parent b6658bbeef
commit a9c1df4001
6 changed files with 44 additions and 13 deletions

View file

@ -63,6 +63,8 @@ struct file_type {
char* extension; /* NULL for none */ char* extension; /* NULL for none */
}; };
static struct file_type filetypes[MAX_FILETYPES]; 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 int filetype_count = 0;
static unsigned char heighest_attr = 0; static unsigned char heighest_attr = 0;
@ -81,6 +83,10 @@ void read_viewer_theme_file(void)
int fd; int fd;
char *ext, *icon; char *ext, *icon;
int i; int i;
custom_icons_loaded = false;
for (i=0; i<filetype_count; i++)
custom_filetype_icons[i] = Icon_Questionmark;
snprintf(buffer, MAX_PATH, "%s/%s.icons", ICON_DIR, snprintf(buffer, MAX_PATH, "%s/%s.icons", ICON_DIR,
global_settings.viewers_icon_file); global_settings.viewers_icon_file);
fd = open(buffer, O_RDONLY); fd = open(buffer, O_RDONLY);
@ -95,16 +101,17 @@ void read_viewer_theme_file(void)
if (filetypes[i].extension && !strcasecmp(ext, filetypes[i].extension)) if (filetypes[i].extension && !strcasecmp(ext, filetypes[i].extension))
{ {
if (*icon == '*') if (*icon == '*')
filetypes[i].icon = atoi(icon+1); custom_filetype_icons[i] = atoi(icon+1);
else if (*icon == '-') else if (*icon == '-')
filetypes[i].icon = Icon_NOICON; custom_filetype_icons[i] = Icon_NOICON;
else if (*icon >= '0' && *icon <= '9') else if (*icon >= '0' && *icon <= '9')
filetypes[i].icon = Icon_Last_Themeable + atoi(icon); custom_filetype_icons[i] = Icon_Last_Themeable + atoi(icon);
break; break;
} }
} }
} }
close(fd); close(fd);
custom_icons_loaded = true;
} }
#endif #endif
@ -258,6 +265,8 @@ int filetype_get_icon(int attr)
int index = find_attr(attr); int index = find_attr(attr);
if (index < 0) if (index < 0)
return Icon_NOICON; return Icon_NOICON;
if (custom_icons_loaded)
return custom_filetype_icons[index];
return filetypes[index].icon; return filetypes[index].icon;
} }

View file

@ -74,11 +74,11 @@ static const int default_height[NB_SCREENS] = {
#define IMG_BUFSIZE (MAX_ICON_HEIGHT * MAX_ICON_WIDTH * \ #define IMG_BUFSIZE (MAX_ICON_HEIGHT * MAX_ICON_WIDTH * \
Icon_Last_Themeable *LCD_DEPTH/8) 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 bool custom_icons_loaded[NB_SCREENS] = {false};
static struct bitmap user_iconset[NB_SCREENS]; 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 bool viewer_icons_loaded[NB_SCREENS] = {false};
static struct bitmap viewer_iconset[NB_SCREENS]; static struct bitmap viewer_iconset[NB_SCREENS];
@ -252,13 +252,15 @@ void icons_init(void)
{ {
snprintf(path, MAX_PATH, "%s/%s.bmp", snprintf(path, MAX_PATH, "%s/%s.bmp",
ICON_DIR, global_settings.icon_file); 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]) if (global_settings.viewers_icon_file[0])
{ {
snprintf(path, MAX_PATH, "%s/%s.bmp", snprintf(path, MAX_PATH, "%s/%s.bmp",
ICON_DIR, global_settings.viewers_icon_file); 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(); read_viewer_theme_file();
} }
else else
@ -268,13 +270,15 @@ void icons_init(void)
{ {
snprintf(path, MAX_PATH, "%s/%s.bmp", snprintf(path, MAX_PATH, "%s/%s.bmp",
ICON_DIR, global_settings.remote_icon_file); 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]) if (global_settings.remote_viewers_icon_file[0])
{ {
snprintf(path, MAX_PATH, "%s/%s.bmp", snprintf(path, MAX_PATH, "%s/%s.bmp",
ICON_DIR, global_settings.remote_viewers_icon_file); 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 else
load_icons(DEFAULT_REMOTE_VIEWER_BMP, Iconset_Remotescreen_viewers); load_icons(DEFAULT_REMOTE_VIEWER_BMP, Iconset_Remotescreen_viewers);

View file

@ -24,15 +24,14 @@
* char-based displays and bitmap displays */ * char-based displays and bitmap displays */
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
typedef const unsigned char * ICON; typedef const unsigned char * ICON;
#define NOICON Icon_NOICON
#else #else
typedef long ICON; typedef long ICON;
#define NOICON Icon_NOICON
#endif #endif
#define NOICON Icon_NOICON
#define FORCE_INBUILT_ICON 0x80000000 #define FORCE_INBUILT_ICON 0x80000000
/* Don't #ifdef icon values, or we wont be able to use the same /* 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 { enum themable_icons {
Icon_NOICON = -1, /* Dont put this in a .bmp */ Icon_NOICON = -1, /* Dont put this in a .bmp */
Icon_Audio, Icon_Audio,

View file

@ -708,8 +708,10 @@ struct user_settings
int alarm_wake_up_screen; int alarm_wake_up_screen;
#endif #endif
/* customizable icons */ /* customizable icons */
#ifdef HAVE_LCD_BITMAP
unsigned char icon_file[MAX_FILENAME+1]; unsigned char icon_file[MAX_FILENAME+1];
unsigned char viewers_icon_file[MAX_FILENAME+1]; unsigned char viewers_icon_file[MAX_FILENAME+1];
#endif
#ifdef HAVE_REMOTE_LCD #ifdef HAVE_REMOTE_LCD
unsigned char remote_icon_file[MAX_FILENAME+1]; unsigned char remote_icon_file[MAX_FILENAME+1];
unsigned char remote_viewers_icon_file[MAX_FILENAME+1]; unsigned char remote_viewers_icon_file[MAX_FILENAME+1];

View file

@ -1167,13 +1167,13 @@ const struct settings_list settings[] = {
ICON_DIR "/", ".bmp", MAX_FILENAME+1), ICON_DIR "/", ".bmp", MAX_FILENAME+1),
FILENAME_SETTING(F_THEMESETTING, viewers_icon_file, "viewers iconset", "", FILENAME_SETTING(F_THEMESETTING, viewers_icon_file, "viewers iconset", "",
ICON_DIR "/", ".bmp", MAX_FILENAME+1), ICON_DIR "/", ".bmp", MAX_FILENAME+1),
#endif
#ifdef HAVE_REMOTE_LCD #ifdef HAVE_REMOTE_LCD
FILENAME_SETTING(F_THEMESETTING, remote_icon_file, "remote iconset", "", FILENAME_SETTING(F_THEMESETTING, remote_icon_file, "remote iconset", "",
ICON_DIR "/", ".bmp", MAX_FILENAME+1), ICON_DIR "/", ".bmp", MAX_FILENAME+1),
FILENAME_SETTING(F_THEMESETTING, remote_viewers_icon_file, FILENAME_SETTING(F_THEMESETTING, remote_viewers_icon_file,
"remote viewers iconset", "", "remote viewers iconset", "",
ICON_DIR "/", ".bmp", MAX_FILENAME+1), ICON_DIR "/", ".bmp", MAX_FILENAME+1),
#endif
#endif /* HAVE_REMOTE_LCD */ #endif /* HAVE_REMOTE_LCD */
}; };

View file

@ -209,6 +209,23 @@ sub buildzip {
mkdir ".rockbox/wps", 0777; mkdir ".rockbox/wps", 0777;
mkdir ".rockbox/themes", 0777; mkdir ".rockbox/themes", 0777;
if ($bitmap) {
open(THEME, ">.rockbox/themes/rockbox_default_icons.cfg");
print THEME <<STOP
# this config file was auto-generated to make it
# easy to reset the icons back to default
iconset: -
# taken from apps/gui/icon.c
viewers iconset: /.rockbox/icons/viewers.bmp
remote iconset: -
# taken from apps/gui/icon.c
remote viewers iconset: /.rockbox/icons/remote_viewers.bmp
STOP
;
close(THEME);
}
mkdir ".rockbox/codepages", 0777; mkdir ".rockbox/codepages", 0777;
if($bitmap) { if($bitmap) {