fix(vector): use layer stride for thorvg canvas stride

ThorVG supports only ARGB8888, so added check.
Update test to use non-regular stride.

Signed-off-by: Xu Xingliang <xuxingliang@xiaomi.com>
This commit is contained in:
Xu Xingliang
2024-01-02 14:06:53 +00:00
committed by Gabor Kiss-Vamosi
parent d0b59cba9b
commit 28eced31a7
3 changed files with 11 additions and 5 deletions
+1 -1
View File
@@ -735,7 +735,7 @@ void _lv_vector_for_each_destroy_tasks(lv_ll_t * task_list, vector_draw_task_cb
_lv_ll_remove(task_list, task);
if(cb) {
cb(data ? data : NULL, task->path, &(task->dsc));
cb(data, task->path, &(task->dsc));
}
if(task->path) {
+3 -1
View File
@@ -439,8 +439,10 @@ void lv_draw_sw_vector(lv_draw_unit_t * draw_unit, const lv_draw_vector_task_dsc
void * buf = layer->buf;
int32_t width = lv_area_get_width(&layer->buf_area);
int32_t height = lv_area_get_height(&layer->buf_area);
uint32_t stride = layer->buf_stride;
stride /= 4;
Tvg_Canvas * canvas = tvg_swcanvas_create();
tvg_swcanvas_set_target(canvas, buf, width, width, height, TVG_COLORSPACE_ARGB8888);
tvg_swcanvas_set_target(canvas, buf, stride, width, height, TVG_COLORSPACE_ARGB8888);
lv_ll_t * task_list = dsc->task_list;
_lv_vector_for_each_destroy_tasks(task_list, _task_draw_cb, canvas);
+7 -3
View File
@@ -202,10 +202,11 @@ static void draw_lines(lv_layer_t * layer)
static void canvas_draw(const char * name, void (*draw_cb)(lv_layer_t *))
{
static uint8_t canvas_buf[LV_CANVAS_BUF_SIZE(640, 480, 32, LV_DRAW_BUF_STRIDE_ALIGN)];
lv_obj_t * canvas = lv_canvas_create(lv_screen_active());
lv_canvas_set_buffer(canvas, canvas_buf, 640, 480,
LV_COLOR_FORMAT_ARGB8888);
uint32_t stride = 640 * 4 + 128; /*Test non-default stride*/
lv_draw_buf_t * draw_buf = lv_draw_buf_create(640, 480, LV_COLOR_FORMAT_ARGB8888, stride);
TEST_ASSERT_NOT_NULL(draw_buf);
lv_canvas_set_draw_buf(canvas, draw_buf);
lv_layer_t layer;
lv_canvas_init_layer(canvas, &layer);
@@ -219,6 +220,9 @@ static void canvas_draw(const char * name, void (*draw_cb)(lv_layer_t *))
lv_snprintf(fn_buf, sizeof(fn_buf), "draw/vector_%s.png", name);
TEST_ASSERT_EQUAL_SCREENSHOT(fn_buf);
#endif
lv_image_cache_drop(draw_buf);
lv_draw_buf_destroy(draw_buf);
lv_obj_del(canvas);
}
void test_draw_lines(void)