diff options
author | Teruaki Kawashima <teru@rockbox.org> | 2010-10-25 12:18:21 +0000 |
---|---|---|
committer | Teruaki Kawashima <teru@rockbox.org> | 2010-10-25 12:18:21 +0000 |
commit | 0952848368e403f81541e222f941ec46b0e583a4 (patch) | |
tree | 366bb0b3a471f403049a224ea8222fa4f040ad5e /apps | |
parent | 462f012d179baa382e7983b479c08b9ad73659af (diff) |
reduce ramusage slightly.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28355 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/gui/icon.c | 63 |
1 files changed, 27 insertions, 36 deletions
diff --git a/apps/gui/icon.c b/apps/gui/icon.c index b0e1ba9ce0..d12447b79a 100644 --- a/apps/gui/icon.c +++ b/apps/gui/icon.c @@ -52,25 +52,19 @@ /* We dont actually do anything with these pointers, but they need to be grouped like this to save code so storing them as void* is ok. (stops compile warning) */ -static const void * inbuilt_icons[NB_SCREENS] = { - (void*)default_icons -#if defined(HAVE_REMOTE_LCD) && (NB_SCREENS > 1) - , (void*)remote_default_icons -#endif -}; - -static const int default_width[NB_SCREENS] = { - BMPWIDTH_default_icons -#if defined(HAVE_REMOTE_LCD) && (NB_SCREENS > 1) - , BMPWIDTH_remote_default_icons -#endif -}; - -/* height of whole file */ -static const int default_height[NB_SCREENS] = { - BMPHEIGHT_default_icons +static const struct bitmap inbuilt_iconset[NB_SCREENS] = +{ + { + .width = BMPWIDTH_default_icons, + .height = BMPHEIGHT_default_icons, + .data = (unsigned char*)default_icons, + }, #if defined(HAVE_REMOTE_LCD) && (NB_SCREENS > 1) - , BMPHEIGHT_remote_default_icons + { + .width = BMPWIDTH_remote_default_icons, + .height = BMPHEIGHT_remote_default_icons, + .data = (unsigned char*)remote_default_icons, + }, #endif }; @@ -86,14 +80,12 @@ static struct bitmap viewer_iconset[NB_SCREENS]; #define ICON_HEIGHT(screen) (!custom_icons_loaded[screen]? \ - default_height[screen] : \ - user_iconset[screen].height) \ + inbuilt_iconset : user_iconset)[screen].height \ / Icon_Last_Themeable - + #define ICON_WIDTH(screen) (!custom_icons_loaded[screen]? \ - default_width[screen] : \ - user_iconset[screen].width) - + inbuilt_iconset : user_iconset)[screen].width + /* x,y in letters, not pixles */ void screen_put_icon(struct screen * display, int x, int y, enum themable_icons icon) @@ -105,15 +97,17 @@ void screen_put_icon_with_offset(struct screen * display, int x, int y, int off_x, int off_y, enum themable_icons icon) { + const int screen = display->screen_type; + const int icon_width = ICON_WIDTH(screen); + const int icon_height = ICON_HEIGHT(screen); int xpos, ypos; int width, height; - int screen = display->screen_type; display->getstringsize((unsigned char *)"M", &width, &height); - xpos = x*ICON_WIDTH(screen) + off_x; + xpos = x*icon_width + off_x; ypos = y*height + off_y; - if ( height > ICON_HEIGHT(screen) )/* center the cursor */ - ypos += (height - ICON_HEIGHT(screen)) / 2; + if ( height > icon_height )/* center the cursor */ + ypos += (height - icon_height) / 2; screen_put_iconxy(display, xpos, ypos, icon); } @@ -148,21 +142,18 @@ void screen_put_iconxy(struct screen * display, screen_put_iconxy(display, xpos, ypos, Icon_Questionmark); return; } - data = iconset->data; - stride = STRIDE(display->screen_type, iconset->width, iconset->height); } else if (custom_icons_loaded[screen]) { iconset = &user_iconset[screen]; - data = iconset->data; - stride = STRIDE(display->screen_type, iconset->width, iconset->height); } else { - data = inbuilt_icons[screen]; - stride = STRIDE( display->screen_type, BMPWIDTH_default_icons, - BMPHEIGHT_default_icons); + iconset = &inbuilt_iconset[screen]; } + data = iconset->data; + stride = STRIDE(display->screen_type, iconset->width, iconset->height); + /* add some left padding to the icons if they are on the edge */ if (xpos == 0) xpos++; @@ -187,8 +178,8 @@ void screen_put_cursorxy(struct screen * display, int x, int y, bool on) #else screen_put_icon(display, x, y, on?CURSOR_CHAR:-1); #endif - } + enum Iconset { Iconset_Mainscreen, Iconset_Mainscreen_viewers, |