Index: apps/gui/skin_engine/skin_parser.c =================================================================== --- apps/gui/skin_engine/skin_parser.c (revision 26075) +++ apps/gui/skin_engine/skin_parser.c (working copy) @@ -730,7 +730,11 @@ if (img->num_subimages <= 0) return WPS_ERROR_INVALID_PARAM; } - struct skin_token_list *item = new_skin_token_list_item(NULL, img); + /* %xl is a WPS_NO_TOKEN so add it to the list and alloc a new token + * %x doesnt need that */ + + struct wps_token *out = (token->type != WPS_TOKEN_IMAGE_DISPLAY) ? NULL : token; + struct skin_token_list *item = new_skin_token_list_item(out, img); if (!item) return WPS_ERROR_INVALID_PARAM; add_to_ll_chain(&wps_data->images, item); Index: apps/gui/skin_engine/skin_tokens.c =================================================================== --- apps/gui/skin_engine/skin_tokens.c (revision 26078) +++ apps/gui/skin_engine/skin_tokens.c (working copy) @@ -594,10 +594,19 @@ return NULL; case WPS_TOKEN_ALBUMART_DISPLAY: - if (!data->albumart) - return NULL; - if (!data->albumart->draw) - data->albumart->draw = true; + if (data->albumart) + { + int handle = playback_current_aa_hid(data->playback_aa_slot); +#if CONFIG_TUNER + if (in_radio_screen()) + { + struct dim dim = {data->albumart->width, data->albumart->height}; + handle = radio_get_art_hid(&dim); + } +#endif + draw_album_art(gwps, handle, false); + data->albumart->draw = false; + } return NULL; #endif Index: apps/gui/skin_engine/skin_display.c =================================================================== --- apps/gui/skin_engine/skin_display.c (revision 26096) +++ apps/gui/skin_engine/skin_display.c (working copy) @@ -125,10 +125,9 @@ } static void draw_progressbar(struct gui_wps *gwps, - struct progressbar *pb) + struct progressbar *pb, struct viewport *vp) { struct screen *display = gwps->display; - struct viewport *vp = pb->vp; struct wps_state *state = gwps->state; struct mp3entry *id3 = state->id3; int y = pb->y, height = pb->height; @@ -414,52 +413,6 @@ #endif } -static void wps_display_images(struct gui_wps *gwps, struct viewport* vp) -{ - if(!gwps || !gwps->data || !gwps->display) - return; - - struct wps_data *data = gwps->data; - struct screen *display = gwps->display; - struct skin_token_list *list = data->images; - - while (list) - { - struct gui_img *img = (struct gui_img*)list->token->value.data; - if (img->loaded) - { - if (img->display >= 0) - { - wps_draw_image(gwps, img, img->display); - } - else if (img->always_display && img->vp == vp) - { - wps_draw_image(gwps, img, 0); - } - } - list = list->next; - } -#ifdef HAVE_ALBUMART - /* now draw the AA */ - if (data->albumart && data->albumart->vp == vp - && data->albumart->draw) - { - int handle = playback_current_aa_hid(data->playback_aa_slot); -#if CONFIG_TUNER - if (in_radio_screen()) - { - struct dim dim = {data->albumart->width, data->albumart->height}; - handle = radio_get_art_hid(&dim); - } -#endif - draw_album_art(gwps, handle, false); - data->albumart->draw = false; - } -#endif - - display->set_drawmode(DRMODE_SOLID); -} - #else /* HAVE_LCD_CHARCELL */ static bool draw_player_progress(struct gui_wps *gwps) @@ -766,9 +719,12 @@ struct gui_img *img = find_image(n, data); if (img && img->loaded) - img->display = subimage; + { + wps_draw_image(gwps, img, img->always_display ? 0 : subimage); + } break; } + case WPS_TOKEN_DRAW_INBUILTBAR: gui_statusbar_draw(&(statusbars.statusbars[gwps->display->screen_type]), refresh_mode == WPS_REFRESH_ALL, @@ -1211,16 +1167,6 @@ int hidden_vp = 0; -#ifdef HAVE_LCD_BITMAP - /* Set images to not to be displayed */ - struct skin_token_list *imglist = data->images; - while (imglist) - { - struct gui_img *img = (struct gui_img *)imglist->token->value.data; - img->display = -1; - imglist = imglist->next; - } -#endif /* dont redraw the viewport if its disabled */ if (skin_viewport->hidden_flags&VP_NEVER_VISIBLE) { /* don't draw anything into this one */ @@ -1337,14 +1283,11 @@ struct progressbar *thisbar = (struct progressbar*)bar->token->value.data; if (thisbar->vp == &skin_viewport->vp && thisbar->draw) { - draw_progressbar(gwps, thisbar); + draw_progressbar(gwps, thisbar, &skin_viewport->vp); } bar = bar->next; } } - /* Now display any images in this viewport */ - if (!hidden_vp) - wps_display_images(gwps, &skin_viewport->vp); #endif } Index: apps/gui/skin_engine/wps_internals.h =================================================================== --- apps/gui/skin_engine/wps_internals.h (revision 26075) +++ apps/gui/skin_engine/wps_internals.h (working copy) @@ -82,7 +82,6 @@ short int y; /* y-pos */ short int num_subimages; /* number of sub-images */ short int subimage_height; /* height of each sub-image */ - short int display; /* -1 for no display, 0..n to display a subimage */ struct bitmap bm; char label; bool loaded; /* load state */