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