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 LV_ATTRIBUTE_FAST_MEM void lv_draw_sw_img_decoded(struct _lv_draw_ctx_t * draw_ctx, const lv_draw_img_dsc_t * draw_dsc,
65                                                   const lv_area_t * coords, const uint8_t * src_buf, lv_img_cf_t cf);
66 
67 LV_ATTRIBUTE_FAST_MEM void lv_draw_sw_line(struct _lv_draw_ctx_t * draw_ctx, const lv_draw_line_dsc_t * dsc,
68                                            const lv_point_t * point1, const lv_point_t * point2);
69 
70 void lv_draw_sw_polygon(struct _lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * draw_dsc,
71                         const lv_point_t * points, uint16_t point_cnt);
72 
73 void lv_draw_sw_buffer_copy(lv_draw_ctx_t * draw_ctx,
74                             void * dest_buf, lv_coord_t dest_stride, const lv_area_t * dest_area,
75                             void * src_buf, lv_coord_t src_stride, const lv_area_t * src_area);
76 
77 void lv_draw_sw_transform(lv_draw_ctx_t * draw_ctx, const lv_area_t * dest_area, const void * src_buf,
78                           lv_coord_t src_w, lv_coord_t src_h, lv_coord_t src_stride,
79                           const lv_draw_img_dsc_t * draw_dsc, lv_img_cf_t cf, lv_color_t * cbuf, lv_opa_t * abuf);
80 
81 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,
82                                                       lv_draw_layer_flags_t flags);
83 
84 void lv_draw_sw_layer_adjust(struct _lv_draw_ctx_t * draw_ctx, struct _lv_draw_layer_ctx_t * layer_ctx,
85                              lv_draw_layer_flags_t flags);
86 
87 void lv_draw_sw_layer_blend(struct _lv_draw_ctx_t * draw_ctx, struct _lv_draw_layer_ctx_t * layer_ctx,
88                             const lv_draw_img_dsc_t * draw_dsc);
89 
90 void lv_draw_sw_layer_destroy(lv_draw_ctx_t * draw_ctx, lv_draw_layer_ctx_t * layer_ctx);
91 
92 /***********************
93  * GLOBAL VARIABLES
94  ***********************/
95 
96 /**********************
97  *      MACROS
98  **********************/
99 
100 #ifdef __cplusplus
101 } /*extern "C"*/
102 #endif
103 
104 #endif /*LV_DRAW_SW_H*/
105