Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
- index 53ceb7e..dc1611d 100644
- --- a/apps/gui/skin_engine/skin_parser.c
- +++ b/apps/gui/skin_engine/skin_parser.c
- @@ -1057,6 +1057,7 @@ static int parse_albumart_load(struct skin_element* element,
- aa->vp = PTRTOSKINOFFSET(skin_buffer, &curr_vp->vp);
- aa->draw_handle = -1;
- + aa->alpha_data_handle = -1;
- /* if we got here, we parsed everything ok .. ! */
- if (aa->width < 0)
- @@ -1127,6 +1128,24 @@ static int parse_albumart_load(struct skin_element* element,
- }
- return 0;
- }
- +static int parse_albumart_display(struct skin_element* element,
- + struct wps_token *token,
- + struct wps_data *wps_data)
- +{
- + struct skin_albumart *aa = SKINOFFSETTOPTR(skin_buffer, wps_data->albumart);
- + size_t alpha_size;
- + if (!aa)
- + return -1;
- + alpha_size = aa->width * aa->height / 2;
- + aa->alpha_data_handle = core_alloc("aa alpha", alpha_size);
- + if (aa->alpha_data_handle >= 0)
- + {
- + int alpha_val = get_param(element, 0)->data.number * 16 / 100;
- + alpha_val |= (alpha_val << 4);
- + memset(core_get_data(aa->alpha_data_handle), alpha_val, alpha_size);
- + }
- + return 0;
- +}
- #endif /* HAVE_ALBUMART */
- #ifdef HAVE_SKIN_VARIABLES
- @@ -2050,6 +2069,7 @@ static int skin_element_callback(struct skin_element* element, void* data)
- {
- struct skin_albumart *aa = SKINOFFSETTOPTR(skin_buffer, wps_data->albumart);
- aa->vp = PTRTOSKINOFFSET(skin_buffer, &curr_vp->vp);
- + function = parse_albumart_display;
- }
- break;
- case SKIN_TOKEN_ALBUMART_LOAD:
- diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h
- index 60b9163..00d9d21 100644
- --- a/apps/gui/skin_engine/wps_internals.h
- +++ b/apps/gui/skin_engine/wps_internals.h
- @@ -251,6 +251,7 @@ struct skin_albumart {
- OFFSETTYPE(struct viewport *) vp;
- int draw_handle;
- + int alpha_data_handle;
- };
- #endif
- diff --git a/apps/recorder/albumart.c b/apps/recorder/albumart.c
- index 4cbabbc..4413763 100644
- --- a/apps/recorder/albumart.c
- +++ b/apps/recorder/albumart.c
- @@ -346,10 +346,17 @@ void draw_album_art(struct gui_wps *gwps, int handle_id, bool clear)
- if (!clear)
- {
- /* Draw the bitmap */
- - gwps->display->bitmap_part((fb_data*)bmp->data, 0, 0,
- - STRIDE(gwps->display->screen_type,
- - bmp->width, bmp->height),
- - x, y, width, height);
- + if (aa->alpha_data_handle >= 0)
- + {
- + bmp->alpha_offset = core_get_data(aa->alpha_data_handle) - (void*)bmp->data;
- + bmp->format |= FORMAT_TRANSPARENT;
- + }
- + gwps->display->bmp_part(bmp, 0, 0, x, y, width, height);
- + if (aa->alpha_data_handle >= 0)
- + {
- + bmp->alpha_offset = 0;
- + bmp->format &= ~FORMAT_TRANSPARENT;
- + }
- #ifdef HAVE_LCD_INVERT
- if (global_settings.invert) {
- gwps->display->set_drawmode(DRMODE_COMPLEMENT);
- diff --git a/firmware/drivers/lcd-16bit-common.c b/firmware/drivers/lcd-16bit-common.c
- index 47f5968..ffe0d11 100644
- --- a/firmware/drivers/lcd-16bit-common.c
- +++ b/firmware/drivers/lcd-16bit-common.c
- @@ -575,7 +575,7 @@ void ICODE_ATTR lcd_bmp_part(const struct bitmap* bm, int src_x, int src_y,
- int bitmap_stride = STRIDE_MAIN(bm->width, bm->height);
- if (bm->format == FORMAT_MONO)
- lcd_mono_bitmap_part(bm->data, src_x, src_y, bitmap_stride, x, y, width, height);
- - else if (bm->alpha_offset > 0)
- + else if (bm->alpha_offset != 0)
- lcd_alpha_bitmap_part_mix((fb_data*)bm->data, bm->data+bm->alpha_offset,
- src_x, src_y, x, y, width, height,
- bitmap_stride, ALIGN_UP(bm->width, 2));
- diff --git a/lib/skin_parser/tag_table.c b/lib/skin_parser/tag_table.c
- index a5db475..648d02e 100644
- --- a/lib/skin_parser/tag_table.c
- +++ b/lib/skin_parser/tag_table.c
- @@ -180,7 +180,7 @@ static const struct tag_info legal_tags[] =
- { SKIN_TOKEN_LOAD_FONT, "Fl" , "IF|I", 0|NOBREAK },
- { SKIN_TOKEN_ALBUMART_LOAD, "Cl" , "IIII|ss", 0|NOBREAK },
- - { SKIN_TOKEN_ALBUMART_DISPLAY, "Cd" , "", SKIN_REFRESH_STATIC },
- + { SKIN_TOKEN_ALBUMART_DISPLAY, "Cd" , "|I", SKIN_REFRESH_STATIC },
- { SKIN_TOKEN_ALBUMART_FOUND, "C" , "", SKIN_REFRESH_STATIC },
- { SKIN_TOKEN_VIEWPORT_ENABLE, "Vd" , "S", SKIN_REFRESH_STATIC },
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement