Skip to main content
Version: Next 🚧

定时重绘

JS 源码中的 update() 函数通过调用 window.requestAnimationFrame() 来让 update() 能够在每次动画帧被调用,虽然 LCUI 中并没有这种函数,但可以用定时器实现类似的效果。

首先给部件定义私有数据的结构,里面的 timer 成员用于存放定时器的编号:

typedef struct ui_fabric_t {
int timer;
} ui_fabric_t;

然后添加定时器的创建和销毁代码,以及相关函数:

src/main.c
void ui_fabric_on_frame(ui_widget_t *w)
{

}

void ui_fabric_on_init(ui_widget_t *w)
{
ui_fabric_t *data;
ui_fabric_proto->proto->init(w);
data = ui_widget_add_data(w, ui_fabric_proto, sizeof(ui_fabric_t));
data->timer = lcui_set_interval(LCUI_MAX_FRAME_MSEC,
(timer_callback)ui_fabric_on_frame, w);
}

void ui_fabric_on_destroy(ui_widget_t *w)
{
ui_fabric_t *data;
data = ui_widget_get_data(w, ui_fabric_proto);
lcui_destroy_timer(data->timer);
}

这样,ui_fabric_on_frame() 函数就能每隔一段时间被调用。