page的子对象
1、控件创建时会发送信号给它的父对象:
lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
{
……
/*Send a signal to the parent to notify it about the new child*/
if(parent != NULL) {
parent->signal_cb(parent, LV_SIGNAL_CHILD_CHG, new_obj);
/*Invalidate the area if not screen created*/
lv_obj_invalidate(new_obj);
}
……
}
2、如果父对象是page时,子对像的父会被更改为page的扩展属性里面对像(ext->scrl)。这个对像就是个遮罩。
static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param)
{
……
child = lv_obj_get_child(page, NULL);
while(child != NULL) {
if(lv_obj_is_protected(child, LV_PROTECT_PARENT) == false) {
lv_obj_t * tmp = child;
child = lv_obj_get_child(page, child); /*Get the next child before move this*/
/* Reposition the child to take padding into account
* It's required to keep new the object on the same coordinate if FIT is enabled.*/
if((tmp->coords.x1 == page->coords.x1) &&
(fit_left == LV_FIT_TIGHT || fit_left == LV_FIT_MAX) &&
base_dir != LV_BIDI_DIR_RTL) {
tmp->coords.x1 += scrl_left;
tmp->coords.x2 += scrl_left;
}
else if((tmp->coords.x2 == page->coords.x2) &&
(fit_right == LV_FIT_TIGHT || fit_right == LV_FIT_MAX)
&& base_dir == LV_BIDI_DIR_RTL) {
tmp->coords.x1 -= scrl_right;
tmp->coords.x2 -= scrl_right;
}
if((tmp->coords.y1 == page->coords.y1) && (fit_top == LV_FIT_TIGHT || fit_top == LV_FIT_MAX)) {
tmp->coords.y1 += scrl_top;
tmp->coords.y2 += scrl_top;
}
lv_obj_set_parent(tmp, ext->scrl);
}
else {
child = lv_obj_get_child(page, child);
}
}
……
}