diff --git a/examples/others/imgfont/lv_example_imgfont_1.c b/examples/others/imgfont/lv_example_imgfont_1.c index 1fa142fac..23d773945 100644 --- a/examples/others/imgfont/lv_example_imgfont_1.c +++ b/examples/others/imgfont/lv_example_imgfont_1.c @@ -22,7 +22,7 @@ static const void * get_imgfont_path(const lv_font_t * font, uint32_t unicode, u else if(unicode == 0xF600) { #if LV_USE_FFMPEG return "lvgl/examples/assets/emoji/F600.png"; -#elif LV_USE_LODEPNG +#else return "A:lvgl/examples/assets/emoji/F600.png"; #endif } diff --git a/src/draw/vg_lite/lv_draw_vg_lite_label.c b/src/draw/vg_lite/lv_draw_vg_lite_label.c index 927749246..1f180c267 100644 --- a/src/draw/vg_lite/lv_draw_vg_lite_label.c +++ b/src/draw/vg_lite/lv_draw_vg_lite_label.c @@ -43,8 +43,10 @@ static void draw_letter_cb(lv_draw_unit_t * draw_unit, lv_draw_glyph_dsc_t * gly static void draw_letter_bitmap(lv_draw_vg_lite_unit_t * u, const lv_draw_glyph_dsc_t * dsc); -static void freetype_outline_event_cb(lv_event_t * e); -static void draw_letter_outline(lv_draw_vg_lite_unit_t * u, const lv_draw_glyph_dsc_t * dsc); +#if LV_USE_FREETYPE + static void freetype_outline_event_cb(lv_event_t * e); + static void draw_letter_outline(lv_draw_vg_lite_unit_t * u, const lv_draw_glyph_dsc_t * dsc); +#endif /* LV_USE_FREETYPE */ /********************** * STATIC VARIABLES @@ -63,11 +65,13 @@ void lv_draw_vg_lite_label(lv_draw_unit_t * draw_unit, const lv_draw_label_dsc_t { if(dsc->opa <= LV_OPA_MIN) return; +#if LV_USE_FREETYPE static bool is_init = false; if(!is_init) { lv_freetype_outline_add_event(freetype_outline_event_cb, LV_EVENT_ALL, draw_unit); is_init = true; } +#endif /* LV_USE_FREETYPE */ lv_draw_label_iterate_characters(draw_unit, dsc, coords, draw_letter_cb); } @@ -81,26 +85,46 @@ static void draw_letter_cb(lv_draw_unit_t * draw_unit, lv_draw_glyph_dsc_t * gly { lv_draw_vg_lite_unit_t * u = (lv_draw_vg_lite_unit_t *)draw_unit; if(glyph_draw_dsc) { - if(glyph_draw_dsc->format == LV_DRAW_LETTER_BITMAP_FORMAT_INVALID) { + + switch(glyph_draw_dsc->format) { + case LV_DRAW_LETTER_BITMAP_FORMAT_A8: { + draw_letter_bitmap(u, glyph_draw_dsc); + } + break; + +#if LV_USE_FREETYPE + case LV_DRAW_LETTER_VECTOR_FORMAT: { + if(lv_freetype_is_outline_font(glyph_draw_dsc->g->resolved_font)) { + draw_letter_outline(u, glyph_draw_dsc); + } + } + break; +#endif /* LV_USE_FREETYPE */ + + case LV_DRAW_LETTER_BITMAP_FORMAT_IMAGE: { + lv_draw_image_dsc_t img_dsc; + lv_draw_image_dsc_init(&img_dsc); + img_dsc.opa = glyph_draw_dsc->opa; + img_dsc.src = glyph_draw_dsc->glyph_data; + lv_draw_vg_lite_img(draw_unit, &img_dsc, glyph_draw_dsc->letter_coords); + } + break; + #if LV_USE_FONT_PLACEHOLDER - /* Draw a placeholder rectangle*/ - lv_draw_border_dsc_t border_draw_dsc; - lv_draw_border_dsc_init(&border_draw_dsc); - border_draw_dsc.opa = glyph_draw_dsc->opa; - border_draw_dsc.color = glyph_draw_dsc->color; - border_draw_dsc.width = 1; - lv_draw_vg_lite_border(draw_unit, &border_draw_dsc, glyph_draw_dsc->bg_coords); -#endif - } - else if(glyph_draw_dsc->format == LV_DRAW_LETTER_BITMAP_FORMAT_A8 - || glyph_draw_dsc->format == LV_DRAW_LETTER_BITMAP_FORMAT_IMAGE - || glyph_draw_dsc->format == LV_DRAW_LETTER_VECTOR_FORMAT) { - if(lv_freetype_is_outline_font(glyph_draw_dsc->g->resolved_font)) { - draw_letter_outline(u, glyph_draw_dsc); - } - else { - draw_letter_bitmap(u, glyph_draw_dsc); - } + case LV_DRAW_LETTER_BITMAP_FORMAT_INVALID: { + /* Draw a placeholder rectangle*/ + lv_draw_border_dsc_t border_draw_dsc; + lv_draw_border_dsc_init(&border_draw_dsc); + border_draw_dsc.opa = glyph_draw_dsc->opa; + border_draw_dsc.color = glyph_draw_dsc->color; + border_draw_dsc.width = 1; + lv_draw_vg_lite_border(draw_unit, &border_draw_dsc, glyph_draw_dsc->bg_coords); + } + break; +#endif /* LV_USE_FONT_PLACEHOLDER */ + + default: + break; } } @@ -190,6 +214,8 @@ static void draw_letter_bitmap(lv_draw_vg_lite_unit_t * u, const lv_draw_glyph_d LV_VG_LITE_CHECK_ERROR(vg_lite_finish()); } +#if LV_USE_FREETYPE + static void draw_letter_outline(lv_draw_vg_lite_unit_t * u, const lv_draw_glyph_dsc_t * dsc) { /* get clip area */ @@ -300,4 +326,6 @@ static void freetype_outline_event_cb(lv_event_t * e) } } +#endif /* LV_USE_FREETYPE */ + #endif /*LV_USE_DRAW_VG_LITE*/ diff --git a/src/draw/vg_lite/lv_vg_lite_decoder.c b/src/draw/vg_lite/lv_vg_lite_decoder.c index 6e98efb24..69f66b82d 100644 --- a/src/draw/vg_lite/lv_vg_lite_decoder.c +++ b/src/draw/vg_lite/lv_vg_lite_decoder.c @@ -200,6 +200,7 @@ static lv_result_t decoder_open_variable(lv_image_decoder_t * decoder, lv_image_ /*In case of uncompressed formats the image stored in the ROM/RAM. *So simply give its pointer*/ const uint8_t * image_data = ((lv_image_dsc_t *)dsc->src)->data; + uint32_t image_data_size = ((lv_image_dsc_t *)dsc->src)->data_size; bool has_alpha = lv_color_format_has_alpha(cf); bool is_indexed = LV_COLOR_FORMAT_IS_INDEXED(cf); @@ -219,7 +220,7 @@ static lv_result_t decoder_open_variable(lv_image_decoder_t * decoder, lv_image_ lv_draw_buf_t * draw_buf = lv_malloc_zeroed(sizeof(lv_draw_buf_t)); LV_ASSERT_MALLOC(draw_buf); - lv_draw_buf_init(draw_buf, width, height, cf, stride, (void *)image_data, LV_VG_LITE_IMAGE_NO_CACHE); + lv_draw_buf_init(draw_buf, width, height, cf, stride, (void *)image_data, image_data_size); dsc->decoded = draw_buf; return LV_RESULT_OK; }