154 lines
5.2 KiB
C
154 lines
5.2 KiB
C
/**
|
|
* @file lv_flex.h
|
|
*
|
|
*/
|
|
|
|
#ifndef LV_FLEX_H
|
|
#define LV_FLEX_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*********************
|
|
* INCLUDES
|
|
*********************/
|
|
#include "../../../core/lv_obj.h"
|
|
#if LV_USE_FLEX
|
|
|
|
/*********************
|
|
* DEFINES
|
|
*********************/
|
|
|
|
#define LV_OBJ_FLAG_FLEX_IN_NEW_TRACK LV_OBJ_FLAG_LAYOUT_1
|
|
LV_EXPORT_CONST_INT(LV_OBJ_FLAG_FLEX_IN_NEW_TRACK);
|
|
|
|
#define _LV_FLEX_COLUMN (1 << 0)
|
|
#define _LV_FLEX_WRAP (1 << 2)
|
|
#define _LV_FLEX_REVERSE (1 << 3)
|
|
|
|
/**********************
|
|
* TYPEDEFS
|
|
**********************/
|
|
|
|
/*Can't include lv_obj.h because it includes this header file*/
|
|
struct _lv_obj_t;
|
|
|
|
typedef enum {
|
|
LV_FLEX_ALIGN_START,
|
|
LV_FLEX_ALIGN_END,
|
|
LV_FLEX_ALIGN_CENTER,
|
|
LV_FLEX_ALIGN_SPACE_EVENLY,
|
|
LV_FLEX_ALIGN_SPACE_AROUND,
|
|
LV_FLEX_ALIGN_SPACE_BETWEEN,
|
|
} lv_flex_align_t;
|
|
|
|
typedef enum {
|
|
LV_FLEX_FLOW_ROW = 0x00,
|
|
LV_FLEX_FLOW_COLUMN = _LV_FLEX_COLUMN,
|
|
LV_FLEX_FLOW_ROW_WRAP = LV_FLEX_FLOW_ROW | _LV_FLEX_WRAP,
|
|
LV_FLEX_FLOW_ROW_REVERSE = LV_FLEX_FLOW_ROW | _LV_FLEX_REVERSE,
|
|
LV_FLEX_FLOW_ROW_WRAP_REVERSE = LV_FLEX_FLOW_ROW | _LV_FLEX_WRAP | _LV_FLEX_REVERSE,
|
|
LV_FLEX_FLOW_COLUMN_WRAP = LV_FLEX_FLOW_COLUMN | _LV_FLEX_WRAP,
|
|
LV_FLEX_FLOW_COLUMN_REVERSE = LV_FLEX_FLOW_COLUMN | _LV_FLEX_REVERSE,
|
|
LV_FLEX_FLOW_COLUMN_WRAP_REVERSE = LV_FLEX_FLOW_COLUMN | _LV_FLEX_WRAP | _LV_FLEX_REVERSE,
|
|
} lv_flex_flow_t;
|
|
|
|
/**********************
|
|
* GLOBAL VARIABLES
|
|
**********************/
|
|
extern uint32_t LV_LAYOUT_FLEX;
|
|
extern lv_style_prop_t LV_STYLE_FLEX_FLOW;
|
|
extern lv_style_prop_t LV_STYLE_FLEX_MAIN_PLACE;
|
|
extern lv_style_prop_t LV_STYLE_FLEX_CROSS_PLACE;
|
|
extern lv_style_prop_t LV_STYLE_FLEX_TRACK_PLACE;
|
|
extern lv_style_prop_t LV_STYLE_FLEX_GROW;
|
|
|
|
/**********************
|
|
* GLOBAL PROTOTYPES
|
|
**********************/
|
|
|
|
/**
|
|
* Initialize a flex layout the default values
|
|
* @param flex pointer to a flex layout descriptor
|
|
*/
|
|
void lv_flex_init(void);
|
|
|
|
/**
|
|
* Set hot the item should flow
|
|
* @param flex pointer to a flex layout descriptor
|
|
* @param flow an element of `lv_flex_flow_t`.
|
|
*/
|
|
void lv_obj_set_flex_flow(lv_obj_t * obj, lv_flex_flow_t flow);
|
|
|
|
/**
|
|
* Set how to place (where to align) the items and tracks
|
|
* @param flex pointer: to a flex layout descriptor
|
|
* @param main_place where to place the items on main axis (in their track). Any value of `lv_flex_align_t`.
|
|
* @param cross_place where to place the item in their track on the cross axis. `LV_FLEX_ALIGN_START/END/CENTER`
|
|
* @param track_place where to place the tracks in the cross direction. Any value of `lv_flex_align_t`.
|
|
*/
|
|
void lv_obj_set_flex_align(lv_obj_t * obj, lv_flex_align_t main_place, lv_flex_align_t cross_place,
|
|
lv_flex_align_t track_cross_place);
|
|
|
|
/**
|
|
* Sets the width or height (on main axis) to grow the object in order fill the free space
|
|
* @param obj pointer to an object. The parent must have flex layout else nothing will happen.
|
|
* @param grow a value to set how much free space to take proportionally to other growing items.
|
|
*/
|
|
void lv_obj_set_flex_grow(lv_obj_t * obj, uint8_t grow);
|
|
|
|
void lv_style_set_flex_flow(lv_style_t * style, lv_flex_flow_t value);
|
|
void lv_style_set_flex_main_place(lv_style_t * style, lv_flex_align_t value);
|
|
void lv_style_set_flex_cross_place(lv_style_t * style, lv_flex_align_t value);
|
|
void lv_style_set_flex_track_place(lv_style_t * style, lv_flex_align_t value);
|
|
void lv_style_set_flex_grow(lv_style_t * style, uint8_t value);
|
|
void lv_obj_set_style_flex_flow(lv_obj_t * obj, lv_flex_flow_t value, lv_style_selector_t selector);
|
|
void lv_obj_set_style_flex_main_place(lv_obj_t * obj, lv_flex_align_t value, lv_style_selector_t selector);
|
|
void lv_obj_set_style_flex_cross_place(lv_obj_t * obj, lv_flex_align_t value, lv_style_selector_t selector);
|
|
void lv_obj_set_style_flex_track_place(lv_obj_t * obj, lv_flex_align_t value, lv_style_selector_t selector);
|
|
void lv_obj_set_style_flex_grow(lv_obj_t * obj, uint8_t value, lv_style_selector_t selector);
|
|
|
|
static inline lv_flex_flow_t lv_obj_get_style_flex_flow(const lv_obj_t * obj, uint32_t part)
|
|
{
|
|
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_FLEX_FLOW);
|
|
return (lv_flex_flow_t)v.num;
|
|
}
|
|
|
|
static inline lv_flex_align_t lv_obj_get_style_flex_main_place(const lv_obj_t * obj, uint32_t part)
|
|
{
|
|
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_FLEX_MAIN_PLACE);
|
|
return (lv_flex_align_t)v.num;
|
|
}
|
|
|
|
static inline lv_flex_align_t lv_obj_get_style_flex_cross_place(const lv_obj_t * obj, uint32_t part)
|
|
{
|
|
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_FLEX_CROSS_PLACE);
|
|
return (lv_flex_align_t)v.num;
|
|
}
|
|
|
|
static inline lv_flex_align_t lv_obj_get_style_flex_track_place(const lv_obj_t * obj, uint32_t part)
|
|
{
|
|
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_FLEX_TRACK_PLACE);
|
|
return (lv_flex_align_t)v.num;
|
|
}
|
|
|
|
static inline uint8_t lv_obj_get_style_flex_grow(const lv_obj_t * obj, uint32_t part)
|
|
{
|
|
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_FLEX_GROW);
|
|
return (uint8_t)v.num;
|
|
}
|
|
|
|
|
|
/**********************
|
|
* MACROS
|
|
**********************/
|
|
|
|
#endif /*LV_USE_FLEX*/
|
|
|
|
#ifdef __cplusplus
|
|
} /*extern "C"*/
|
|
#endif
|
|
|
|
#endif /*LV_FLEX_H*/
|