feat(style) add basic support to min/max-width/height
This commit is contained in:
@@ -23,7 +23,11 @@ props = [
|
||||
{'name': 'PAD_ROW', 'style_type': 'num', 'var_type': 'lv_coord_t' },
|
||||
{'name': 'PAD_COLUMN', 'style_type': 'num', 'var_type': 'lv_coord_t' },
|
||||
{'name': 'WIDTH', 'style_type': 'num', 'var_type': 'lv_coord_t' },
|
||||
{'name': 'MIN_WIDTH', 'style_type': 'num', 'var_type': 'lv_coord_t' },
|
||||
{'name': 'MAX_WIDTH', 'style_type': 'num', 'var_type': 'lv_coord_t' },
|
||||
{'name': 'HEIGHT', 'style_type': 'num', 'var_type': 'lv_coord_t' },
|
||||
{'name': 'MIN_HEIGHT', 'style_type': 'num', 'var_type': 'lv_coord_t' },
|
||||
{'name': 'MAX_HEIGHT', 'style_type': 'num', 'var_type': 'lv_coord_t' },
|
||||
{'name': 'X', 'style_type': 'num', 'var_type': 'lv_coord_t' },
|
||||
{'name': 'Y', 'style_type': 'num', 'var_type': 'lv_coord_t' },
|
||||
{'name': 'ALIGN', 'style_type': 'num', 'var_type': 'lv_align_t' },
|
||||
|
||||
@@ -123,6 +123,14 @@ void lv_obj_refr_size(lv_obj_t * obj)
|
||||
if(pct_w) w = (LV_COORD_GET_PCT(w) * parent_w) / 100;
|
||||
if(pct_h) h = (LV_COORD_GET_PCT(h) * parent_h) / 100;
|
||||
|
||||
lv_coord_t minw = lv_obj_get_style_min_width(obj, LV_PART_MAIN);
|
||||
lv_coord_t maxw = lv_obj_get_style_max_width(obj, LV_PART_MAIN);
|
||||
w = LV_CLAMP(minw, w, maxw);
|
||||
|
||||
lv_coord_t minh = lv_obj_get_style_min_height(obj, LV_PART_MAIN);
|
||||
lv_coord_t maxh = lv_obj_get_style_max_height(obj, LV_PART_MAIN);
|
||||
h = LV_CLAMP(minh, h, maxh);
|
||||
|
||||
/*Do nothing if the size is not changed*/
|
||||
/*It is very important else recursive resizing can occur without size change*/
|
||||
if(lv_obj_get_width(obj) == w && lv_obj_get_height(obj) == h) return;
|
||||
@@ -837,7 +845,6 @@ bool lv_obj_hit_test(lv_obj_t * obj, const lv_point_t * point)
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
||||
|
||||
/**
|
||||
* Calculate the "auto size". It's `auto_size = max(children_size, self_size)`
|
||||
* @param obj pointer to an object
|
||||
|
||||
@@ -353,6 +353,13 @@ _lv_style_state_cmp_t _lv_obj_style_state_compare(lv_obj_t * obj, lv_state_t sta
|
||||
else if(lv_style_get_prop(style, LV_STYLE_PAD_RIGHT, &v)) res_tmp = _LV_STYLE_STATE_CMP_DIFF_LAYOUT;
|
||||
else if(lv_style_get_prop(style, LV_STYLE_PAD_COLUMN, &v)) res_tmp = _LV_STYLE_STATE_CMP_DIFF_LAYOUT;
|
||||
else if(lv_style_get_prop(style, LV_STYLE_PAD_ROW, &v)) res_tmp = _LV_STYLE_STATE_CMP_DIFF_LAYOUT;
|
||||
else if(lv_style_get_prop(style, LV_STYLE_LAYOUT, &v)) res_tmp = _LV_STYLE_STATE_CMP_DIFF_LAYOUT;
|
||||
else if(lv_style_get_prop(style, LV_STYLE_WIDTH, &v)) res_tmp = _LV_STYLE_STATE_CMP_DIFF_LAYOUT;
|
||||
else if(lv_style_get_prop(style, LV_STYLE_HEIGHT, &v)) res_tmp = _LV_STYLE_STATE_CMP_DIFF_LAYOUT;
|
||||
else if(lv_style_get_prop(style, LV_STYLE_MIN_WIDTH, &v)) res_tmp = _LV_STYLE_STATE_CMP_DIFF_LAYOUT;
|
||||
else if(lv_style_get_prop(style, LV_STYLE_MAX_WIDTH, &v)) res_tmp = _LV_STYLE_STATE_CMP_DIFF_LAYOUT;
|
||||
else if(lv_style_get_prop(style, LV_STYLE_MIN_HEIGHT, &v)) res_tmp = _LV_STYLE_STATE_CMP_DIFF_LAYOUT;
|
||||
else if(lv_style_get_prop(style, LV_STYLE_MAX_HEIGHT, &v)) res_tmp = _LV_STYLE_STATE_CMP_DIFF_LAYOUT;
|
||||
|
||||
if(res_tmp == _LV_STYLE_STATE_CMP_DIFF_LAYOUT) {
|
||||
if(part_act == LV_PART_MAIN) return _LV_STYLE_STATE_CMP_DIFF_LAYOUT;
|
||||
|
||||
@@ -118,12 +118,36 @@ static inline lv_coord_t lv_obj_get_style_width(const struct _lv_obj_t * obj, ui
|
||||
return (lv_coord_t)v.num;
|
||||
}
|
||||
|
||||
static inline lv_coord_t lv_obj_get_style_min_width(const struct _lv_obj_t * obj, uint32_t part)
|
||||
{
|
||||
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_MIN_WIDTH);
|
||||
return (lv_coord_t)v.num;
|
||||
}
|
||||
|
||||
static inline lv_coord_t lv_obj_get_style_max_width(const struct _lv_obj_t * obj, uint32_t part)
|
||||
{
|
||||
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_MAX_WIDTH);
|
||||
return (lv_coord_t)v.num;
|
||||
}
|
||||
|
||||
static inline lv_coord_t lv_obj_get_style_height(const struct _lv_obj_t * obj, uint32_t part)
|
||||
{
|
||||
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_HEIGHT);
|
||||
return (lv_coord_t)v.num;
|
||||
}
|
||||
|
||||
static inline lv_coord_t lv_obj_get_style_min_height(const struct _lv_obj_t * obj, uint32_t part)
|
||||
{
|
||||
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_MIN_HEIGHT);
|
||||
return (lv_coord_t)v.num;
|
||||
}
|
||||
|
||||
static inline lv_coord_t lv_obj_get_style_max_height(const struct _lv_obj_t * obj, uint32_t part)
|
||||
{
|
||||
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_MAX_HEIGHT);
|
||||
return (lv_coord_t)v.num;
|
||||
}
|
||||
|
||||
static inline lv_coord_t lv_obj_get_style_x(const struct _lv_obj_t * obj, uint32_t part)
|
||||
{
|
||||
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_X);
|
||||
@@ -650,6 +674,22 @@ static inline void lv_obj_set_style_width(struct _lv_obj_t * obj, lv_coord_t val
|
||||
lv_obj_set_local_style_prop(obj, LV_STYLE_WIDTH, v, selector);
|
||||
}
|
||||
|
||||
static inline void lv_obj_set_style_min_width(struct _lv_obj_t * obj, lv_coord_t value, lv_style_selector_t selector)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
.num = (int32_t)value
|
||||
};
|
||||
lv_obj_set_local_style_prop(obj, LV_STYLE_MIN_WIDTH, v, selector);
|
||||
}
|
||||
|
||||
static inline void lv_obj_set_style_max_width(struct _lv_obj_t * obj, lv_coord_t value, lv_style_selector_t selector)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
.num = (int32_t)value
|
||||
};
|
||||
lv_obj_set_local_style_prop(obj, LV_STYLE_MAX_WIDTH, v, selector);
|
||||
}
|
||||
|
||||
static inline void lv_obj_set_style_height(struct _lv_obj_t * obj, lv_coord_t value, lv_style_selector_t selector)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
@@ -658,6 +698,22 @@ static inline void lv_obj_set_style_height(struct _lv_obj_t * obj, lv_coord_t va
|
||||
lv_obj_set_local_style_prop(obj, LV_STYLE_HEIGHT, v, selector);
|
||||
}
|
||||
|
||||
static inline void lv_obj_set_style_min_height(struct _lv_obj_t * obj, lv_coord_t value, lv_style_selector_t selector)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
.num = (int32_t)value
|
||||
};
|
||||
lv_obj_set_local_style_prop(obj, LV_STYLE_MIN_HEIGHT, v, selector);
|
||||
}
|
||||
|
||||
static inline void lv_obj_set_style_max_height(struct _lv_obj_t * obj, lv_coord_t value, lv_style_selector_t selector)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
.num = (int32_t)value
|
||||
};
|
||||
lv_obj_set_local_style_prop(obj, LV_STYLE_MAX_HEIGHT, v, selector);
|
||||
}
|
||||
|
||||
static inline void lv_obj_set_style_x(struct _lv_obj_t * obj, lv_coord_t value, lv_style_selector_t selector)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
|
||||
@@ -240,6 +240,10 @@ lv_style_value_t lv_style_prop_get_default(lv_style_prop_t prop)
|
||||
case LV_STYLE_SIZE:
|
||||
value.num = 5;
|
||||
break;
|
||||
case LV_STYLE_MAX_WIDTH:
|
||||
case LV_STYLE_MAX_HEIGHT:
|
||||
value.num = LV_COORD_MAX;
|
||||
break;
|
||||
default:
|
||||
value.ptr = NULL;
|
||||
value.num = 0;
|
||||
|
||||
@@ -135,11 +135,15 @@ typedef enum {
|
||||
LV_STYLE_PAD_COLUMN = 21 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
|
||||
LV_STYLE_WIDTH = 22 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
LV_STYLE_HEIGHT = 23 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
LV_STYLE_X = 24 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
LV_STYLE_Y = 25 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
LV_STYLE_LAYOUT = 26 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
LV_STYLE_ALIGN = 27 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
LV_STYLE_MIN_WIDTH = 23 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
LV_STYLE_MAX_WIDTH = 24 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
LV_STYLE_HEIGHT = 25 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
LV_STYLE_MIN_HEIGHT = 26 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
LV_STYLE_MAX_HEIGHT = 27 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
LV_STYLE_X = 28 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
LV_STYLE_Y = 29 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
LV_STYLE_LAYOUT = 30 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
LV_STYLE_ALIGN = 31 | LV_STYLE_PROP_LAYOUT_REFR,
|
||||
|
||||
/*Group 2*/
|
||||
LV_STYLE_BG_COLOR = 32,
|
||||
|
||||
@@ -158,6 +158,22 @@ static inline void lv_style_set_width(lv_style_t * style, lv_coord_t value)
|
||||
lv_style_set_prop(style, LV_STYLE_WIDTH, v);
|
||||
}
|
||||
|
||||
static inline void lv_style_set_min_width(lv_style_t * style, lv_coord_t value)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
.num = (int32_t)value
|
||||
};
|
||||
lv_style_set_prop(style, LV_STYLE_MIN_WIDTH, v);
|
||||
}
|
||||
|
||||
static inline void lv_style_set_max_width(lv_style_t * style, lv_coord_t value)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
.num = (int32_t)value
|
||||
};
|
||||
lv_style_set_prop(style, LV_STYLE_MAX_WIDTH, v);
|
||||
}
|
||||
|
||||
static inline void lv_style_set_height(lv_style_t * style, lv_coord_t value)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
@@ -166,6 +182,22 @@ static inline void lv_style_set_height(lv_style_t * style, lv_coord_t value)
|
||||
lv_style_set_prop(style, LV_STYLE_HEIGHT, v);
|
||||
}
|
||||
|
||||
static inline void lv_style_set_min_height(lv_style_t * style, lv_coord_t value)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
.num = (int32_t)value
|
||||
};
|
||||
lv_style_set_prop(style, LV_STYLE_MIN_HEIGHT, v);
|
||||
}
|
||||
|
||||
static inline void lv_style_set_max_height(lv_style_t * style, lv_coord_t value)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
.num = (int32_t)value
|
||||
};
|
||||
lv_style_set_prop(style, LV_STYLE_MAX_HEIGHT, v);
|
||||
}
|
||||
|
||||
static inline void lv_style_set_x(lv_style_t * style, lv_coord_t value)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
|
||||
Reference in New Issue
Block a user