Files
lvgl/src/others/xml/lv_xml_style.h
2024-12-04 15:31:43 -03:00

92 lines
2.4 KiB
C

/**
* @file lv_xml_style.h
*
*/
#ifndef LV_XML_STYLE_H
#define LV_XML_STYLE_H
#ifdef __cplusplus
extern "C" {
#endif
/*********************
* INCLUDES
*********************/
#include "../../misc/lv_types.h"
#include "../../misc/lv_style.h"
#include "../../core/lv_obj_style.h"
#if LV_USE_XML
/**********************
* TYPEDEFS
**********************/
typedef struct _lv_xml_style_t {
const char * name;
const char * long_name;
lv_style_t style;
} lv_xml_style_t;
/**********************
* GLOBAL PROTOTYPES
**********************/
/**
* Add a style to `ctx` and set the style properties from `attrs`
* @param ctx add styles here. (Constants should be already added as style properties might use them)
* @param attrs list of attribute names and values
*/
void lv_xml_style_register(lv_xml_component_ctx_t * ctx, const char ** attrs);
/**
* Add the styles to an object. Handles multiple styles and selectors too.
* @param state the parser state
* @param obj the target widget
* @param text the styles' string, e.g. "blue red:pressed:knob"
*/
void lv_xml_style_add_to_obj(lv_xml_parser_state_t * state, lv_obj_t * obj, const char * text);
/**
* Convert a style state to enum
* @param txt e.g. "pressed"
* @return the enum `LV_STATE_PRESSED`
*/
lv_state_t lv_xml_style_state_string_to_enum_value(const char * txt);
/**
* Convert a style part to enum
* @param txt e.g. "knob"
* @return the enum `LV_PART_KNOB`
*/
lv_part_t lv_xml_style_part_string_to_enum_value(const char * txt);
/**
* Decompose a string like `"style1:pressed:checked:knob"` to style name and selector
* @param txt the input string
* @param selector store the selectors here
* @return the style name or `NULL` on any error
*/
const char * lv_xml_style_string_process(char * txt, lv_style_selector_t * selector);
/**
* Find a style by name which was added by `lv_xml_style_register`
* @param ctx the default context to search in
* @param name the name of the style. Can start with a component name prefix (e.g. `my_button.blue`) to overwrite the ctx
* @return the style structure
*/
lv_xml_style_t * lv_xml_get_style_by_name(lv_xml_component_ctx_t * ctx, const char * name);
/**********************
* MACROS
**********************/
#endif /* LV_USE_XML */
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif /*LV_XML_STYLE_H*/