From ff8d43ddad6e26f14218c212503c551f5a7d6b26 Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Sat, 14 Aug 2010 11:40:20 +0000 Subject: Change %xl/%xd to use proper labels instead of single letter labels. i.e %xl(playmode, playmode.bmp, 0, 0, 4) ... %xd(playmode, %mm). You can of course still use one letter labels if you really want. %xd(Aa) will only work with one letter labels. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27813 a1c6a512-1295-4272-9138-f99709370657 --- apps/gui/skin_engine/skin_parser.c | 21 ++++++++++++--------- apps/gui/skin_engine/skin_render.c | 4 ++-- apps/gui/skin_engine/wps_internals.h | 8 ++++---- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 90c5938e23..8bc7edf9c3 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c @@ -116,13 +116,13 @@ static void add_to_ll_chain(struct skin_token_list **list, struct skin_token_lis } /* traverse the image linked-list for an image */ -struct gui_img* find_image(char label, struct wps_data *data) +struct gui_img* find_image(const char *label, struct wps_data *data) { struct skin_token_list *list = data->images; while (list) { struct gui_img *img = (struct gui_img *)list->token->value.data; - if (img->label == label) + if (!strcmp(img->label,label)) return img; list = list->next; } @@ -132,7 +132,7 @@ struct gui_img* find_image(char label, struct wps_data *data) #endif /* traverse the viewport linked list for a viewport */ -struct skin_viewport* find_viewport(char *label, bool uivp, struct wps_data *data) +struct skin_viewport* find_viewport(const char *label, bool uivp, struct wps_data *data) { struct skin_element *list = data->tree; while (list) @@ -227,18 +227,21 @@ static int parse_image_display(struct skin_element *element, struct wps_token *token, struct wps_data *wps_data) { - char *text = element->params[0].data.text; - char label = text[0]; - char sublabel = text[1]; + char *label = element->params[0].data.text; + char sublabel = label[1]; int subimage; struct gui_img *img; struct image_display *id = skin_buffer_alloc(sizeof(struct image_display)); + if (element->params_count == 1) + { + /* backwards compatability. Allow %xd(Aa) to still work */ + label[1] = '\0'; + } /* sanity check */ img = find_image(label, wps_data); if (!img || !id) { - token->value.i = label; /* so debug works */ return WPS_ERROR_INVALID_PARAM; } id->label = label; @@ -297,7 +300,7 @@ static int parse_image_load(struct skin_element *element, y = element->params[3].data.number; /* check the image number and load state */ - if(find_image(*id, wps_data)) + if(find_image(id, wps_data)) { /* Invalid image ID */ return WPS_ERROR_INVALID_PARAM; @@ -307,7 +310,7 @@ static int parse_image_load(struct skin_element *element, return WPS_ERROR_INVALID_PARAM; /* save a pointer to the filename */ img->bm.data = (char*)filename; - img->label = *id; + img->label = id; img->x = x; img->y = y; img->num_subimages = 1; diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c index 47cc9c8ad0..3cc506b800 100644 --- a/apps/gui/skin_engine/skin_render.c +++ b/apps/gui/skin_engine/skin_render.c @@ -146,8 +146,8 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info, case SKIN_TOKEN_IMAGE_PRELOAD_DISPLAY: { struct image_display *id = token->value.data; - char n = id->label; - struct gui_img *img = find_image(n, data); + const char* label = id->label; + struct gui_img *img = find_image(label, data); if (img && img->loaded) { if (id->token == NULL) diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h index d42977ff19..e1516bd8fd 100644 --- a/apps/gui/skin_engine/wps_internals.h +++ b/apps/gui/skin_engine/wps_internals.h @@ -77,7 +77,7 @@ struct gui_img { short int num_subimages; /* number of sub-images */ short int subimage_height; /* height of each sub-image */ struct bitmap bm; - char label; + const char *label; bool loaded; /* load state */ bool always_display; /* not using the preload/display mechanism */ int display; @@ -85,7 +85,7 @@ struct gui_img { }; struct image_display { - char label; + const char *label; int subimage; struct wps_token *token; /* the token to get the subimage number from */ int offset; /* offset into the bitmap strip to start */ @@ -348,8 +348,8 @@ const char *get_radio_token(struct wps_token *token, int preset_offset, char *buf, int buf_size, int limit, int *intval); #endif -struct gui_img* find_image(char label, struct wps_data *data); -struct skin_viewport* find_viewport(char *label, bool uivp, struct wps_data *data); +struct gui_img* find_image(const char *label, struct wps_data *data); +struct skin_viewport* find_viewport(const char *label, bool uivp, struct wps_data *data); #ifdef SIMULATOR -- cgit v1.2.3