event
Details
Events are fired in LVGL when something happens that the user might be interested in, such as when an object
- was clicked
- scroll
- value is changed
- Repaint etc.
lv_obj_t * btn = lv_btn_create(lv_scr_act());
lv_obj_add_event_cb(btn, my_event_cb, LV_EVENT_CLICKED, NULL); /*Assign an event callback*/
...
static void my_event_cb(lv_event_t * event)
{
printf("Clicked\n");
}
In the example, LV_EVENT_CLICKED means that only when a click event occurs on the object, the event will be triggered and enter the event processing callback function my_event_cb.
functional interface
//事件回调函数
lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, &user_data);
//手动发送事件到对象
lv_event_send(obj, LV_EVENT_..., &user_data)
lv_event_get_target
* Gets the object the event was originally aimed at. Even if things are bubbling, it's the same.
@param e pointer to the event descriptor
@return returns the target of event_code
struct _lv_obj_t * lv_event_get_target(lv_event_t * e);
effect
Switch between Chinese and English
lv_event_get_current_target
* Get the current target of the event. It is the object on which the event handler is invoked.
*Same as "normal" target if the event is not bubbling.
@param e A pointer to the event descriptor
@return Returns a pointer to the current target of event_code
struct _lv_obj_t * lv_event_get_current_target(lv_event_t * e);
effect
Switch between Chinese and English
lv_event_get_code
* Get the event code of the event
@param e Pointer to the event descriptor
@return Return the event code. (eg. "LV_EVENT_CLICKED", "LV_EVENT_FOCUSED", etc.)
lv_event_code_t lv_event_get_code(lv_event_t * e);
effect
lv_event_get_param
* Get the parameter passed when the event is sent
@param e pointer to the event descriptor
@return returns the pointer to the parameter
void * lv_event_get_param(lv_event_t * e);
effect
Return the member param of the event structure e
void * lv_event_get_param(lv_event_t * e)
{
return e->param;
}
The member param is assigned by lv_event_send
lv_res_t lv_event_send(lv_obj_t * obj, lv_event_code_t event_code, void * param)
{
if(obj == NULL) return LV_RES_OK;
LV_ASSERT_OBJ(obj, MY_CLASS);
lv_event_t e;
e.target = obj;
e.current_target = obj;
e.code = event_code;
e.user_data = NULL;
e.param = param;
e.deleted = 0;
e.stop_bubbling = 0;
e.stop_processing = 0;
/*从事件中使用的对象构建一个简单的链表,重要的是要知道这个对象是否被嵌套事件删除了从' event_cb '调用。
*Build a simple linked list from the objects used in the events
*It's important to know if this object was deleted by a nested event
*called from this `event_cb`.*/
e.prev = event_head;
event_head = &e;
/*发送事件 Send the event*/
lv_res_t res = event_send_core(&e);
/*从列表中删除此元素 Remove this element from the list*/
event_head = e.prev;
return res;
}
lv_event_get_user_data
When the event is registered on the object, get user_data
@param e pointer to event descriptor
@return return pointer user_data
void * lv_event_get_user_data(lv_event_t * e);
effect
Switch between Chinese and English
lv_event_stop_bubbling
* Stop event bubbling.
* Only valid when called in the middle of an event handling chain.
@param e pointer to event descriptor
void lv_event_stop_bubbling(lv_event_t * e);
effect
lv_event_stop_processing
* Stop processing this event.
* Only valid when called in the middle of an event handling chain.
@param e pointer to event descriptor
void lv_event_stop_processing(lv_event_t * e);
effect
lv_event_register_id
Register for a new, custom event ID.
Its usage is the same as the example sentence. ' LV_EVENT_CLICKED ' send custom event
@return return new event id
@example
uint32_t LV_EVENT_MINE = 0;
...
LV_EVENT_MINE = lv_event_register_id();
...
lv_event_send(obj, LV_EVENT_MINE, &some_data);
uint32_t lv_event_register_id(void);
effect
_lv_event_mark_deleted
Nested events can be invoked, one of which may belong to the object being deleted.
* Mark this object's 'event_temp_data' as deleted knowing that its 'lv_event_send' should return 'LV_RES_INV'
@param obj Pointer to an object marked as deleted
void _lv_event_mark_deleted(struct _lv_obj_t * obj);
void _lv_event_mark_deleted(lv_obj_t * obj)
{
lv_event_t * e = event_head;
while(e) {
if(e->current_target == obj || e->target == obj) e->deleted = 1;
e = e->prev;
}
}
effect
lv_obj_add_event_cb
Add an event handler to an object.
Used by the user to react to events that occur on the object.
An object can have multiple event handlers. They are called in the same order as they were added.
@param obj Pointer to an object
@param filter should be invoked with the event code (eg: ' LV_EVENT_CLICKED '). ' LV_EVENT_ALL ' can be used to receive all events.
@param event_cb New event function
@param user_data Custom data will be available in 'event_cb'
@return Returns a pointer to the event descriptor. Available in ::lv_obj_remove_event_dsc
struct _lv_event_dsc_t * lv_obj_add_event_cb(struct _lv_obj_t * obj, lv_event_cb_t event_cb, lv_event_code_t filter,void * user_data);
effect
lv_obj_remove_event_cb
Event handler function for deleting objects.
@param obj Pointer to an object
@param event_cb is the event function to be removed, or ' NULL ' is the first added event callback function
@return @returns true if any event handlers are removed
bool lv_obj_remove_event_cb(struct _lv_obj_t * obj, lv_event_cb_t event_cb);
effect
lv_obj_remove_event_cb_with_user_data
Removes an event handler with the specified user_data from an object.
@param obj pointer to an object
@param event_cb event function deletes, or ' NULL ' only important for ' user_data '.
@param event_user_data user_data specified in ::lv_obj_add_event_cb
@return @returns true if any event handlers are removed
bool lv_obj_remove_event_cb_with_user_data(struct _lv_obj_t * obj, lv_event_cb_t event_cb,const void * event_user_data);
effect
lv_obj_remove_event_dsc
Deprecated because it doesn't work if more than one event handler is added to an object.
Delete an event handler for an object.
@param obj pointer to an object
@param event_dsc pointer to the event descriptor to be deleted (returned by ::lv_obj_add_event_cb)
@return @returns true if any event handlers are deleted
bool lv_obj_remove_event_dsc(struct _lv_obj_t * obj, struct _lv_event_dsc_t * event_dsc);
effect
lv_obj_get_event_user_data
User data for the event callback object. Will always return the first object matching ' event_cb '.
@param obj pointer points to an object
@param event_cb event function
@returns user_data
void * lv_obj_get_event_user_data(struct _lv_obj_t * obj, lv_event_cb_t event_cb);
effect
lv_event_get_indev
Gets the input device passed as a parameter to indev related events.
@param e A pointer to the event
@return returns the indev that triggered the event, or NULL if an event that is not related to indev is called
lv_indev_t * lv_event_get_indev(lv_event_t * e);
effect
lv_event_get_draw_part_dsc
Get the part draw descriptor passed as a parameter to ' lv_event_draw_part_begin /END '.
@param e Pointer to the event
@return Returns the component draw descriptor to hook graphics, or NULL if calling an unrelated event
lv_obj_draw_part_dsc_t * lv_event_get_draw_part_dsc(lv_event_t * e);
effect
lv_event_get_draw_ctx
Get the drawing context, which should be the first parameter of the drawing function.
Namely: ' LV_EVENT_DRAW_MAIN/POST ', ' LV_EVENT_DRAW_MAIN/POST_BEGIN ', ' LV_EVENT_DRAW_MAIN/POST_END '
@param e pointer to the event
@return returns the pointer to the drawing context, or NULL if an unrelated event is called
lv_draw_ctx_t * lv_event_get_draw_ctx(lv_event_t * e);
effect
lv_event_get_old_size
Gets the old area of the object before its size changed. Can be used in ' LV_EVENT_SIZE_CHANGED '
@param e pointer to event
@return Returns the original absolute area, or NULL if calling an unrelated event
const lv_area_t * lv_event_get_old_size(lv_event_t * e);
effect
lv_event_get_key
Get the key passed as a parameter to the event. Can be used in "LV_EVENT_KEY"
@param e pointer to the event
@return returns the trigger key or NULL if calling an unrelated event
uint32_t lv_event_get_key(lv_event_t * e);
effect
lv_event_get_scroll_anim
Get the animation descriptor for scrolling.
You can use @param e pointer to the event @return in "LV_EVENT_SCROLL_BEGIN"
to return the animation of the scrolling object. (can be modified as needed)
lv_anim_t * lv_event_get_scroll_anim(lv_event_t * e);
effect
lv_event_set_ext_draw_size
Set the new extra draw size. Can be used in "lv_event_ref_ext_draw_size"
@param e pointer to event
@param size new extra draw size
void lv_event_set_ext_draw_size(lv_event_t * e, lv_coord_t size);
effect
lv_event_get_self_size_info
Get a pointer to a "lv_point_t" variable in which to store your own size ("point->x" for width and "point->y" for height).
Can be used in ' LV_EVENT_GET_SELF_SIZE '
@param e pointer to event
@return returns pointer to ' lv_point_t ' or NULL if calling unrelated event
lv_point_t * lv_event_get_self_size_info(lv_event_t * e);
effect
lv_event_get_cover_area
Gets a pointer to an area that should be checked to see if the object completely covers it.
Available for "LV_EVENT_HIT_TEST"
@param e pointer to event
@return returns a region with absolute coordinates to check
const lv_area_t * lv_event_get_cover_area(lv_event_t * e);
effect
lv_event_set_cover_res
* Set override check result. The ::lv_cover_check_info_t element can be parsed using
@param e pointer to event @param in "LV_EVENT_COVER_CHECK"
void lv_event_set_cover_res(lv_event_t * e, lv_cover_res_t res);