gui: skin_display: draw album art first

Some themes, such as Themify, FreshOS, iPod reFresh, Jive,
iPodOS, iPone, iClassic, AbsoluteBlack320, and possibly
others, draw a mask over the album art on the foreground
layer, in order to add rounded corners or to apply a fake
camera perspective (instead of taking advantage of the
backdrop layer).

This results in rendering glitches that can be fixed by
drawing the album art first.

Change-Id: Ie373c51304ab0d0a09b8663a8adff343a32ae5bb
This commit is contained in:
Christian Soffke 2026-05-26 02:19:24 +02:00
parent 0c8365a286
commit 2a29dedeb6

View file

@ -410,8 +410,17 @@ void wps_display_images(struct gui_wps *gwps, struct viewport* vp)
(void)vp;
struct wps_data *data = gwps->data;
struct screen *display = gwps->display;
struct skin_token_list *list = SKINOFFSETTOPTR(get_skin_buffer(data), data->images);
/* Start with album art, as it may be drawn over by mask images */
#ifdef HAVE_ALBUMART
struct skin_albumart *aa = SKINOFFSETTOPTR(get_skin_buffer(data), data->albumart);
if (aa && aa->draw_handle >= 0)
{
draw_album_art(gwps, aa->draw_handle, false);
aa->draw_handle = -1;
}
#endif
struct skin_token_list *list = SKINOFFSETTOPTR(get_skin_buffer(data), data->images);
while (list)
{
struct wps_token *token = SKINOFFSETTOPTR(get_skin_buffer(data), list->token);
@ -433,15 +442,6 @@ void wps_display_images(struct gui_wps *gwps, struct viewport* vp)
}
list = SKINOFFSETTOPTR(get_skin_buffer(data), list->next);
}
#ifdef HAVE_ALBUMART
/* now draw the AA */
struct skin_albumart *aa = SKINOFFSETTOPTR(get_skin_buffer(data), data->albumart);
if (aa && aa->draw_handle >= 0)
{
draw_album_art(gwps, aa->draw_handle, false);
aa->draw_handle = -1;
}
#endif
display->set_drawmode(DRMODE_SOLID);
}