lvlg V7 lv_canvas_flush函数的实现
时间: 2024-03-16 15:41:03 浏览: 13
LVGL V7中的 `lv_canvas_flush()` 函数的实现如下:
```c
void lv_canvas_flush(lv_obj_t * canvas, lv_coord_t x1, lv_coord_t y1, lv_coord_t x2, lv_coord_t y2)
{
LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
const lv_area_t * clip_area = lv_obj_get_clip_area(canvas);
lv_area_t common_area;
bool is_common;
/* Get the common part of the clip area and the invalidate area */
lv_area_set(&common_area, x1, y1, x2, y2);
is_common = lv_area_intersect(&common_area, &common_area, clip_area);
if(is_common == false) return;
/* Flush the buffer */
lv_disp_drv_t * disp_drv = _lv_refr_get_disp_refreshing();
lv_disp_flush_ready_t flush_ready;
lv_disp_flush_start(disp_drv, &common_area, &flush_ready);
if(flush_ready) {
lv_disp_flush_ready(disp_drv);
}
}
```
该函数的作用是将Canvas的修改内容刷新到屏幕上。
具体实现步骤如下:
1. 首先获取Canvas的裁剪区域,如果需要刷新的区域和裁剪区域没有交集,则直接返回。
2. 使用 `lv_disp_drv_t` 结构体中的 `flush_cb` 回调函数将Canvas的修改内容刷新到屏幕上。
3. 如果刷新操作完成,则调用 `lv_disp_flush_ready()` 函数通知LVGL框架可以继续进行其他操作。
需要注意的是,在执行 `lv_canvas_flush()` 函数之前,需要先使用 `lv_canvas_set_buffer()` 函数为Canvas设置像素缓存。同时,为了避免在刷新Canvas时出现闪烁的现象,建议在执行 `lv_canvas_clear()` 函数之后,再使用 `lv_canvas_flush()` 函数刷新画面。