From f16a92ae9c5523b965d51b4d1dea540075b023eb Mon Sep 17 00:00:00 2001 From: VIFEX Date: Fri, 14 Jun 2024 01:21:08 +0800 Subject: [PATCH] feat(vg_lite): add image clip corner support (#6121) Signed-off-by: pengyiqiang Co-authored-by: pengyiqiang --- src/draw/lv_draw_image.h | 3 ++ src/draw/vg_lite/lv_draw_vg_lite_img.c | 32 ++++++++++++++---- src/widgets/image/lv_image.c | 3 ++ .../ref_imgs/widgets/image_clip_radius_10.png | Bin 0 -> 8716 bytes .../widgets/image_clip_radius_circle.png | Bin 0 -> 8716 bytes .../widgets/image_clip_radius_10.png | Bin 0 -> 9100 bytes .../widgets/image_clip_radius_circle.png | Bin 0 -> 9241 bytes tests/src/test_cases/widgets/test_image.c | 14 ++++++++ 8 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 tests/ref_imgs/widgets/image_clip_radius_10.png create mode 100644 tests/ref_imgs/widgets/image_clip_radius_circle.png create mode 100644 tests/ref_imgs_vg_lite/widgets/image_clip_radius_10.png create mode 100644 tests/ref_imgs_vg_lite/widgets/image_clip_radius_circle.png diff --git a/src/draw/lv_draw_image.h b/src/draw/lv_draw_image.h index 0a63f3ea3..a11e1dacd 100644 --- a/src/draw/lv_draw_image.h +++ b/src/draw/lv_draw_image.h @@ -65,6 +65,9 @@ typedef struct _lv_draw_image_dsc_t { * 2. Tiled images, where the target draw area is larger than the image to be tiled. */ lv_area_t image_area; + + int32_t clip_radius; + const lv_image_dsc_t * bitmap_mask_src; } lv_draw_image_dsc_t; diff --git a/src/draw/vg_lite/lv_draw_vg_lite_img.c b/src/draw/vg_lite/lv_draw_vg_lite_img.c index 809909dc0..8f58369bc 100644 --- a/src/draw/vg_lite/lv_draw_vg_lite_img.c +++ b/src/draw/vg_lite/lv_draw_vg_lite_img.c @@ -99,7 +99,7 @@ void lv_draw_vg_lite_img(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t * LV_VG_LITE_ASSERT_DEST_BUFFER(&u->target_buffer); /* If clipping is not required, blit directly */ - if(_lv_area_is_in(&image_tf_area, draw_unit->clip_area, false)) { + if(_lv_area_is_in(&image_tf_area, draw_unit->clip_area, false) && dsc->clip_radius <= 0) { /* The image area is the coordinates relative to the image itself */ lv_area_t src_area = *coords; lv_area_move(&src_area, -coords->x1, -coords->y1); @@ -121,11 +121,31 @@ void lv_draw_vg_lite_img(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t * } else { lv_vg_lite_path_t * path = lv_vg_lite_path_get(u, VG_LITE_FP32); - lv_vg_lite_path_append_rect( - path, - clip_area.x1, clip_area.y1, - lv_area_get_width(&clip_area), lv_area_get_height(&clip_area), - 0, 0); + + if(dsc->clip_radius) { + int32_t width = lv_area_get_width(coords); + int32_t height = lv_area_get_height(coords); + float r_short = LV_MIN(width, height) / 2.0f; + float radius = LV_MIN(dsc->clip_radius, r_short); + + /** + * When clip_radius is enabled, the clipping edges + * are aligned with the image edges + */ + lv_vg_lite_path_append_rect( + path, + coords->x1, coords->y1, + width, height, + radius, radius); + } + else { + lv_vg_lite_path_append_rect( + path, + clip_area.x1, clip_area.y1, + lv_area_get_width(&clip_area), lv_area_get_height(&clip_area), + 0, 0); + } + lv_vg_lite_path_set_bonding_box_area(path, &clip_area); lv_vg_lite_path_end(path); diff --git a/src/widgets/image/lv_image.c b/src/widgets/image/lv_image.c index 9bd93d2b7..24ebf71f6 100644 --- a/src/widgets/image/lv_image.c +++ b/src/widgets/image/lv_image.c @@ -749,6 +749,9 @@ static void draw_image(lv_event_t * e) obj->coords.y1, obj->coords.x1 + img->w - 1, obj->coords.y1 + img->h - 1); + + draw_dsc.clip_radius = lv_obj_get_style_radius(obj, LV_PART_MAIN); + lv_area_t coords; if(img->align < _LV_IMAGE_ALIGN_AUTO_TRANSFORM) { lv_area_align(&obj->coords, &draw_dsc.image_area, img->align, img->offset.x, img->offset.y); diff --git a/tests/ref_imgs/widgets/image_clip_radius_10.png b/tests/ref_imgs/widgets/image_clip_radius_10.png new file mode 100644 index 0000000000000000000000000000000000000000..e6688217aa30a1e55b0f3697c9ed990b6e14a16d GIT binary patch literal 8716 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 B{N?}v literal 0 HcmV?d00001 diff --git a/tests/ref_imgs/widgets/image_clip_radius_circle.png b/tests/ref_imgs/widgets/image_clip_radius_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..e6688217aa30a1e55b0f3697c9ed990b6e14a16d GIT binary patch literal 8716 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 B{N?}v literal 0 HcmV?d00001 diff --git a/tests/ref_imgs_vg_lite/widgets/image_clip_radius_10.png b/tests/ref_imgs_vg_lite/widgets/image_clip_radius_10.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb05987d66004e3cdf69ab969c691ff9c098866 GIT binary patch literal 9100 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