GUI Guider v1.4.1 - Load Screen BUG

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

GUI Guider v1.4.1 - Load Screen BUG

4,672 Views
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 Replies

4,632 Views
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 Kudos
Reply

4,617 Views
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 Kudos
Reply

4,622 Views
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 Kudos
Reply

4,580 Views
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