GUI Guider v1.4.1 - Load Screen BUG

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

GUI Guider v1.4.1 - Load Screen BUG

4,677件の閲覧回数
yangqirong
Contributor II
- Environment
    * OS: Windows
    * GUI-Guider: 1.4.1-GA
    * LVGL: v8.2
 
当函数lv_scr_load_anim的形参time与delay同时为0时,d->scr_to_load == NULL永不成立,导致无法切换页面。
 
以下是一段由GUI Guider v1.4.1生成的切换页面代码:

 

static void screen_main_imgbtn_setting_event_handler(lv_event_t *e)
{
	lv_event_code_t code = lv_event_get_code(e);
	switch (code)
	{
	case LV_EVENT_RELEASED:
	{
		lv_disp_t * d = lv_obj_get_disp(lv_scr_act());
		if (d->prev_scr == NULL && d->scr_to_load == NULL)
		{
			if (guider_ui.screen_1_del == true)
				setup_scr_screen_1(&guider_ui);
			lv_scr_load_anim(guider_ui.screen_1, LV_SCR_LOAD_ANIM_FADE_ON, 0, 0, true);
		}
		guider_ui.screen_main_del = true;
	}
		break;
	default:
		break;
	}
}

 

 ↑↑↑所以,在版本v1.4.1中使用if (d->prev_scr == NULL && d->scr_to_load == NULL)替代版本v1.3.1的if (!lv_obj_is_valid(guider_ui.screen_2))来进行判断是不完全正确的。

 

以下是一段lv_scr_load_anim的代码:

 

...
    //这是一段lv_scr_load_anim的代码

    /*Shortcut for immediate load*/
    if(time == 0 && delay == 0) {
        scr_load_internal(new_scr);
        return;//当time与delay同时为0,直接跳出函数,scr_to_load并没有赋值NULL
    }

    lv_anim_t a_new;
    lv_anim_init(&a_new);
    lv_anim_set_var(&a_new, new_scr);
    lv_anim_set_start_cb(&a_new, scr_load_anim_start);
    lv_anim_set_ready_cb(&a_new, scr_anim_ready);//将scr_to_load赋值NULL却在这
    lv_anim_set_time(&a_new, time);
    lv_anim_set_delay(&a_new, delay);

...

 

4 返答(返信)

4,637件の閲覧回数
CarlosGarabito
NXP TechSupport
NXP TechSupport

Could you expose your issue in English please? The google traductor is inprecise and i cannot understand what are you saying.

 

Thanks

0 件の賞賛
返信

4,622件の閲覧回数
yangqirong
Contributor II

also...

void setup_ui(lv_ui *ui){
	init_scr_del_flag(ui);
	setup_scr_screen_main(ui);
	lv_scr_load(ui->screen_main);//'scr_to_load' away not NULL if use 'lv_scr_load' to load first screen, also cause load next screen cannot succeed.
}
0 件の賞賛
返信

4,627件の閲覧回数
yangqirong
Contributor II

The following code is generated by GUI Guide v1.4.1:

 

static void screen_main_imgbtn_setting_event_handler(lv_event_t *e)
{
	lv_event_code_t code = lv_event_get_code(e);
	switch (code)
	{
	case LV_EVENT_RELEASED:
	{
		lv_disp_t * d = lv_obj_get_disp(lv_scr_act());
		if (d->prev_scr == NULL && d->scr_to_load == NULL)
		{
			if (guider_ui.screen_1_del == true)
				setup_scr_screen_1(&guider_ui);
			lv_scr_load_anim(guider_ui.screen_1, LV_SCR_LOAD_ANIM_FADE_ON, 0, 0, true);
		}
		guider_ui.screen_main_del = true;
	}
		break;
	default:
		break;
	}
}

 

'd->scr_to_load == NULL' away false when the parameter 'time' and 'delay' of function 'lv_scr_load_anim' are both 0, that cause load screen cannot succeed.

 

In v1.4.1, used 'if (d->prev_scr == NULL && d->scr_to_load == NULL)' replace 'if (!lv_obj_is_valid(guider_ui.screen_xxxx))', That's not quite right.

 

 

...
    //This is a section of 'lv_scr_load_anim'

    /*Shortcut for immediate load*/
    if(time == 0 && delay == 0) {
        scr_load_internal(new_scr);
        return;//Return when the parameter 'time' and 'delay' of function 'lv_scr_load_anim' are both 0, that cause 'scr_to_load' is not NULL.
    }

    lv_anim_t a_new;
    lv_anim_init(&a_new);
    lv_anim_set_var(&a_new, new_scr);
    lv_anim_set_start_cb(&a_new, scr_load_anim_start);
    lv_anim_set_ready_cb(&a_new, scr_anim_ready);//But the 'scr_to_load' assignment NULL is here.
    lv_anim_set_time(&a_new, time);
    lv_anim_set_delay(&a_new, delay);
...

 

 

 

0 件の賞賛
返信

4,585件の閲覧回数
WenbinYuan
NXP Employee
NXP Employee

Hello @yangqirong ,

After check we found that the projects genereted by GUI Guider V1.4.1 like ScreenTransition are working good.

This bug has no effects in Gui guider V1.4.1 + LVGL V8.2.0, because in LVGL V8.2 there is no 

 /*Shortcut for immediate load*/
    if(time == 0 && delay == 0) {
        scr_load_internal(new_scr);
        return;
    }

in lv_scr_load_anim() function, please check LVGL github link:

https://github.com/lvgl/lvgl/blob/release/v8.2/src/core/lv_disp.c#:~:text=void-,lv_scr_load_anim,-(l... 

But we did found this bug during the development of new verion GUI Guider which is support LVGL V8.3.2, and it's already been fixed.

Thanks for your bug report.

Best Regards,

Wenbin