diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c index 5095e3ae4..f33ca4120 100644 --- a/src/lv_core/lv_obj.c +++ b/src/lv_core/lv_obj.c @@ -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))) { diff --git a/src/lv_objx/lv_btn.c b/src/lv_objx/lv_btn.c index 9bfdabde5..a4fb14a9d 100644 --- a/src/lv_objx/lv_btn.c +++ b/src/lv_objx/lv_btn.c @@ -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); diff --git a/src/lv_objx/lv_btn.h b/src/lv_objx/lv_btn.h index 707a60710..8db38e84f 100644 --- a/src/lv_objx/lv_btn.h +++ b/src/lv_objx/lv_btn.h @@ -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 **********************/ diff --git a/src/lv_objx/lv_cb.c b/src/lv_objx/lv_cb.c index 08d05edd3..085bcd8d4 100644 --- a/src/lv_objx/lv_cb.c +++ b/src/lv_objx/lv_cb.c @@ -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); diff --git a/src/lv_objx/lv_cb.h b/src/lv_objx/lv_cb.h index 942696065..8693173a1 100644 --- a/src/lv_objx/lv_cb.h +++ b/src/lv_objx/lv_cb.h @@ -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; } diff --git a/src/lv_objx/lv_imgbtn.h b/src/lv_objx/lv_imgbtn.h index 4200c56cc..a50a8ae6d 100644 --- a/src/lv_objx/lv_imgbtn.h +++ b/src/lv_objx/lv_imgbtn.h @@ -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); } /*===================== diff --git a/src/lv_objx/lv_mbox.c b/src/lv_objx/lv_mbox.c index cc1c335c9..9b49327da 100644 --- a/src/lv_objx/lv_mbox.c +++ b/src/lv_objx/lv_mbox.c @@ -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); diff --git a/src/lv_themes/lv_theme_alien.c b/src/lv_themes/lv_theme_alien.c index 5325abcd3..eac9e6d2d 100644 --- a/src/lv_themes/lv_theme_alien.c +++ b/src/lv_themes/lv_theme_alien.c @@ -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);