acid-drop

- Hacking the planet from a LilyGo T-Deck using custom firmware
git clone git://git.acid.vegas/acid-drop.git
Log | Files | Refs | Archive | README | LICENSE

lv_label.h (8431B)

      1 /**
      2  * @file lv_label.h
      3  *
      4  */
      5 
      6 #ifndef LV_LABEL_H
      7 #define LV_LABEL_H
      8 
      9 #ifdef __cplusplus
     10 extern "C" {
     11 #endif
     12 
     13 /*********************
     14  *      INCLUDES
     15  *********************/
     16 #include "../lv_conf_internal.h"
     17 
     18 #if LV_USE_LABEL != 0
     19 
     20 #include <stdarg.h>
     21 #include "../core/lv_obj.h"
     22 #include "../font/lv_font.h"
     23 #include "../font/lv_symbol_def.h"
     24 #include "../misc/lv_txt.h"
     25 #include "../draw/lv_draw.h"
     26 
     27 /*********************
     28  *      DEFINES
     29  *********************/
     30 #define LV_LABEL_WAIT_CHAR_COUNT        3
     31 #define LV_LABEL_DOT_NUM 3
     32 #define LV_LABEL_POS_LAST 0xFFFF
     33 #define LV_LABEL_TEXT_SELECTION_OFF LV_DRAW_LABEL_NO_TXT_SEL
     34 
     35 LV_EXPORT_CONST_INT(LV_LABEL_DOT_NUM);
     36 LV_EXPORT_CONST_INT(LV_LABEL_POS_LAST);
     37 LV_EXPORT_CONST_INT(LV_LABEL_TEXT_SELECTION_OFF);
     38 
     39 /**********************
     40  *      TYPEDEFS
     41  **********************/
     42 
     43 /** Long mode behaviors. Used in 'lv_label_ext_t'*/
     44 enum {
     45     LV_LABEL_LONG_WRAP,             /**< Keep the object width, wrap the too long lines and expand the object height*/
     46     LV_LABEL_LONG_DOT,              /**< Keep the size and write dots at the end if the text is too long*/
     47     LV_LABEL_LONG_SCROLL,           /**< Keep the size and roll the text back and forth*/
     48     LV_LABEL_LONG_SCROLL_CIRCULAR,  /**< Keep the size and roll the text circularly*/
     49     LV_LABEL_LONG_CLIP,             /**< Keep the size and clip the text out of it*/
     50 };
     51 typedef uint8_t lv_label_long_mode_t;
     52 
     53 typedef struct {
     54     lv_obj_t obj;
     55     char * text;
     56     union {
     57         char * tmp_ptr; /*Pointer to the allocated memory containing the character replaced by dots*/
     58         char tmp[LV_LABEL_DOT_NUM + 1]; /*Directly store the characters if <=4 characters*/
     59     } dot;
     60     uint32_t dot_end;  /*The real text length, used in dot mode*/
     61 
     62 #if LV_LABEL_LONG_TXT_HINT
     63     lv_draw_label_hint_t hint;
     64 #endif
     65 
     66 #if LV_LABEL_TEXT_SELECTION
     67     uint32_t sel_start;
     68     uint32_t sel_end;
     69 #endif
     70 
     71     lv_point_t offset; /*Text draw position offset*/
     72     lv_label_long_mode_t long_mode : 3; /*Determine what to do with the long texts*/
     73     uint8_t static_txt : 1;             /*Flag to indicate the text is static*/
     74     uint8_t recolor : 1;                /*Enable in-line letter re-coloring*/
     75     uint8_t expand : 1;                 /*Ignore real width (used by the library with LV_LABEL_LONG_SCROLL)*/
     76     uint8_t dot_tmp_alloc : 1;         /*1: dot is allocated, 0: dot directly holds up to 4 chars*/
     77 } lv_label_t;
     78 
     79 extern const lv_obj_class_t lv_label_class;
     80 
     81 /**********************
     82  * GLOBAL PROTOTYPES
     83  **********************/
     84 
     85 /**
     86  * Create a label object
     87  * @param parent    pointer to an object, it will be the parent of the new label.
     88  * @return          pointer to the created button
     89  */
     90 lv_obj_t * lv_label_create(lv_obj_t * parent);
     91 
     92 /*=====================
     93  * Setter functions
     94  *====================*/
     95 
     96 /**
     97  * Set a new text for a label. Memory will be allocated to store the text by the label.
     98  * @param obj           pointer to a label object
     99  * @param text          '\0' terminated character string. NULL to refresh with the current text.
    100  */
    101 void lv_label_set_text(lv_obj_t * obj, const char * text);
    102 
    103 /**
    104  * Set a new formatted text for a label. Memory will be allocated to store the text by the label.
    105  * @param obj           pointer to a label object
    106  * @param fmt           `printf`-like format
    107  * @example lv_label_set_text_fmt(label1, "%d user", user_num);
    108  */
    109 void lv_label_set_text_fmt(lv_obj_t * obj, const char * fmt, ...) LV_FORMAT_ATTRIBUTE(2, 3);
    110 
    111 /**
    112  * Set a static text. It will not be saved by the label so the 'text' variable
    113  * has to be 'alive' while the label exists.
    114  * @param obj           pointer to a label object
    115  * @param text          pointer to a text. NULL to refresh with the current text.
    116  */
    117 void lv_label_set_text_static(lv_obj_t * obj, const char * text);
    118 
    119 /**
    120  * Set the behavior of the label with longer text then the object size
    121  * @param obj           pointer to a label object
    122  * @param long_mode     the new mode from 'lv_label_long_mode' enum.
    123  *                      In LV_LONG_WRAP/DOT/SCROLL/SCROLL_CIRC the size of the label should be set AFTER this function
    124  */
    125 void lv_label_set_long_mode(lv_obj_t * obj, lv_label_long_mode_t long_mode);
    126 
    127 /**
    128  * Enable the recoloring by in-line commands
    129  * @param obj           pointer to a label object
    130  * @param en            true: enable recoloring, false: disable
    131  * @example "This is a #ff0000 red# word"
    132  */
    133 void lv_label_set_recolor(lv_obj_t * obj, bool en);
    134 
    135 /**
    136  * Set where text selection should start
    137  * @param obj       pointer to a label object
    138  * @param index     character index from where selection should start. `LV_LABEL_TEXT_SELECTION_OFF` for no selection
    139  */
    140 void lv_label_set_text_sel_start(lv_obj_t * obj, uint32_t index);
    141 
    142 /**
    143  * Set where text selection should end
    144  * @param obj       pointer to a label object
    145  * @param index     character index where selection should end. `LV_LABEL_TEXT_SELECTION_OFF` for no selection
    146  */
    147 void lv_label_set_text_sel_end(lv_obj_t * obj, uint32_t index);
    148 
    149 /*=====================
    150  * Getter functions
    151  *====================*/
    152 
    153 /**
    154  * Get the text of a label
    155  * @param obj       pointer to a label object
    156  * @return          the text of the label
    157  */
    158 char * lv_label_get_text(const lv_obj_t * obj);
    159 
    160 /**
    161  * Get the long mode of a label
    162  * @param obj       pointer to a label object
    163  * @return          the current long mode
    164  */
    165 lv_label_long_mode_t lv_label_get_long_mode(const lv_obj_t * obj);
    166 
    167 /**
    168  * Get the recoloring attribute
    169  * @param obj       pointer to a label object
    170  * @return          true: recoloring is enabled, false: disable
    171  */
    172 bool lv_label_get_recolor(const lv_obj_t * obj);
    173 
    174 /**
    175  * Get the relative x and y coordinates of a letter
    176  * @param obj       pointer to a label object
    177  * @param index     index of the character [0 ... text length - 1].
    178  *                  Expressed in character index, not byte index (different in UTF-8)
    179  * @param pos       store the result here (E.g. index = 0 gives 0;0 coordinates if the text if aligned to the left)
    180  */
    181 void lv_label_get_letter_pos(const lv_obj_t * obj, uint32_t char_id, lv_point_t * pos);
    182 
    183 /**
    184  * Get the index of letter on a relative point of a label.
    185  * @param obj       pointer to label object
    186  * @param pos       pointer to point with coordinates on a the label
    187  * @return          The index of the letter on the 'pos_p' point (E.g. on 0;0 is the 0. letter if aligned to the left)
    188  *                  Expressed in character index and not byte index (different in UTF-8)
    189  */
    190 uint32_t lv_label_get_letter_on(const lv_obj_t * obj, lv_point_t * pos_in);
    191 
    192 /**
    193  * Check if a character is drawn under a point.
    194  * @param obj       pointer to a label object
    195  * @param pos       Point to check for character under
    196  * @return          whether a character is drawn under the point
    197  */
    198 bool lv_label_is_char_under_pos(const lv_obj_t * obj, lv_point_t * pos);
    199 
    200 /**
    201  * @brief Get the selection start index.
    202  * @param obj       pointer to a label object.
    203  * @return          selection start index. `LV_LABEL_TEXT_SELECTION_OFF` if nothing is selected.
    204  */
    205 uint32_t lv_label_get_text_selection_start(const lv_obj_t * obj);
    206 
    207 /**
    208  * @brief Get the selection end index.
    209  * @param obj       pointer to a label object.
    210  * @return          selection end index. `LV_LABEL_TXT_SEL_OFF` if nothing is selected.
    211  */
    212 uint32_t lv_label_get_text_selection_end(const lv_obj_t * obj);
    213 
    214 /*=====================
    215  * Other functions
    216  *====================*/
    217 
    218 /**
    219  * Insert a text to a label. The label text can not be static.
    220  * @param obj       pointer to a label object
    221  * @param pos       character index to insert. Expressed in character index and not byte index.
    222  *                  0: before first char. LV_LABEL_POS_LAST: after last char.
    223  * @param txt       pointer to the text to insert
    224  */
    225 void lv_label_ins_text(lv_obj_t * obj, uint32_t pos, const char * txt);
    226 
    227 /**
    228  * Delete characters from a label. The label text can not be static.
    229  * @param obj       pointer to a label object
    230  * @param pos       character index from where to cut. Expressed in character index and not byte index.
    231  *                  0: start in from of the first character
    232  * @param cnt       number of characters to cut
    233  */
    234 void lv_label_cut_text(lv_obj_t * obj, uint32_t pos, uint32_t cnt);
    235 
    236 /**********************
    237  *      MACROS
    238  **********************/
    239 
    240 #endif /*LV_USE_LABEL*/
    241 
    242 #ifdef __cplusplus
    243 } /*extern "C"*/
    244 #endif
    245 
    246 #endif /*LV_LABEL_H*/