231 lines
6.0 KiB
C
231 lines
6.0 KiB
C
/**
|
|
* @file lv_span.h
|
|
*
|
|
*/
|
|
|
|
#ifndef LV_SPAN_H
|
|
#define LV_SPAN_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*********************
|
|
* INCLUDES
|
|
*********************/
|
|
#include "lvgl.h"
|
|
|
|
#if LV_USE_SPAN != 0
|
|
|
|
/*********************
|
|
* DEFINES
|
|
*********************/
|
|
#ifndef LV_SPAN_SNIPPET_STACK_SIZE
|
|
#define LV_SPAN_SNIPPET_STACK_SIZE 64
|
|
#endif
|
|
|
|
/**********************
|
|
* TYPEDEFS
|
|
**********************/
|
|
enum {
|
|
LV_SPAN_OVERFLOW_CLIP,
|
|
LV_SPAN_OVERFLOW_ELLIPSIS,
|
|
};
|
|
typedef uint8_t lv_span_overflow_t;
|
|
|
|
enum {
|
|
LV_SPAN_MODE_FIXED, /**< fixed the obj size*/
|
|
LV_SPAN_MODE_EXPAND, /**< Expand the object size to the text size*/
|
|
LV_SPAN_MODE_BREAK, /**< Keep width, break the too long lines and expand height*/
|
|
};
|
|
typedef uint8_t lv_span_mode_t;
|
|
|
|
typedef struct {
|
|
char * txt; /* a pointer to display text */
|
|
lv_obj_t * spangroup; /* a pointer to spangroup */
|
|
lv_style_t style; /* display text style */
|
|
uint8_t static_flag : 1;/* the text is static flag */
|
|
} lv_span_t;
|
|
|
|
/** Data of label*/
|
|
typedef struct {
|
|
lv_obj_t obj;
|
|
lv_coord_t indent; /* first line indent */
|
|
lv_coord_t cache_w; /* the cache automatically calculates the width */
|
|
lv_coord_t cache_h; /* similar cache_w */
|
|
lv_ll_t child_ll;
|
|
uint8_t mode : 2; /* details see lv_span_mode_t */
|
|
uint8_t overflow : 1; /* details see lv_span_overflow_t */
|
|
uint8_t refresh : 1; /* the spangroup need refresh cache_w and cache_h */
|
|
} lv_spangroup_t;
|
|
|
|
extern const lv_obj_class_t lv_spangroup_class;
|
|
|
|
/**********************
|
|
* GLOBAL PROTOTYPES
|
|
**********************/
|
|
|
|
/**
|
|
* Create a spangroup object
|
|
* @param par pointer to an object, it will be the parent of the new spangroup
|
|
* @return pointer to the created spangroup
|
|
*/
|
|
lv_obj_t * lv_spangroup_create(lv_obj_t * par);
|
|
|
|
/**
|
|
* Create a span string descriptor and add to spangroup.
|
|
* @param obj pointer to a spangroup object.
|
|
* @return pointer to the created span.
|
|
*/
|
|
lv_span_t * lv_spangroup_new_span(lv_obj_t * obj);
|
|
|
|
/**
|
|
* Remove the span from the spangroup and free memory.
|
|
* @param obj pointer to a spangroup object.
|
|
* @param span pointer to a span.
|
|
*/
|
|
void lv_spangroup_del_span(lv_obj_t * obj, lv_span_t * span);
|
|
|
|
/*=====================
|
|
* Setter functions
|
|
*====================*/
|
|
|
|
/**
|
|
* Set a new text for a span. Memory will be allocated to store the text by the span.
|
|
* @param span pointer to a span.
|
|
* @param text pointer to a text.
|
|
*/
|
|
void lv_span_set_text(lv_span_t * span, const char * text);
|
|
|
|
/**
|
|
* Set a static text. It will not be saved by the span so the 'text' variable
|
|
* has to be 'alive' while the span exist.
|
|
* @param span pointer to a span.
|
|
* @param text pointer to a text.
|
|
*/
|
|
void lv_span_set_text_static(lv_span_t * span, const char * text);
|
|
|
|
/**
|
|
* Set the align of the spangroup.
|
|
* @param obj pointer to a spangroup object.
|
|
* @param align see lv_text_align_t for details.
|
|
*/
|
|
void lv_spangroup_set_align(lv_obj_t * obj, lv_text_align_t align);
|
|
|
|
/**
|
|
* Set the overflow of the spangroup.
|
|
* @param obj pointer to a spangroup object.
|
|
* @param overflow see lv_span_overflow_t for details.
|
|
*/
|
|
void lv_spangroup_set_overflow(lv_obj_t * obj, lv_span_overflow_t overflow);
|
|
|
|
/**
|
|
* Set the indent of the spangroup.
|
|
* @param obj pointer to a spangroup object.
|
|
* @param indent The first line indentation
|
|
*/
|
|
void lv_spangroup_set_indent(lv_obj_t * obj, lv_coord_t indent);
|
|
|
|
/**
|
|
* Set the mode of the spangroup.
|
|
* @param obj pointer to a spangroup object.
|
|
* @param mode see lv_span_mode_t for details.
|
|
*/
|
|
void lv_spangroup_set_mode(lv_obj_t * obj, lv_span_mode_t mode);
|
|
|
|
/*=====================
|
|
* Getter functions
|
|
*====================*/
|
|
|
|
/**
|
|
* Get a spangroup child by its index.
|
|
*
|
|
* @param obj The spangroup object
|
|
* @param id the index of the child.
|
|
* 0: the oldest (firstly created) child
|
|
* 1: the second oldest
|
|
* child count-1: the youngest
|
|
* -1: the youngest
|
|
* -2: the second youngest
|
|
* @return The child span at index `id`, or NULL if the ID does not exist
|
|
*/
|
|
lv_span_t * lv_spangroup_get_child(const lv_obj_t * obj, int32_t id);
|
|
|
|
/**
|
|
*
|
|
* @param obj The spangroup object to get the child count of.
|
|
* @return The span count of the spangroup.
|
|
*/
|
|
uint32_t lv_spangroup_get_child_cnt(const lv_obj_t * obj);
|
|
|
|
/**
|
|
* get the align of the spangroup.
|
|
* @param obj pointer to a spangroup object.
|
|
* @return the align value.
|
|
*/
|
|
lv_text_align_t lv_spangroup_get_align(lv_obj_t * obj);
|
|
|
|
/**
|
|
* get the overflow of the spangroup.
|
|
* @param obj pointer to a spangroup object.
|
|
* @return the overflow value.
|
|
*/
|
|
lv_span_overflow_t lv_spangroup_get_overflow(lv_obj_t * obj);
|
|
|
|
/**
|
|
* get the indent of the spangroup.
|
|
* @param obj pointer to a spangroup object.
|
|
* @return the indent value.
|
|
*/
|
|
lv_coord_t lv_spangroup_get_indent(lv_obj_t * obj);
|
|
|
|
/**
|
|
* get the mode of the spangroup.
|
|
* @param obj pointer to a spangroup object.
|
|
*/
|
|
lv_span_mode_t lv_spangroup_get_mode(lv_obj_t * obj);
|
|
|
|
/**
|
|
* get max line height of all span in the spangroup.
|
|
* @param obj pointer to a spangroup object.
|
|
*/
|
|
lv_coord_t lv_spangroup_get_max_line_h(lv_obj_t * obj);
|
|
|
|
/**
|
|
* get the text content width when all span of spangroup on a line.
|
|
* @param obj pointer to a spangroup object.
|
|
* @param max_width if text content width >= max_width, return max_width
|
|
* to reduce computation, if max_width == 0, returns the text content width.
|
|
* @return text content width or max_width.
|
|
*/
|
|
uint32_t lv_spangroup_get_expand_width(lv_obj_t * obj, uint32_t max_width);
|
|
|
|
/**
|
|
* get the text content height with width fixed.
|
|
* @param obj pointer to a spangroup object.
|
|
*/
|
|
lv_coord_t lv_spangroup_get_expand_height(lv_obj_t * obj, lv_coord_t width);
|
|
|
|
|
|
/*=====================
|
|
* Other functions
|
|
*====================*/
|
|
|
|
/**
|
|
* update the mode of the spangroup.
|
|
* @param obj pointer to a spangroup object.
|
|
*/
|
|
void lv_spangroup_refr_mode(lv_obj_t * obj);
|
|
|
|
/**********************
|
|
* MACROS
|
|
**********************/
|
|
|
|
#endif /*LV_USE_SPAN*/
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /*LV_SPAN_H*/
|