mirror of
https://github.com/lvgl/lvgl.git
synced 2026-05-28 22:30:49 +08:00
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:
committed by
Gabor Kiss-Vamosi
parent
d0b59cba9b
commit
28eced31a7
@@ -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);
|
_lv_ll_remove(task_list, task);
|
||||||
|
|
||||||
if(cb) {
|
if(cb) {
|
||||||
cb(data ? data : NULL, task->path, &(task->dsc));
|
cb(data, task->path, &(task->dsc));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(task->path) {
|
if(task->path) {
|
||||||
|
|||||||
@@ -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;
|
void * buf = layer->buf;
|
||||||
int32_t width = lv_area_get_width(&layer->buf_area);
|
int32_t width = lv_area_get_width(&layer->buf_area);
|
||||||
int32_t height = lv_area_get_height(&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_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_ll_t * task_list = dsc->task_list;
|
||||||
_lv_vector_for_each_destroy_tasks(task_list, _task_draw_cb, canvas);
|
_lv_vector_for_each_destroy_tasks(task_list, _task_draw_cb, canvas);
|
||||||
|
|||||||
@@ -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 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_obj_t * canvas = lv_canvas_create(lv_screen_active());
|
||||||
lv_canvas_set_buffer(canvas, canvas_buf, 640, 480,
|
uint32_t stride = 640 * 4 + 128; /*Test non-default stride*/
|
||||||
LV_COLOR_FORMAT_ARGB8888);
|
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_layer_t layer;
|
||||||
lv_canvas_init_layer(canvas, &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);
|
lv_snprintf(fn_buf, sizeof(fn_buf), "draw/vector_%s.png", name);
|
||||||
TEST_ASSERT_EQUAL_SCREENSHOT(fn_buf);
|
TEST_ASSERT_EQUAL_SCREENSHOT(fn_buf);
|
||||||
#endif
|
#endif
|
||||||
|
lv_image_cache_drop(draw_buf);
|
||||||
|
lv_draw_buf_destroy(draw_buf);
|
||||||
|
lv_obj_del(canvas);
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_draw_lines(void)
|
void test_draw_lines(void)
|
||||||
|
|||||||
Reference in New Issue
Block a user