lock_lfvx/projects/lvgl/86box/main/page_load_ctrol.c

168 lines
5.7 KiB
C
Raw Normal View History

2025-10-10 16:07:00 +08:00
#include "os/os.h"
#include "lvgl.h"
#include "page_load_ctrol.h"
#include "ui.h"
#include "./common/ui_helpers.h"
//左右滑动的窗口管理
lv_obj_t *ui_tabview_screen;
lv_obj_t *ui_tabview;
lv_obj_t *ui_tab1;
lv_obj_t *ui_tab2;
lv_obj_t *ui_tab3;
lv_obj_t *ui_tab4;
lv_obj_t *ui_tab5;
lv_obj_t *ui_tab6;
int g_annim_flag = 0;
void ui_event_UiPage6_screen(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
lv_obj_t * target = lv_event_get_target(e);
if(event_code == LV_EVENT_GESTURE && lv_indev_get_gesture_dir(lv_indev_get_act()) == LV_DIR_TOP)
{
lv_scr_load_anim(ui_tabview_screen, LV_SCR_LOAD_ANIM_MOVE_TOP, 200, 0, true);
}
}
void ui_event_tabview_screen(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
lv_obj_t * target = lv_event_get_target(e);
if(event_code == LV_EVENT_GESTURE && lv_indev_get_gesture_dir(lv_indev_get_act()) == LV_DIR_BOTTOM)
{
if(1 == g_annim_flag)
{
bk_printf("[%s][%d] del annim when page ver change\r\n", __FUNCTION__, __LINE__);
lv_anim_del(NULL, (lv_anim_exec_xcb_t)_ui_anim_callback_set_x);
g_annim_flag = 0;
}
ui_UiPage6_screen_init();
lv_scr_load_anim(ui_UiPage6, LV_SCR_LOAD_ANIM_MOVE_BOTTOM, 200, 0, false);
}
if(event_code == LV_EVENT_SCREEN_LOADED) {
bk_printf("[%s][%d] play annim when page load\r\n", __FUNCTION__, __LINE__);
move_x_add_Animation(ui_cloudSmall1, 0);
mov_x_sub_Animation(ui_cloudSmall2, 0);
mov_x_sub_Animation(ui_cloudSmall1, 2000);
move_x_add_Animation(ui_cloudSmall2, 2000);
g_annim_flag = 1;
}
}
static void get_tab_act_index_event_handler(lv_event_t * e)
{
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t * obj = lv_event_get_target(e);
int tab_id = 0;
if(code == LV_EVENT_VALUE_CHANGED) {
if (obj)
{
tab_id = lv_tabview_get_tab_act(obj);
os_printf("tab_id:%d\r\n", tab_id);
if(tab_id != 0)
{
bk_printf("[%s][%d] del annim when page hor change\r\n", __FUNCTION__, __LINE__);
lv_anim_del(NULL, (lv_anim_exec_xcb_t)_ui_anim_callback_set_x);
g_annim_flag = 0;
}
else
{
if(0 == g_annim_flag)
{
bk_printf("[%s][%d] play annim when page hor change to 1\r\n", __FUNCTION__, __LINE__);
g_annim_flag = 1;
lv_obj_set_pos(ui_cloudSmall1, 246, 29);
lv_obj_set_pos(ui_cloudSmall2, 396, 80);
move_x_add_Animation(ui_cloudSmall1, 0);
mov_x_sub_Animation(ui_cloudSmall2, 0);
mov_x_sub_Animation(ui_cloudSmall1, 2000);
move_x_add_Animation(ui_cloudSmall2, 2000);
}
}
}
}
}
static void scroll_begin_event(lv_event_t * e)
{
lv_obj_t * cont = lv_event_get_target(e);
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t * tv = lv_obj_get_parent(cont);
if(lv_event_get_code(e) == LV_EVENT_SCROLL_END) {
lv_tabview_t * tabview = (lv_tabview_t *)tv;
lv_coord_t s = lv_obj_get_scroll_x(cont);
lv_point_t p;
lv_obj_get_scroll_end(cont, &p);
lv_coord_t w = lv_obj_get_content_width(cont);
lv_coord_t t;
if(lv_obj_get_style_base_dir(tv, LV_PART_MAIN) == LV_BASE_DIR_RTL) t = -(p.x - w / 2) / w;
else t = (p.x + w / 2) / w;
if(s < 0) t = tabview->tab_cnt - 1;
else if((t == (tabview->tab_cnt - 1)) && (s > p.x)) t = 0;
bool new_tab = false;
if(t != lv_tabview_get_tab_act(tv)) new_tab = true;
lv_tabview_set_act(tv, t, LV_ANIM_ON);
LOGI("scroll g_tab_act:%d, new_tab:%d\r\n", lv_tabview_get_tab_act(ui_tabview), new_tab);
}
}
void hor_page_load_main(void)
{
ui_tabview_screen = lv_obj_create(NULL);
lv_obj_add_event_cb(ui_tabview_screen, ui_event_tabview_screen, LV_EVENT_ALL, NULL);
ui_tabview = lv_tabview_create(ui_tabview_screen, LV_DIR_TOP, 0);
lv_obj_set_style_bg_color(ui_tabview, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(ui_tabview, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
//lv_obj_add_event_cb(lv_tabview_get_content(ui_tabview), scroll_begin_event, LV_EVENT_ALL, NULL);
lv_obj_add_event_cb(ui_tabview, get_tab_act_index_event_handler, LV_EVENT_VALUE_CHANGED, NULL);
lv_obj_t *tab1 = lv_tabview_add_tab(ui_tabview, "Tab 1");
lv_obj_t *tab2 = lv_tabview_add_tab(ui_tabview, "Tab 2");
lv_obj_t *tab3 = lv_tabview_add_tab(ui_tabview, "Tab 3");
lv_obj_t *tab4 = lv_tabview_add_tab(ui_tabview, "Tab 4");
lv_obj_t *tab5 = lv_tabview_add_tab(ui_tabview, "Tab 5");
lv_obj_t *tab6 = lv_tabview_add_tab(ui_tabview, "Tab 6");
lv_obj_set_style_pad_all(tab1, 0, 0);
lv_obj_set_style_radius(tab1, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_UiPage1_screen_init(tab1);
lv_obj_set_style_pad_all(tab2, 0, 0);
lv_obj_set_style_border_width(tab2, 0, 0);
ui_UiPage2_screen_init(tab2);
lv_obj_set_style_pad_all(tab3, 0, 0);
lv_obj_set_style_border_width(tab3, 0, 0);
ui_UiArcPage_screen_init(tab3);
lv_obj_set_style_pad_all(tab4, 0, 0);
lv_obj_set_style_border_width(tab4, 0, 0);
ui_UiPage3_screen_init(tab4);
lv_obj_set_style_pad_all(tab5, 0, 0);
lv_obj_set_style_border_width(tab5, 0, 0);
ui_UiPage4_screen_init(tab5);
lv_obj_set_style_pad_all(tab6, 0, 0);
lv_obj_set_style_border_width(tab6, 0, 0);
ui_UiPage5_screen_init(tab6);
lv_disp_load_scr(ui_tabview_screen);
}