1 #include "../lv_examples.h"
2 
3 #if LV_BUILD_EXAMPLES
4 
5 static uint32_t size = 0;
6 static bool size_dec = false;
7 
timer_cb(lv_timer_t * timer)8 static void timer_cb(lv_timer_t * timer)
9 {
10     lv_obj_invalidate(lv_timer_get_user_data(timer));
11     if(size_dec) size--;
12     else size++;
13 
14     if(size == 50) size_dec = true;
15     else if(size == 0) size_dec = false;
16 }
17 
event_cb(lv_event_t * e)18 static void event_cb(lv_event_t * e)
19 {
20     lv_obj_t * obj = lv_event_get_target(e);
21     lv_draw_task_t * draw_task = lv_event_get_draw_task(e);
22     lv_draw_dsc_base_t * base_dsc = lv_draw_task_get_draw_dsc(draw_task);
23     if(base_dsc->part == LV_PART_MAIN) {
24         lv_draw_rect_dsc_t draw_dsc;
25         lv_draw_rect_dsc_init(&draw_dsc);
26         draw_dsc.bg_color = lv_color_hex(0xffaaaa);
27         draw_dsc.radius = LV_RADIUS_CIRCLE;
28         draw_dsc.border_color = lv_color_hex(0xff5555);
29         draw_dsc.border_width = 2;
30         draw_dsc.outline_color = lv_color_hex(0xff0000);
31         draw_dsc.outline_pad = 3;
32         draw_dsc.outline_width = 2;
33 
34         lv_area_t a;
35         a.x1 = 0;
36         a.y1 = 0;
37         a.x2 = size;
38         a.y2 = size;
39         lv_area_t obj_coords;
40         lv_obj_get_coords(obj, &obj_coords);
41         lv_area_align(&obj_coords, &a, LV_ALIGN_CENTER, 0, 0);
42 
43         lv_draw_rect(base_dsc->layer, &draw_dsc, &a);
44     }
45 }
46 
47 /**
48  * Demonstrate the usage of draw event
49  */
lv_example_event_draw(void)50 void lv_example_event_draw(void)
51 {
52     lv_obj_t * cont = lv_obj_create(lv_screen_active());
53     lv_obj_set_size(cont, 200, 200);
54     lv_obj_center(cont);
55     lv_obj_add_event_cb(cont, event_cb, LV_EVENT_DRAW_TASK_ADDED, NULL);
56     lv_obj_add_flag(cont, LV_OBJ_FLAG_SEND_DRAW_TASK_EVENTS);
57     lv_timer_create(timer_cb, 30, cont);
58 }
59 
60 #endif
61