1 /**
2  * @file lv_draw_sw.h
3  *
4  */
5 
6 #ifndef LV_DRAW_SW_H
7 #define LV_DRAW_SW_H
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 /*********************
14  *      INCLUDES
15  *********************/
16 #include "lv_draw_sw_blend.h"
17 #include "../lv_draw.h"
18 #include "../../misc/lv_area.h"
19 #include "../../misc/lv_color.h"
20 #include "../../hal/lv_hal_disp.h"
21 
22 /*********************
23  *      DEFINES
24  *********************/
25 
26 /**********************
27  *      TYPEDEFS
28  **********************/
29 
30 struct _lv_disp_drv_t;
31 
32 typedef struct {
33     lv_draw_ctx_t base_draw;
34 
35     /** Fill an area of the destination buffer with a color*/
36     void (*blend)(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend_dsc_t * dsc);
37 } lv_draw_sw_ctx_t;
38 
39 typedef struct {
40     lv_draw_layer_ctx_t base_draw;
41 
42     uint32_t buf_size_bytes: 31;
43     uint32_t has_alpha : 1;
44 } lv_draw_sw_layer_ctx_t;
45 
46 /**********************
47  * GLOBAL PROTOTYPES
48  **********************/
49 
50 void lv_draw_sw_init_ctx(struct _lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx);
51 void lv_draw_sw_deinit_ctx(struct _lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx);
52 
53 void lv_draw_sw_wait_for_finish(lv_draw_ctx_t * draw_ctx);
54 
55 void lv_draw_sw_arc(lv_draw_ctx_t * draw_ctx, const lv_draw_arc_dsc_t * dsc, const lv_point_t * center, uint16_t radius,
56                     uint16_t start_angle, uint16_t end_angle);
57 
58 void lv_draw_sw_rect(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc, const lv_area_t * coords);
59 
60 void lv_draw_sw_bg(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc, const lv_area_t * coords);
61 void lv_draw_sw_letter(lv_draw_ctx_t * draw_ctx, const lv_draw_label_dsc_t * dsc, const lv_point_t * pos_p,
62                        uint32_t letter);
63 
64 void /* LV_ATTRIBUTE_FAST_MEM */ lv_draw_sw_img_decoded(struct _lv_draw_ctx_t * draw_ctx,
65                                                         const lv_draw_img_dsc_t * draw_dsc,
66                                                         const lv_area_t * coords, const uint8_t * src_buf,
67                                                         lv_img_cf_t cf);
68 
69 void /* LV_ATTRIBUTE_FAST_MEM */ lv_draw_sw_line(struct _lv_draw_ctx_t * draw_ctx, const lv_draw_line_dsc_t * dsc,
70                                                  const lv_point_t * point1, const lv_point_t * point2);
71 
72 void lv_draw_sw_polygon(struct _lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * draw_dsc,
73                         const lv_point_t * points, uint16_t point_cnt);
74 
75 void lv_draw_sw_buffer_copy(lv_draw_ctx_t * draw_ctx,
76                             void * dest_buf, lv_coord_t dest_stride, const lv_area_t * dest_area,
77                             void * src_buf, lv_coord_t src_stride, const lv_area_t * src_area);
78 
79 void lv_draw_sw_transform(lv_draw_ctx_t * draw_ctx, const lv_area_t * dest_area, const void * src_buf,
80                           lv_coord_t src_w, lv_coord_t src_h, lv_coord_t src_stride,
81                           const lv_draw_img_dsc_t * draw_dsc, lv_img_cf_t cf, lv_color_t * cbuf, lv_opa_t * abuf);
82 
83 struct _lv_draw_layer_ctx_t * lv_draw_sw_layer_create(struct _lv_draw_ctx_t * draw_ctx, lv_draw_layer_ctx_t * layer_ctx,
84                                                       lv_draw_layer_flags_t flags);
85 
86 void lv_draw_sw_layer_adjust(struct _lv_draw_ctx_t * draw_ctx, struct _lv_draw_layer_ctx_t * layer_ctx,
87                              lv_draw_layer_flags_t flags);
88 
89 void lv_draw_sw_layer_blend(struct _lv_draw_ctx_t * draw_ctx, struct _lv_draw_layer_ctx_t * layer_ctx,
90                             const lv_draw_img_dsc_t * draw_dsc);
91 
92 void lv_draw_sw_layer_destroy(lv_draw_ctx_t * draw_ctx, lv_draw_layer_ctx_t * layer_ctx);
93 
94 /***********************
95  * GLOBAL VARIABLES
96  ***********************/
97 
98 /**********************
99  *      MACROS
100  **********************/
101 
102 #ifdef __cplusplus
103 } /*extern "C"*/
104 #endif
105 
106 #endif /*LV_DRAW_SW_H*/
107