1 /** 2 * @file lv_draw_label.h 3 * 4 */ 5 6 #ifndef LV_DRAW_LABEL_H 7 #define LV_DRAW_LABEL_H 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 13 /********************* 14 * INCLUDES 15 *********************/ 16 #include "../misc/lv_bidi.h" 17 #include "../misc/lv_txt.h" 18 #include "../misc/lv_color.h" 19 #include "../misc/lv_style.h" 20 21 /********************* 22 * DEFINES 23 *********************/ 24 #define LV_DRAW_LABEL_NO_TXT_SEL (0xFFFF) 25 26 /********************** 27 * TYPEDEFS 28 **********************/ 29 30 typedef struct { 31 const lv_font_t * font; 32 uint32_t sel_start; 33 uint32_t sel_end; 34 lv_color_t color; 35 lv_color_t sel_color; 36 lv_color_t sel_bg_color; 37 lv_coord_t line_space; 38 lv_coord_t letter_space; 39 lv_coord_t ofs_x; 40 lv_coord_t ofs_y; 41 lv_opa_t opa; 42 lv_base_dir_t bidi_dir; 43 lv_text_align_t align; 44 lv_text_flag_t flag; 45 lv_text_decor_t decor : 3; 46 lv_blend_mode_t blend_mode: 3; 47 } lv_draw_label_dsc_t; 48 49 /** Store some info to speed up drawing of very large texts 50 * It takes a lot of time to get the first visible character because 51 * all the previous characters needs to be checked to calculate the positions. 52 * This structure stores an earlier (e.g. at -1000 px) coordinate and the index of that line. 53 * Therefore the calculations can start from here.*/ 54 typedef struct _lv_draw_label_hint_t { 55 /** Index of the line at `y` coordinate*/ 56 int32_t line_start; 57 58 /** Give the `y` coordinate of the first letter at `line start` index. Relative to the label's coordinates*/ 59 int32_t y; 60 61 /** The 'y1' coordinate of the label when the hint was saved. 62 * Used to invalidate the hint if the label has moved too much.*/ 63 int32_t coord_y; 64 } lv_draw_label_hint_t; 65 66 struct _lv_draw_ctx_t; 67 /********************** 68 * GLOBAL PROTOTYPES 69 **********************/ 70 71 void /* LV_ATTRIBUTE_FAST_MEM */ lv_draw_label_dsc_init(lv_draw_label_dsc_t * dsc); 72 73 /** 74 * Write a text 75 * @param coords coordinates of the label 76 * @param mask the label will be drawn only in this area 77 * @param dsc pointer to draw descriptor 78 * @param txt `\0` terminated text to write 79 * @param hint pointer to a `lv_draw_label_hint_t` variable. 80 * It is managed by the draw to speed up the drawing of very long texts (thousands of lines). 81 */ 82 void /* LV_ATTRIBUTE_FAST_MEM */ lv_draw_label(struct _lv_draw_ctx_t * draw_ctx, const lv_draw_label_dsc_t * dsc, 83 const lv_area_t * coords, const char * txt, lv_draw_label_hint_t * hint); 84 85 void lv_draw_letter(struct _lv_draw_ctx_t * draw_ctx, const lv_draw_label_dsc_t * dsc, const lv_point_t * pos_p, 86 uint32_t letter); 87 88 /*********************** 89 * GLOBAL VARIABLES 90 ***********************/ 91 92 /********************** 93 * MACROS 94 **********************/ 95 96 #ifdef __cplusplus 97 } /*extern "C"*/ 98 #endif 99 100 #endif /*LV_DRAW_LABEL_H*/ 101