mcu_hi3321_watch/middleware/services/gui/lvgl/sample/watch/app.c
2025-05-26 20:15:20 +08:00

103 lines
3.1 KiB
C

/*
* Copyright (c) @CompanyNameMagicTag. 2023. All rights reserved.
*/
#include "app.h"
#include "lvgl.h"
#include "lv_demo_watch_font.h"
#if LV_USE_DEMO_WATCH
#define CONT_WIDTH LV_HOR_RES
#define CONT_HEIGHT (LV_VER_RES / 8)
static lv_style_t g_labelStyle;
static lv_obj_t* g_btn = NULL;
static lv_obj_t* AddPage(lv_obj_t* menu, const char* name, const char* iconSrc)
{
lv_obj_t* page = lv_menu_cont_create(menu);
lv_obj_t* icon = lv_img_create(page);
if (iconSrc != NULL) {
#if LV_USE_IMAGE_CACHE_EXT
LvImgSetSrcWithCacheFlag(icon, iconSrc, false);
#else
LvImgSetSrcExt(icon, iconSrc);
#endif
lv_img_set_zoom(icon, 128); // 128: zoom
lv_obj_align(icon, LV_ALIGN_LEFT_MID, 0, 0);
}
lv_obj_add_style(icon, &g_labelStyle, LV_STATE_DEFAULT);
lv_obj_t* label = lv_label_create(page);
lv_label_set_text(label, name);
lv_obj_add_style(label, &g_labelStyle, LV_STATE_DEFAULT);
return page;
}
void SetBtnClickable(bool isClickable)
{
if (isClickable) {
lv_obj_add_flag(g_btn, LV_OBJ_FLAG_CLICKABLE);
} else {
lv_obj_clear_flag(g_btn, LV_OBJ_FLAG_CLICKABLE);
}
}
static void EventCb(lv_event_t* e)
{
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t* appList = (lv_obj_t*)lv_event_get_user_data(e);
if (code == LV_EVENT_CLICKED) {
lv_obj_add_flag(appList, LV_OBJ_FLAG_HIDDEN);
SetBtnClickable(false);
}
}
lv_obj_t* LvglPageMenuStart(lv_obj_t* parent)
{
lv_font_t* font22 = GetLvFont(22); // 22: size
lv_obj_t* menu = lv_menu_create(parent);
lv_obj_set_size(menu, LV_HOR_RES, LV_VER_RES);
lv_obj_clear_flag(menu, LV_OBJ_FLAG_CLICKABLE);
lv_obj_center(menu);
static lv_style_t mainMenu;
lv_style_init(&mainMenu);
lv_style_set_bg_opa(&mainMenu, LV_OPA_COVER);
lv_style_set_bg_color(&mainMenu, lv_color_black());
lv_obj_add_style(menu, &mainMenu, LV_STATE_DEFAULT);
lv_style_set_border_opa(&mainMenu, LV_OPA_0);
lv_style_set_border_width(&mainMenu, 0);
lv_style_init(&g_labelStyle);
lv_style_set_text_color(&g_labelStyle, lv_color_white());
lv_style_set_text_font(&g_labelStyle, font22);
lv_style_set_text_opa(&g_labelStyle, LV_OPA_COVER);
lv_style_set_bg_opa(&g_labelStyle, LV_OPA_0);
/* Create a main page */
lv_obj_t* mainPage = lv_menu_page_create(menu, NULL);
lv_obj_clear_flag(menu, LV_OBJ_FLAG_SCROLL_CHAIN);
AddPage(mainPage, "Alarm", "/user/res/APPLIST_ALARM.bin");
AddPage(mainPage, "Phone", "/user/res/APPLIST_CALLER_IMAGE.bin");
AddPage(mainPage, "Compass", "/user/res/APPLIST_COMPASS_IMAGE.bin");
AddPage(mainPage, "Setting", "/user/res/APPLIST_SETTING.bin");
AddPage(mainPage, "Blue Tooth", "/user/res/BLUETOOTH_TITLE.bin");
lv_menu_set_page(menu, mainPage);
g_btn = lv_obj_create(parent);
lv_obj_clear_flag(g_btn, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_size(g_btn, LV_PCT(20), LV_PCT(20)); // 20: PCT
lv_obj_align(g_btn, LV_ALIGN_CENTER, 0, 0);
lv_obj_add_event_cb(g_btn, EventCb, LV_EVENT_ALL, menu);
lv_obj_set_style_bg_opa(g_btn, LV_OPA_0, 0);
lv_obj_set_style_border_opa(g_btn, LV_OPA_0, 0);
return menu;
}
#endif