函数中主要调用lv_refr_join_area(),用于计算需要更新的区域,并剔除多控件重复覆盖的无意义刷新部分,接着调用lv_refr_areas()刷新之前计算的需要刷新的区域,该绘制函数调用路径为lv_refr_area->lv_refr_area_part-> lv_refr_vdb_flush ->(drv->flush_cb) ,flush_cb为最初注册的显示驱动的刷新回调函数。
而图形的绘制关键环节在于把频谱对象作为一个容器进行绘制(spectrum_draw_event_cb),绘图没有采用lvgl常规的使用预设的作图函数,而是采用底层的绘图方法。绘图实际发生在LV_EVENT_DRAW_POST(绘图结束后)事件,会对频谱对象进行绘制操作。整个过程中使用了绘制矩形(lv_draw_rect)、绘制线条(lv_draw_line)机制等。矩形图...
lv_obj_t * obj = lv_event_get_target(e); lv_draw_task_t * draw_task = lv_event_get_draw_task(e); lv_draw_dsc_base_t * base_dsc = draw_task->draw_dsc; if(base_dsc->part == LV_PART_MAIN) { lv_draw_rect_dsc_t draw_dsc; lv_draw_rect_dsc_init(&draw_dsc); draw_dsc...
lv_canvas_draw_line(canvas, point_array, point_cnt, &draw_dsc) lv_canvas_draw_polygon(canvas, points_array, point_cnt, &draw_dsc) lv_canvas_draw_arc(canvas, x, y, radius, start_angle, end_angle, &draw_dsc) 其中draw_dsc需要用这个函数进行初始化lv_draw_rect/label/img/line_dsc_init(...
绘图实际发生在LV_EVENT_DRAW_POST(绘图结束后)事件,会对频谱对象进行绘制操作。整个过程中使用了绘制矩形(lv_draw_rect)、绘制线条(lv_draw_line)机制等。矩形图代表瞬时的频谱强度,线条用于代表频谱峰值的滞后响应,由于线条的宽度是2 像素,所以看起来也是一个小长方体。它通过循环遍历一个大小为频谱分析结果数据...
整个过程中使用了绘制矩形(lv_draw_rect)、绘制线条(lv_draw_line)机制等。矩形图代表瞬时的频谱强度,线条用于代表频谱峰值的滞后响应,由于线条的宽度是2 像素,所以看起来也是一个小长方体。它通过循环遍历一个大小为频谱分析结果数据SAMPLE_SIZE的数组,绘制矩形和两条线条,其中bar_chart和bar_chart_peaks是用于...
I found that the code always gets stuck at lv_event_send(obj, LV_EVENT_DRAW_MAIN, draw_ctx), and ultimately, it gets stuck at lv_draw_sw_rect. The call process of lv_draw_sw_rect is as follows:The program stuck in vg_lite_finish() in the functi...
#include "../../lv_examples.h" #if LV_USE_CANVAS && LV_BUILD_EXAMPLES #define CANVAS_WIDTH 200 #define CANVAS_HEIGHT 150 void lv_example_canvas_1(void) { lv_draw_rect_dsc_t rect_dsc; lv_draw_rect_dsc_init(&rect_dsc); rect_dsc.radius = 10; rect_dsc.bg_opa = LV_OPA_COVER...
LV_ATTRIBUTE_FAST_MEMstaticvoiddraw_bg(constlv_area_t*coords,constlv_area_t*clip,constlv_draw_rect_dsc_t*dsc){。。。// mask数据准备,为每一行准备maskfor(h=draw_area.y1;h<=draw_area.y2;h++){int32_t y=h+vdb->area.y1;opa2=opa;/*In not corner areas apply the mask only if ...
lv_refr_area_part里面是绘图,lv_obj_event_base中的 base->event_cb(obj, e);就是lv_obj_event_cb函数,lv_obj_event_cb传入参数LV_EVENT_DRAW_MAIN则调用函数lv_obj_draw函数,包括lv_draw_rect,最后调用_lv_blend_fill->fill_normal->lv_color_fill里面填充区域。