mirror of
https://github.com/lvgl/lvgl.git
synced 2026-02-06 06:02:10 +08:00
fix(canvas): add the missing D-Cache flush (#8736)
Signed-off-by: FASTSHIFT <vifextech@foxmail.com>
This commit is contained in:
@@ -821,6 +821,12 @@ static void blend_mode_cb(lv_obj_t * parent)
|
||||
LV_DRAW_BUF_DEFINE_STATIC(buf_argb8888, 36, 30, LV_COLOR_FORMAT_ARGB8888);
|
||||
LV_DRAW_BUF_DEFINE_STATIC(buf_argb8888_premul, 36, 30, LV_COLOR_FORMAT_ARGB8888_PREMULTIPLIED);
|
||||
|
||||
LV_DRAW_BUF_INIT_STATIC(buf_rgb565);
|
||||
LV_DRAW_BUF_INIT_STATIC(buf_rgb888);
|
||||
LV_DRAW_BUF_INIT_STATIC(buf_xrgb8888);
|
||||
LV_DRAW_BUF_INIT_STATIC(buf_argb8888);
|
||||
LV_DRAW_BUF_INIT_STATIC(buf_argb8888_premul);
|
||||
|
||||
/*The canvas will stay in the top left corner to show the original image*/
|
||||
lv_obj_t * canvas = lv_canvas_create(lv_screen_active());
|
||||
|
||||
|
||||
@@ -92,6 +92,11 @@ void lv_canvas_set_draw_buf(lv_obj_t * obj, lv_draw_buf_t * draw_buf)
|
||||
LV_ASSERT_OBJ(obj, MY_CLASS);
|
||||
LV_ASSERT_NULL(draw_buf);
|
||||
|
||||
if(!draw_buf->handlers) {
|
||||
LV_LOG_ERROR("draw_buf has no handlers, maybe not initialized");
|
||||
return;
|
||||
}
|
||||
|
||||
lv_canvas_t * canvas = (lv_canvas_t *)obj;
|
||||
canvas->draw_buf = draw_buf;
|
||||
|
||||
@@ -365,6 +370,7 @@ void lv_canvas_fill_bg(lv_obj_t * obj, lv_color_t color, lv_opa_t opa)
|
||||
}
|
||||
}
|
||||
|
||||
lv_draw_buf_flush_cache(canvas->draw_buf, NULL);
|
||||
lv_obj_invalidate(obj);
|
||||
}
|
||||
|
||||
|
||||
@@ -46,10 +46,21 @@ void test_canvas_functions_invalidate(void)
|
||||
TEST_ASSERT(draw_counter == 0);
|
||||
|
||||
LV_DRAW_BUF_DEFINE_STATIC(draw_buf, 100, 100, LV_COLOR_FORMAT_NATIVE);
|
||||
|
||||
/* test uninitialized draw buffer, it should fail.*/
|
||||
lv_canvas_set_draw_buf(canvas, &draw_buf);
|
||||
TEST_ASSERT_NULL(lv_canvas_get_draw_buf(canvas));
|
||||
TEST_ASSERT_NULL(lv_canvas_get_image(canvas));
|
||||
TEST_ASSERT_NULL(lv_canvas_get_buf(canvas));
|
||||
|
||||
LV_DRAW_BUF_INIT_STATIC(draw_buf);
|
||||
canvas_draw_buf_reshape(&draw_buf);
|
||||
|
||||
lv_canvas_set_draw_buf(canvas, &draw_buf);
|
||||
TEST_ASSERT_EQUAL_PTR(lv_canvas_get_draw_buf(canvas), &draw_buf);
|
||||
TEST_ASSERT_EQUAL_PTR(lv_canvas_get_image(canvas), &draw_buf);
|
||||
TEST_ASSERT_EQUAL_PTR(lv_canvas_get_buf(canvas), draw_buf.unaligned_data);
|
||||
|
||||
lv_refr_now(NULL);
|
||||
TEST_ASSERT(draw_counter == 1);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user