1 /**
2  * @file lv_draw_triangle.c
3  *
4  */
5 
6 /*********************
7  *      INCLUDES
8  *********************/
9 
10 #include "lv_draw_triangle_private.h"
11 #include "lv_draw_private.h"
12 #include "../core/lv_obj.h"
13 #include "../misc/lv_math.h"
14 #include "../stdlib/lv_mem.h"
15 #include "../stdlib/lv_string.h"
16 
17 /*********************
18  *      DEFINES
19  *********************/
20 
21 /**********************
22  *      TYPEDEFS
23  **********************/
24 
25 /**********************
26  *  STATIC PROTOTYPES
27  **********************/
28 
29 /**********************
30  *  STATIC VARIABLES
31  **********************/
32 
33 /**********************
34  *      MACROS
35  **********************/
36 
37 /**********************
38  *   GLOBAL FUNCTIONS
39  **********************/
40 
lv_draw_triangle_dsc_init(lv_draw_triangle_dsc_t * dsc)41 void lv_draw_triangle_dsc_init(lv_draw_triangle_dsc_t * dsc)
42 {
43     LV_PROFILER_DRAW_BEGIN;
44     lv_memzero(dsc, sizeof(lv_draw_triangle_dsc_t));
45     dsc->bg_color = lv_color_white();
46     dsc->bg_grad.stops[0].color = lv_color_white();
47     dsc->bg_grad.stops[1].color = lv_color_black();
48     dsc->bg_grad.stops[1].frac = 0xFF;
49     dsc->bg_grad.stops_count = 2;
50     dsc->bg_opa = LV_OPA_COVER;
51     dsc->base.dsc_size = sizeof(lv_draw_triangle_dsc_t);
52     LV_PROFILER_DRAW_END;
53 }
54 
lv_draw_task_get_triangle_dsc(lv_draw_task_t * task)55 lv_draw_triangle_dsc_t * lv_draw_task_get_triangle_dsc(lv_draw_task_t * task)
56 {
57     return task->type == LV_DRAW_TASK_TYPE_TRIANGLE ? (lv_draw_triangle_dsc_t *)task->draw_dsc : NULL;
58 }
59 
lv_draw_triangle(lv_layer_t * layer,const lv_draw_triangle_dsc_t * dsc)60 void lv_draw_triangle(lv_layer_t * layer, const lv_draw_triangle_dsc_t * dsc)
61 {
62     if(dsc->bg_opa <= LV_OPA_MIN) return;
63 
64     LV_PROFILER_DRAW_BEGIN;
65 
66     lv_area_t a;
67     a.x1 = (int32_t)LV_MIN3(dsc->p[0].x, dsc->p[1].x, dsc->p[2].x);
68     a.y1 = (int32_t)LV_MIN3(dsc->p[0].y, dsc->p[1].y, dsc->p[2].y);
69     a.x2 = (int32_t)LV_MAX3(dsc->p[0].x, dsc->p[1].x, dsc->p[2].x);
70     a.y2 = (int32_t)LV_MAX3(dsc->p[0].y, dsc->p[1].y, dsc->p[2].y);
71 
72     lv_draw_task_t * t = lv_draw_add_task(layer, &a);
73 
74     t->draw_dsc = lv_malloc(sizeof(*dsc));
75     LV_ASSERT_MALLOC(t->draw_dsc);
76     lv_memcpy(t->draw_dsc, dsc, sizeof(*dsc));
77     t->type = LV_DRAW_TASK_TYPE_TRIANGLE;
78 
79     lv_draw_finalize_task_creation(layer, t);
80     LV_PROFILER_DRAW_END;
81 }
82 
83 /**********************
84  *   STATIC FUNCTIONS
85  **********************/
86