2025-05-10 21:58:58 +08:00

218 lines
8.1 KiB
C

#define MAX_FILE_COUNT 10
#define PATH_VIDEO "/oem/"
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include "main.h"
#include "player_ui.h"
#include "furniture_control_ui.h"
///////////////////// VARIABLES ////////////////////
static lv_obj_t * ui_player_screen = NULL;
static lv_obj_t * player_label;
static lv_obj_t * ui_return;
static lv_obj_t * player_box = NULL;
static lv_obj_t * player_box_canvas = NULL;
static lv_obj_t * player_box_button = NULL;
static lv_obj_t * player_start_button = NULL;
static lv_obj_t * player_stop_button = NULL;
static lv_obj_t * player_list_button = NULL;
static lv_obj_t * video_label = NULL;
static lv_obj_t * video_list_box = NULL;
static lv_obj_t * video_list = NULL;
static lv_obj_t * bg_pic = NULL;
static lv_style_t style_txt;
static lv_style_t style_list;
//static lv_img_dsc_t * bg_snapshot;
///////////////////// TEST LVGL SETTINGS ////////////////////
///////////////////// ANIMATIONS ////////////////////
///////////////////// FUNCTIONS ////////////////////
// static void bg_pic_snapshot_blur(void)
// {
// lv_draw_rect_dsc_t dsc;
// bg_snapshot = lv_snapshot_take(bg_pic, LV_IMG_CF_TRUE_COLOR);
// lv_obj_t * canvas = lv_canvas_create(NULL);
// lv_area_t area;
// lv_canvas_set_buffer(canvas, bg_snapshot->data,
// bg_snapshot->header.w,
// bg_snapshot->header.h,
// bg_snapshot->header.cf);
// area.x1 = 0;
// area.y1 = 0;
// area.x2 = bg_snapshot->header.w - 1;
// area.y2 = bg_snapshot->header.h - 1;
// lv_canvas_blur_ver(canvas, &area, 100);
// lv_canvas_blur_hor(canvas, &area, 100);
// lv_draw_rect_dsc_init(&dsc);
// dsc.bg_opa = 70;
// dsc.bg_color = lv_color_black();
// lv_canvas_draw_rect(canvas, 0, 0,
// bg_snapshot->header.w,
// bg_snapshot->header.h, &dsc);
// lv_obj_del(canvas);
// }
static void style_init(void)
{
lv_style_init(&style_txt);
lv_style_set_text_font(&style_txt, ttf_main_s.font);
lv_style_set_text_color(&style_txt, lv_color_make(0xff, 0x23, 0x23));
lv_style_init(&style_list);
lv_style_set_text_font(&style_list, ttf_main_m.font);
lv_style_set_text_color(&style_list, lv_color_black());
}
void player_page_jump_furniture_control_callback(lv_event_t* event) {
printf("player_page_jump_furniture_control_callback is into \n");
furniture_control_ui_init();
lv_obj_del(ui_player_screen);
//free(bg_snapshot);
ui_player_screen = NULL;
video_list_box = NULL;
}
void video_name_callback(lv_event_t* event) {
char * file_name = lv_event_get_user_data(event);
printf("video_name select file %s\n", file_name);
lv_label_set_text(video_label, file_name);
lv_obj_del(video_list_box);
video_list_box = NULL;
}
void player_list_button_callback(lv_event_t* event) {
printf("player_list_button_callback is into \n");
DIR *dir;
struct dirent *entry;
int file_count = 0;
if (video_list_box == NULL) {
video_list_box = lv_obj_create(player_box);
//lv_obj_remove_style_all(video_list_box);
lv_obj_set_width(video_list_box, lv_pct(50));
lv_obj_set_height(video_list_box, lv_pct(40));
lv_obj_align(video_list_box, LV_ALIGN_TOP_LEFT, 0, lv_pct(40));
video_list = lv_list_create(video_list_box);
lv_obj_set_size(video_list, lv_pct(100), lv_pct(100));
lv_obj_center(video_list);
lv_obj_add_style(video_list, &style_list, LV_PART_MAIN);
lv_obj_set_style_pad_column(video_list, 10, LV_PART_MAIN);
dir = opendir(PATH_VIDEO);
if (dir == NULL) {
printf("Error opening directory /oem\n");
return;
}
while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_REG) {
//add_file_to_list(entry->d_name);
lv_obj_t *obj_text = lv_list_add_btn(video_list, NULL, entry->d_name);
lv_obj_add_flag(obj_text, LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(obj_text, video_name_callback, LV_EVENT_CLICKED, entry->d_name);
file_count++;
if (file_count >= MAX_FILE_COUNT) {
break;
}
}
}
} else {
lv_obj_del(video_list_box);
video_list_box = NULL;
}
}
///////////////////// SCREENS ////////////////////
void ui_player_screen_init(void)
{
style_init();
ui_player_screen = lv_obj_create(NULL);
lv_obj_clear_flag(ui_player_screen, LV_OBJ_FLAG_SCROLLABLE); /// Flags
bg_pic = lv_img_create(ui_player_screen);
lv_obj_set_pos(bg_pic, 0, 0);
lv_img_set_src(bg_pic, BG_PIC_1);
//bg_pic_snapshot_blur();
ui_return = lv_img_create(ui_player_screen);
lv_img_set_src(ui_return, IMG_RETURN_BTN);
lv_obj_set_width(ui_return, LV_SIZE_CONTENT); /// 32
lv_obj_set_height(ui_return, LV_SIZE_CONTENT); /// 32
lv_obj_align(ui_return, LV_ALIGN_TOP_LEFT, 10, 10);
lv_obj_add_flag(ui_return, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_ADV_HITTEST); /// Flags
lv_obj_clear_flag(ui_return, LV_OBJ_FLAG_SCROLLABLE); /// Flags
if (ui_return != NULL) {
lv_obj_add_event_cb(ui_return, player_page_jump_furniture_control_callback, LV_EVENT_CLICKED, NULL);
}
player_label = lv_label_create(ui_player_screen);
lv_obj_set_width(player_label, 249);
lv_obj_set_height(player_label, 26);
lv_obj_align(player_label, LV_ALIGN_TOP_LEFT, 100, 20);
lv_obj_add_style(player_label, &style_txt_m, LV_PART_MAIN);
lv_label_set_text(player_label, "宣传视频");
player_box = lv_obj_create(ui_player_screen);
lv_obj_remove_style_all(player_box);
lv_obj_set_width(player_box, lv_pct(100));
lv_obj_set_height(player_box, lv_pct(80));
lv_obj_align(player_box, LV_ALIGN_TOP_LEFT, 0, lv_pct(10));
player_box_canvas = lv_obj_create(player_box);
lv_obj_remove_style_all(player_box_canvas);
lv_obj_set_width(player_box_canvas, lv_pct(100));
lv_obj_set_height(player_box_canvas, lv_pct(70));
player_box_button = lv_obj_create(player_box);
lv_obj_remove_style_all(player_box_button);
lv_obj_set_width(player_box_button, lv_pct(100));
lv_obj_set_height(player_box_button, lv_pct(30));
lv_obj_align(player_box_button, LV_ALIGN_TOP_LEFT, 0, lv_pct(70));
player_start_button = lv_img_create(player_box_button);
lv_img_set_src(player_start_button, IMG_PLAYER_START);
lv_obj_set_width(player_start_button, 128); /// 64
lv_obj_set_height(player_start_button, 128); /// 64
lv_obj_set_align(player_start_button, LV_ALIGN_CENTER);
lv_obj_add_flag(player_start_button, LV_OBJ_FLAG_CLICKABLE);
player_stop_button = lv_img_create(player_box_button);
lv_img_set_src(player_stop_button, IMG_PLAYER_STOP);
lv_obj_set_width(player_stop_button, 128); /// 64
lv_obj_set_height(player_stop_button, 128); /// 64
lv_obj_align(player_stop_button, LV_ALIGN_CENTER, 250, 0);
lv_obj_add_flag(player_stop_button, LV_OBJ_FLAG_CLICKABLE);
player_list_button = lv_img_create(player_box_button);
lv_img_set_src(player_list_button, IMG_PLAYER_LIST);
lv_obj_set_width(player_list_button, 128); /// 64
lv_obj_set_height(player_list_button, 128); /// 64
lv_obj_align(player_list_button, LV_ALIGN_CENTER, -250, 0);
lv_obj_add_flag(player_list_button, LV_OBJ_FLAG_ADV_HITTEST); /// Flags
lv_obj_clear_flag(player_list_button, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_add_flag(player_list_button, LV_OBJ_FLAG_CLICKABLE);
if (player_list_button != NULL) {
lv_obj_add_event_cb(player_list_button, player_list_button_callback, LV_EVENT_CLICKED, NULL);
}
video_label = lv_label_create(player_box_button);
lv_obj_set_width(video_label, LV_SIZE_CONTENT); /// 1
lv_obj_set_height(video_label, LV_SIZE_CONTENT); /// 1
lv_obj_align(video_label, LV_ALIGN_CENTER, 0, 100);
lv_obj_add_style(video_label, &style_txt_m, LV_PART_MAIN);
lv_label_set_text(video_label, "");
}
void player_ui_init(void)
{
if (!ui_player_screen)
ui_player_screen_init();
lv_disp_load_scr(ui_player_screen);
}