From a31624e76e45230aa9f94b16709f86e0042bad91 Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Sun, 21 Feb 2010 19:29:33 +0000 Subject: Fix the mechanism to fail to parse skins if images fail to load and fix having no backdrop at all (neither %X nor backdrop setting, DancePuffDuo was broken). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24814 a1c6a512-1295-4272-9138-f99709370657 --- apps/gui/skin_engine/skin_backdrops.c | 5 +++-- apps/gui/skin_engine/skin_parser.c | 17 +++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/apps/gui/skin_engine/skin_backdrops.c b/apps/gui/skin_engine/skin_backdrops.c index b057935241..0a89553cd8 100644 --- a/apps/gui/skin_engine/skin_backdrops.c +++ b/apps/gui/skin_engine/skin_backdrops.c @@ -62,7 +62,7 @@ char* skin_backdrop_load(char* backdrop, char *bmpdir, enum screen_type screen) else #endif buf_size = LCD_BACKDROP_BYTES; - + if (backdrop[0] == '-') { #if NB_SCREENS > 1 @@ -73,7 +73,8 @@ char* skin_backdrop_load(char* backdrop, char *bmpdir, enum screen_type screen) else #endif { - if (!global_settings.backdrop_file[0]) + char settings_bdrop = global_settings.backdrop_file[0]; + if (settings_bdrop == '\0' || settings_bdrop == '-') { return NULL; /* backdrop setting not set */ } diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 414da44581..4363a293c8 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c @@ -1986,7 +1986,6 @@ static void skin_data_reset(struct wps_data *wps_data) static bool load_skin_bmp(struct wps_data *wps_data, struct bitmap *bitmap, char* bmpdir) { (void)wps_data; /* only needed for remote targets */ - bool loaded = false; char img_path[MAX_PATH]; get_image_filename(bitmap->data, bmpdir, img_path, sizeof(img_path)); @@ -2008,19 +2007,19 @@ static bool load_skin_bmp(struct wps_data *wps_data, struct bitmap *bitmap, char if (ret > 0) { skin_buffer_increment(ret, true); - loaded = true; + return true; } else { /* Abort if we can't load an image */ - loaded = false; + return false; } - return loaded; } static bool load_skin_bitmaps(struct wps_data *wps_data, char *bmpdir) { struct skin_token_list *list; + bool retval = true; /* return false if a single image failed to load */ /* do the progressbars */ list = wps_data->progressbars; while (list) @@ -2029,6 +2028,8 @@ static bool load_skin_bitmaps(struct wps_data *wps_data, char *bmpdir) if (pb->bm.data) { pb->have_bitmap_pb = load_skin_bmp(wps_data, &pb->bm, bmpdir); + if (!pb->have_bitmap_pb) /* no success */ + retval = false; } list = list->next; } @@ -2042,6 +2043,8 @@ static bool load_skin_bitmaps(struct wps_data *wps_data, char *bmpdir) img->loaded = load_skin_bmp(wps_data, &img->bm, bmpdir); if (img->loaded) img->subimage_height = img->bm.height / img->num_subimages; + else + retval = false; } list = list->next; } @@ -2053,13 +2056,15 @@ static bool load_skin_bitmaps(struct wps_data *wps_data, char *bmpdir) */ if (wps_data->backdrop) { + bool needed = wps_data->backdrop[0] != '-'; wps_data->backdrop = skin_backdrop_load(wps_data->backdrop, bmpdir, curr_screen); + if (!wps_data->backdrop && needed) + retval = false; } #endif /* has backdrop support */ - /* If we got here, everything was OK */ - return true; + return retval; } #endif /* HAVE_LCD_BITMAP */ -- cgit v1.2.3