1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-28 07:03:00 +08:00

minor fixes

This commit is contained in:
Gabor Kiss-Vamosi 2020-02-13 13:56:08 +01:00
parent 4cfeb9e985
commit 55124afe66
8 changed files with 60 additions and 129 deletions

View File

@ -3042,6 +3042,12 @@ static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param)
else if(sign == LV_SIGNAL_STYLE_CHG) {
lv_obj_refresh_ext_draw_pad(obj);
}
else if(sign == LV_SIGNAL_PRESSED) {
lv_obj_add_state(obj, LV_OBJ_STATE_PRESSED);
}
else if(sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESS_LOST) {
lv_obj_clear_state(obj, LV_OBJ_STATE_PRESSED);
}
#if LV_USE_GROUP
else if(sign == LV_SIGNAL_FOCUS) {
if(lv_group_get_editing(lv_obj_get_group(obj))) {

View File

@ -114,7 +114,7 @@ lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy)
* @param btn pointer to a button object
* @param tgl true: enable toggled states, false: disable
*/
void lv_btn_set_toggle(lv_obj_t * btn, bool tgl)
void lv_btn_set_checkable(lv_obj_t * btn, bool tgl)
{
LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
@ -133,21 +133,21 @@ void lv_btn_set_state(lv_obj_t * btn, lv_btn_state_t state)
LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
switch(state) {
case LV_BTN_STATE_REL:
case LV_BTN_STATE_RELEASED:
lv_obj_clear_state(btn, LV_OBJ_STATE_PRESSED | LV_OBJ_STATE_CHECKED);
break;
case LV_BTN_STATE_PR:
case LV_BTN_STATE_PRESSED:
lv_obj_clear_state(btn, LV_OBJ_STATE_CHECKED);
lv_obj_add_state(btn, LV_OBJ_STATE_PRESSED);
break;
case LV_BTN_STATE_TGL_REL:
case LV_BTN_STATE_CHECKED_RELEASED:
lv_obj_add_state(btn, LV_OBJ_STATE_CHECKED);
lv_obj_clear_state(btn, LV_OBJ_STATE_PRESSED);
break;
case LV_BTN_STATE_TGL_PR:
case LV_BTN_STATE_CHECKED_PRESSED:
lv_obj_add_state(btn, LV_OBJ_STATE_PRESSED | LV_OBJ_STATE_CHECKED);
break;
case LV_BTN_STATE_INA:
case LV_BTN_STATE_DISABLED:
lv_obj_add_state(btn, LV_OBJ_STATE_DISABLED);
break;
}
@ -188,12 +188,14 @@ lv_btn_state_t lv_btn_get_state(const lv_obj_t * btn)
lv_obj_state_t state = lv_obj_get_state(btn, LV_BTN_PART_MAIN);
if(state & LV_OBJ_STATE_CHECKED) {
if(state & LV_OBJ_STATE_PRESSED) return LV_BTN_STATE_TGL_PR;
else return LV_BTN_STATE_TGL_REL;
if(state & LV_OBJ_STATE_DISABLED) {
return LV_BTN_STATE_DISABLED;
} else if(state & LV_OBJ_STATE_CHECKED) {
if(state & LV_OBJ_STATE_PRESSED) return LV_BTN_STATE_CHECKED_PRESSED;
else return LV_BTN_STATE_CHECKED_RELEASED;
} else {
if(state & LV_OBJ_STATE_PRESSED) return LV_BTN_STATE_PR;
else return LV_BTN_STATE_REL;
if(state & LV_OBJ_STATE_PRESSED) return LV_BTN_STATE_PRESSED;
else return LV_BTN_STATE_RELEASED;
}
}
@ -203,7 +205,7 @@ lv_btn_state_t lv_btn_get_state(const lv_obj_t * btn)
* @param btn pointer to a button object
* @return true: toggle enabled, false: disabled
*/
bool lv_btn_get_toggle(const lv_obj_t * btn)
bool lv_btn_get_checkable(const lv_obj_t * btn)
{
LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
@ -212,20 +214,6 @@ bool lv_btn_get_toggle(const lv_obj_t * btn)
return ext->toggle != 0 ? true : false;
}
lv_style_list_t * lv_btn_get_style(lv_obj_t * cont, uint8_t type)
{
lv_style_list_t * style_dsc_p;
switch(type) {
case LV_BTN_PART_MAIN:
style_dsc_p = &cont->style_list;
break;
default:
style_dsc_p = NULL;
}
return style_dsc_p;
}
/**********************
* STATIC FUNCTIONS
**********************/
@ -269,64 +257,29 @@ static lv_res_t lv_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * param)
if(res != LV_RES_OK) return res;
if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
bool tgl = lv_btn_get_toggle(btn);
lv_btn_state_t state = lv_btn_get_state(btn);
if(sign == LV_SIGNAL_PRESSED) {
/*Refresh the state*/
if(state == LV_BTN_STATE_REL) {
lv_btn_set_state(btn, LV_BTN_STATE_PR);
} else if(state == LV_BTN_STATE_TGL_REL) {
lv_btn_set_state(btn, LV_BTN_STATE_TGL_PR);
}
} else if(sign == LV_SIGNAL_PRESS_LOST) {
/*Refresh the state*/
if(state == LV_BTN_STATE_PR)
lv_btn_set_state(btn, LV_BTN_STATE_REL);
else if(state == LV_BTN_STATE_TGL_PR)
lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
} else if(sign == LV_SIGNAL_PRESSING) {
/*When the button begins to drag revert pressed states to released*/
if(lv_indev_is_dragging(param) != false) {
if(state == LV_BTN_STATE_PR)
lv_btn_set_state(btn, LV_BTN_STATE_REL);
else if(state == LV_BTN_STATE_TGL_PR)
lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
}
} else if(sign == LV_SIGNAL_RELEASED) {
bool tgl = lv_btn_get_checkable(btn);
if(sign == LV_SIGNAL_RELEASED) {
/*If not dragged and it was not long press action then
*change state and run the action*/
if(lv_indev_is_dragging(param) == false) {
if(lv_indev_is_dragging(param) == false && tgl) {
uint32_t toggled = 0;
if(state == LV_BTN_STATE_PR && tgl == false) {
lv_btn_set_state(btn, LV_BTN_STATE_REL);
if(lv_obj_get_state(btn, LV_BTN_PART_MAIN) & LV_OBJ_STATE_CHECKED) {
lv_btn_set_state(btn, LV_BTN_STATE_RELEASED);
toggled = 0;
} else if(state == LV_BTN_STATE_TGL_PR && tgl == false) {
lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
} else {
lv_btn_set_state(btn, LV_BTN_STATE_CHECKED_RELEASED);
toggled = 1;
} else if(state == LV_BTN_STATE_PR && tgl == true) {
lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
toggled = 1;
} else if(state == LV_BTN_STATE_TGL_PR && tgl == true) {
lv_btn_set_state(btn, LV_BTN_STATE_REL);
toggled = 0;
}
if(tgl) {
res = lv_event_send(btn, LV_EVENT_VALUE_CHANGED, &toggled);
if(res != LV_RES_OK) return res;
}
} else { /*If dragged change back the state*/
if(state == LV_BTN_STATE_PR) {
lv_btn_set_state(btn, LV_BTN_STATE_REL);
} else if(state == LV_BTN_STATE_TGL_PR) {
lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
}
res = lv_event_send(btn, LV_EVENT_VALUE_CHANGED, &toggled);
if(res != LV_RES_OK) return res;
}
} else if(sign == LV_SIGNAL_CONTROL) {
char c = *((char *)param);
if(c == LV_KEY_RIGHT || c == LV_KEY_UP) {
if(lv_btn_get_toggle(btn)) {
lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
if(lv_btn_get_checkable(btn)) {
lv_btn_set_state(btn, LV_BTN_STATE_CHECKED_RELEASED);
uint32_t state = 1;
res = lv_event_send(btn, LV_EVENT_VALUE_CHANGED, &state);
@ -334,8 +287,8 @@ static lv_res_t lv_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * param)
}
} else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
if(lv_btn_get_toggle(btn)) {
lv_btn_set_state(btn, LV_BTN_STATE_REL);
if(lv_btn_get_checkable(btn)) {
lv_btn_set_state(btn, LV_BTN_STATE_RELEASED);
uint32_t state = 0;
res = lv_event_send(btn, LV_EVENT_VALUE_CHANGED, &state);

View File

@ -36,23 +36,12 @@ extern "C" {
/** Possible states of a button.
* It can be used not only by buttons but other button-like objects too*/
enum {
/**Released*/
LV_BTN_STATE_REL,
/**Pressed*/
LV_BTN_STATE_PR,
/**Toggled released*/
LV_BTN_STATE_TGL_REL,
/**Toggled pressed*/
LV_BTN_STATE_TGL_PR,
/**Inactive*/
LV_BTN_STATE_INA,
/**Number of states*/
_LV_BTN_STATE_NUM,
LV_BTN_STATE_RELEASED,
LV_BTN_STATE_PRESSED,
LV_BTN_STATE_CHECKED_RELEASED,
LV_BTN_STATE_CHECKED_PRESSED,
LV_BTN_STATE_DISABLED,
_LV_BTN_STATE_LAST, /* Number of states*/
};
typedef uint8_t lv_btn_state_t;
@ -95,7 +84,7 @@ lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy);
* @param btn pointer to a button object
* @param tgl true: enable toggled states, false: disable
*/
void lv_btn_set_toggle(lv_obj_t * btn, bool tgl);
void lv_btn_set_checkable(lv_obj_t * btn, bool tgl);
/**
* Set the state of the button
@ -202,7 +191,7 @@ lv_btn_state_t lv_btn_get_state(const lv_obj_t * btn);
* @param btn pointer to a button object
* @return true: toggle enabled, false: disabled
*/
bool lv_btn_get_toggle(const lv_obj_t * btn);
bool lv_btn_get_checkable(const lv_obj_t * btn);
/**
* Get the layout of a button
@ -254,29 +243,6 @@ static inline lv_fit_t lv_btn_get_fit_bottom(const lv_obj_t * btn)
return lv_cont_get_fit_bottom(btn);
}
/**
* Get time of the ink in effect (draw a circle on click to animate in the new state)
* @param btn pointer to a button object
* @return the time of the ink animation
*/
uint16_t lv_btn_get_ink_in_time(const lv_obj_t * btn);
/**
* Get the wait time before the ink disappears
* @param btn pointer to a button object
* @return the time of the ink animation
*/
uint16_t lv_btn_get_ink_wait_time(const lv_obj_t * btn);
/**
* Get time of the ink out effect (animate to the releases state)
* @param btn pointer to a button object
* @return the time of the ink animation
*/
uint16_t lv_btn_get_ink_out_time(const lv_obj_t * btn);
lv_style_list_t * lv_btn_get_style(lv_obj_t * cont, uint8_t type);
/**********************
* MACROS
**********************/

View File

@ -80,7 +80,7 @@ lv_obj_t * lv_cb_create(lv_obj_t * par, const lv_obj_t * copy)
lv_cb_set_text(cb, "Check box");
lv_btn_set_layout(cb, LV_LAYOUT_ROW_M);
lv_btn_set_fit(cb, LV_FIT_TIGHT);
lv_btn_set_toggle(cb, true);
lv_btn_set_checkable(cb, true);
lv_obj_set_protect(cb, LV_PROTECT_PRESS_LOST);
lv_theme_apply(cb, LV_THEME_CB);

View File

@ -93,7 +93,7 @@ void lv_cb_set_static_text(lv_obj_t * cb, const char * txt);
*/
static inline void lv_cb_set_checked(lv_obj_t * cb, bool checked)
{
lv_btn_set_state(cb, checked ? LV_BTN_STATE_TGL_REL : LV_BTN_STATE_REL);
lv_btn_set_state(cb, checked ? LV_BTN_STATE_CHECKED_RELEASED: LV_BTN_STATE_RELEASED);
}
/**
@ -102,7 +102,7 @@ static inline void lv_cb_set_checked(lv_obj_t * cb, bool checked)
*/
static inline void lv_cb_set_inactive(lv_obj_t * cb)
{
lv_btn_set_state(cb, LV_BTN_STATE_INA);
lv_btn_set_state(cb, LV_BTN_STATE_DISABLED);
}
/**
@ -131,7 +131,7 @@ const char * lv_cb_get_text(const lv_obj_t * cb);
*/
static inline bool lv_cb_is_checked(const lv_obj_t * cb)
{
return lv_btn_get_state(cb) == LV_BTN_STATE_REL ? false : true;
return lv_btn_get_state(cb) == LV_BTN_STATE_RELEASED ? false : true;
}
/**
@ -141,7 +141,7 @@ static inline bool lv_cb_is_checked(const lv_obj_t * cb)
*/
static inline bool lv_cb_is_inactive(const lv_obj_t * cb)
{
return lv_btn_get_state(cb) == LV_BTN_STATE_INA ? true :false;
return lv_btn_get_state(cb) == LV_BTN_STATE_DISABLED ? true :false;
}

View File

@ -39,7 +39,7 @@ typedef struct
lv_btn_ext_t btn; /*Ext. of ancestor*/
/*New data for this type */
#if LV_IMGBTN_TILED == 0
const void * img_src[_LV_BTN_STATE_NUM]; /*Store images to each state*/
const void * img_src[_LV_BTN_STATE_LAST]; /*Store images to each state*/
#else
const void * img_src_left[_LV_BTN_STATE_NUM]; /*Store left side images to each state*/
const void * img_src_mid[_LV_BTN_STATE_NUM]; /*Store center images to each state*/
@ -105,9 +105,9 @@ void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src
* @param imgbtn pointer to an image button object
* @param tgl true: enable toggled states, false: disable
*/
static inline void lv_imgbtn_set_toggle(lv_obj_t * imgbtn, bool tgl)
static inline void lv_imgbtn_set_checkable(lv_obj_t * imgbtn, bool tgl)
{
lv_btn_set_toggle(imgbtn, tgl);
lv_btn_set_checkable(imgbtn, tgl);
}
/**
@ -184,9 +184,9 @@ static inline lv_btn_state_t lv_imgbtn_get_state(const lv_obj_t * imgbtn)
* @param imgbtn pointer to a image button object
* @return ture: toggle enabled, false: disabled
*/
static inline bool lv_imgbtn_get_toggle(const lv_obj_t * imgbtn)
static inline bool lv_imgbtn_get_checkable(const lv_obj_t * imgbtn)
{
return lv_btn_get_toggle(imgbtn);
return lv_btn_get_checkable(imgbtn);
}
/*=====================

View File

@ -414,7 +414,13 @@ static lv_res_t lv_mbox_signal(lv_obj_t * mbox, lv_signal_t sign, void * param)
info->result = lv_mbox_get_style(mbox, info->part);
if(info->result != NULL) return LV_RES_OK;
else return ancestor_signal(mbox, sign, param);
}
} else if(sign == LV_SIGNAL_GET_STATE_DSC) {
lv_get_state_info_t * info = param;
lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
if(ext->btnm && info->part == LV_MBOX_PART_BTN_BG) info->result = lv_obj_get_state_dsc(ext->btnm, LV_BTNM_PART_BG);
else if(ext->btnm && info->part == LV_MBOX_PART_BTN) info->result = lv_obj_get_state_dsc(ext->btnm, LV_BTNM_PART_BTN);
return LV_RES_OK;
}
/* Include the ancient signal function */
res = ancestor_signal(mbox, sign, param);

View File

@ -181,7 +181,7 @@ static void basic_init(void)
lv_style_set_pad_bottom(&btn, LV_STYLE_STATE_NORMAL, LV_DPI / 10);
lv_style_set_pad_inner(&btn, LV_STYLE_STATE_NORMAL, LV_DPI / 10);
lv_style_set_transition_time(&btn, LV_STYLE_STATE_NORMAL, 300);
lv_style_set_transition_time(&btn, LV_STYLE_STATE_PRESSED, 0);
// lv_style_set_transition_time(&btn, LV_STYLE_STATE_PRESSED, 0);
lv_style_set_bg_color(&btn, LV_STYLE_STATE_FOCUS, lv_color_mix(LV_COLOR_RED, COLOR_ACCENT, LV_OPA_50));
lv_style_set_outline_width(&btn, LV_STYLE_STATE_NORMAL, 3);