feat(gridnav): add lv_gridnav_set_focused

fixes #3069
This commit is contained in:
Gabor Kiss-Vamosi
2022-02-17 18:11:18 +01:00
parent cfd6d43672
commit b6d2daa493
2 changed files with 29 additions and 0 deletions

View File

@@ -81,6 +81,27 @@ void lv_gridnav_remove(lv_obj_t * obj)
lv_obj_remove_event_cb(obj, gridnav_event_cb); lv_obj_remove_event_cb(obj, gridnav_event_cb);
} }
void lv_gridnav_set_focused(lv_obj_t * cont, lv_obj_t * to_focus, lv_anim_enable_t anim_en)
{
LV_ASSERT_NULL(to_focus);
lv_gridnav_dsc_t * dsc = lv_obj_get_event_user_data(cont, gridnav_event_cb);
if(dsc == NULL) {
LV_LOG_WARN("`cont` is not a gridnav container");
return;
}
if(obj_is_focuable(to_focus) == false) {
LV_LOG_WARN("The object to focus is not focusable");
return;
}
lv_obj_clear_state(dsc->focused_obj, LV_STATE_FOCUSED | LV_STATE_FOCUS_KEY);
lv_obj_add_state(to_focus, LV_STATE_FOCUSED | LV_STATE_FOCUS_KEY);
lv_obj_scroll_to_view(to_focus, anim_en);
dsc->focused_obj = to_focus;
}
/********************** /**********************
* STATIC FUNCTIONS * STATIC FUNCTIONS
**********************/ **********************/

View File

@@ -103,6 +103,14 @@ void lv_gridnav_add(lv_obj_t * obj, lv_gridnav_ctrl_t ctrl);
*/ */
void lv_gridnav_remove(lv_obj_t * obj); void lv_gridnav_remove(lv_obj_t * obj);
/**
* Manually focus an object on gridnav container
* @param cont pointer to a gridnav container
* @param to_focus pointer to an object to focus
* @param anim_en LV_ANIM_ON/OFF
*/
void lv_gridnav_set_focused(lv_obj_t * cont, lv_obj_t * to_focus, lv_anim_enable_t anim_en);
/********************** /**********************
* MACROS * MACROS
**********************/ **********************/