LVGL V8事件

事件

详细介绍
当发生用户可能感兴趣的事情时,LVGL 中会触发事件,例如当一个对象

  • 被点击
  • 滚动
  • 数值被改变
  • 重绘等。
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");
}

在示例中 LV_EVENT_CLICKED 意味着只有当对象发生点击事件时,就会触发事件从而进入事件处理回调函数 my_event_cb 。

函数接口

//事件回调函数
 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

*获得事件最初瞄准的对象。即使事情是冒泡,也是一样的。
@param e 指向事件描述符的指针
@return 返回event_code的目标

struct _lv_obj_t * lv_event_get_target(lv_event_t * e);

作用

中英文切换应用


lv_event_get_current_target

*获取事件的当前目标。它是事件处理程序被调用的对象。
*如果事件没有冒泡,则与“normal”目标相同。
@param e 指向事件描述符的指针
@return 返回指向event_code当前目标的指针

struct _lv_obj_t * lv_event_get_current_target(lv_event_t * e);

作用

中英文切换应用


lv_event_get_code

*获取事件的事件代码
@param e 指向事件描述符的指针
@return 返回事件代码。(如。“LV_EVENT_CLICKED”、“LV_EVENT_FOCUSED”等)

lv_event_code_t lv_event_get_code(lv_event_t * e);

作用


lv_event_get_param

*获取事件发送时传递的参数
@param e 指向事件描述符的指针
@return 返回指向参数的指针

void * lv_event_get_param(lv_event_t * e);

作用

返回事件结构体e的成员param

void * lv_event_get_param(lv_event_t * e)
{
    
    
    return e->param;
}

该成员param由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

当事件在对象上注册时,获取user_data
@param e 指向事件描述符的指针
@return 返回指针user_data

void * lv_event_get_user_data(lv_event_t * e);

作用

中英文切换应用


lv_event_stop_bubbling

*停止事件冒泡。
*仅当在事件处理链的中间调用时有效。
@param e 指向事件描述符的指针

void lv_event_stop_bubbling(lv_event_t * e);

作用


lv_event_stop_processing

*停止处理此事件。
*仅当在事件处理链的中间调用时有效。
@param e 指向事件描述符的指针

void lv_event_stop_processing(lv_event_t * e);

作用


lv_event_register_id

注册一个新的,自定义的事件ID。
它的用法和例句一样。’ LV_EVENT_CLICKED '发送自定义事件
@return 返回新的事件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);

作用


_lv_event_mark_deleted

可以调用嵌套事件,其中一个事件可能属于正在被删除的对象。
*将该对象的’ event_temp_data ‘标记为删除,以知道它的’ lv_event_send ‘应该返回’ LV_RES_INV ’
@param obj 指针指向一个对象,标记为已删除

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;
    }
}

作用


lv_obj_add_event_cb

为一个对象添加一个事件处理函数。
用于用户对对象发生的事件做出反应。
一个对象可以有多个事件处理程序。它们被调用的顺序与它们被添加的顺序相同。
@param obj 指针指向一个对象
@param filter 应该被调用事件代码(例如:’ LV_EVENT_CLICKED ‘)。’ LV_EVENT_ALL ‘可以用于接收所有事件。
@param event_cb 新的事件函数
@param user_data 自定义数据将在’ event_cb '中可用
@return 返回事件描述符的指针。可以在::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);

作用


lv_obj_remove_event_cb

删除对象的事件处理程序函数。
@param obj 指针指向一个对象
@param event_cb 是要删除的事件函数,或者’ NULL '是要删除第一个添加的事件回调函数
@return 如果任何事件处理程序被删除,@返回true

bool lv_obj_remove_event_cb(struct _lv_obj_t * obj, lv_event_cb_t event_cb);

作用


lv_obj_remove_event_cb_with_user_data

从一个对象中移除一个带有特定user_data的事件处理函数。
@param obj 指针指向一个对象
@param event_cb 事件函数删除,或’ NULL ‘只有’ user_data '重要。
@param event_user_data 指定在::lv_obj_add_event_cb中的user_data
@return 如果任何事件处理程序被删除,@返回true

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);

作用


lv_obj_remove_event_dsc

已弃用,因为如果一个对象中添加了多个事件处理程序,则不工作。
删除一个对象的事件处理函数。
@param obj 指针指向一个对象
@param event_dsc 指针指向要删除的事件描述符(由::lv_obj_add_event_cb返回)
@return 如果任何事件处理程序被删除,@返回true

bool lv_obj_remove_event_dsc(struct _lv_obj_t * obj, struct _lv_event_dsc_t * event_dsc);

作用


lv_obj_get_event_user_data

事件回调对象的用户数据。总是会返回第一个匹配’ event_cb '的对象。
@param obj指针指向一个对象
@param event_cb事件函数
@返回user_data

void * lv_obj_get_event_user_data(struct _lv_obj_t * obj, lv_event_cb_t event_cb);

作用


lv_event_get_indev

获取作为参数传递给indev相关事件的输入设备。
@param e 指向事件的指针
@return 返回触发事件的indev,如果调用与indev不相关的事件,则返回NULL

lv_indev_t * lv_event_get_indev(lv_event_t * e);

作用


lv_event_get_draw_part_dsc

获得部分绘制描述符作为参数传递到’ lv_event_draw_part_begin /END '。
@param e 指向事件的指针
@return 返回部件绘制描述符来挂钩图形,如果调用不相关的事件则返回NULL

lv_obj_draw_part_dsc_t * lv_event_get_draw_part_dsc(lv_event_t * e);

作用


lv_event_get_draw_ctx

获取绘制上下文,它应该是绘制函数的第一个参数。
即:’ LV_EVENT_DRAW_MAIN/POST ', ’ LV_EVENT_DRAW_MAIN/POST_BEGIN ', ’ LV_EVENT_DRAW_MAIN/POST_END ’
@param e 指向事件的指针
@return 返回绘制上下文的指针,如果调用不相关的事件,则返回NULL

lv_draw_ctx_t * lv_event_get_draw_ctx(lv_event_t * e);

作用


lv_event_get_old_size

获取对象在其大小改变前的旧区域。可以在’ LV_EVENT_SIZE_CHANGED '中使用
@param e 指向事件的指针
@return 返回原来的绝对区域,如果调用不相关的事件则返回NULL

const lv_area_t * lv_event_get_old_size(lv_event_t * e);

作用


lv_event_get_key

获取作为参数传递给事件的键。可以在“LV_EVENT_KEY”中使用
@param e 指向事件的指针
@return 返回触发键或NULL,如果调用一个不相关的事件

uint32_t lv_event_get_key(lv_event_t * e);

作用


lv_event_get_scroll_anim

获得滚动的动画描述符。可以在“LV_EVENT_SCROLL_BEGIN”中使用
@param e 指向事件的指针
@return 返回滚动对象的动画。(可根据需要修改)

lv_anim_t * lv_event_get_scroll_anim(lv_event_t * e);

作用


lv_event_set_ext_draw_size

设置新的额外绘制大小。可以在“lv_event_ref_ext_draw_size”中使用
@param e 指向事件的指针
@param size 新的额外的绘制大小

void lv_event_set_ext_draw_size(lv_event_t * e, lv_coord_t size);

作用


lv_event_get_self_size_info

获取一个指向“lv_point_t”变量的指针,在该变量中保存自己的大小(宽度为“point->x”和高度为“point->y”)。
可以在’ LV_EVENT_GET_SELF_SIZE ‘中使用
@param e 指向事件的指针
@return 返回指针到’ lv_point_t '或NULL,如果调用不相关的事件

lv_point_t * lv_event_get_self_size_info(lv_event_t * e);

作用


lv_event_get_cover_area

获得一个指向一个区域的指针,该区域应该检查对象是否完全覆盖了它。
可用于“LV_EVENT_HIT_TEST”
@param e 指向事件的指针
@return 返回一个带绝对坐标的区域进行检查

const lv_area_t * lv_event_get_cover_area(lv_event_t * e);

作用


lv_event_set_cover_res

*设置覆盖检查结果。可以在“LV_EVENT_COVER_CHECK”中使用
@param e 指向事件的指针
@param 对::lv_cover_check_info_t元素进行了解析

void lv_event_set_cover_res(lv_event_t * e, lv_cover_res_t res);

作用

猜你喜欢

转载自blog.csdn.net/m0_37187962/article/details/125660179