HiFi player project, first commit.
This commit is contained in:
commit
4126ea13a1
49 files changed
+6333
No files matched your search
@@ -0,0 +1,114 @@
|
||||
/**
|
||||
****************************************************************************************************
|
||||
* @file ui_common.h
|
||||
* @author HiFi Player Project
|
||||
* @version V1.2
|
||||
* @date 2026-01-01
|
||||
* @brief 界面共用组件:配色、基础控件、底部按键提示条、按键高亮
|
||||
*
|
||||
* 所有 App 的界面都从这里取用公共资源,保证风格一致、代码不重复。
|
||||
****************************************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef __UI_COMMON_H
|
||||
#define __UI_COMMON_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "lvgl.h"
|
||||
|
||||
#include "app.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* ---------------- 屏幕 ---------------- */
|
||||
#define UI_HOR_RES 320
|
||||
#define UI_VER_RES 240
|
||||
#define UI_TICK_MS 50 /* 界面刷新 / 事件处理周期 */
|
||||
#define UI_KEY_FLASH_MS 400 /* 按键提示高亮持续时间 */
|
||||
|
||||
/* ---------------- 配色 ---------------- */
|
||||
#define UI_COL_BG 0x0B0E17
|
||||
#define UI_COL_PANEL 0x151B2B
|
||||
#define UI_COL_CARD 0x1C2438
|
||||
#define UI_COL_CARD_SEL 0x233A5C
|
||||
#define UI_COL_TRACK 0x232C42
|
||||
#define UI_COL_ACCENT 0x4FC3F7
|
||||
#define UI_COL_ACCENT2 0x7C4DFF
|
||||
#define UI_COL_TEXT 0xF2F5FF
|
||||
#define UI_COL_SUB 0x8A93A8
|
||||
#define UI_COL_DIM 0x5A6076
|
||||
#define UI_COL_OK 0x3DDC84
|
||||
#define UI_COL_WARN 0xFFB020
|
||||
#define UI_COL_ERR 0xFF5C5C
|
||||
|
||||
/* ---------------- 基础控件 ---------------- */
|
||||
|
||||
/** 给屏幕设置统一的背景与内边距 */
|
||||
void ui_style_screen(lv_obj_t *scr);
|
||||
|
||||
/** 创建一个无边框圆角容器 */
|
||||
lv_obj_t *ui_card(lv_obj_t *parent, lv_coord_t x, lv_coord_t y,
|
||||
lv_coord_t w, lv_coord_t h, uint32_t color, lv_coord_t radius);
|
||||
|
||||
/** 创建标签 */
|
||||
lv_obj_t *ui_label(lv_obj_t *parent, const char *text,
|
||||
const lv_font_t *font, uint32_t color);
|
||||
|
||||
/** 文本不同才更新,减少重绘 */
|
||||
void ui_label_set_if_changed(lv_obj_t *label, const char *text);
|
||||
|
||||
/** 秒数 -> "mm:ss" */
|
||||
void ui_format_time(uint32_t seconds, char *buffer, size_t size);
|
||||
|
||||
/* ---------------- 底部按键提示条 ---------------- */
|
||||
|
||||
typedef struct {
|
||||
lv_obj_t *card[APP_KEY_NUM];
|
||||
lv_obj_t *icon[APP_KEY_NUM];
|
||||
lv_obj_t *caption[APP_KEY_NUM];
|
||||
bool enabled[APP_KEY_NUM];
|
||||
int highlight; /* 当前高亮按键,-1 表示无 */
|
||||
} ui_key_bar_t;
|
||||
|
||||
/**
|
||||
* @brief 创建 4 个按键提示卡片(横向一排,位于屏幕底部)
|
||||
* @param symbols LV_SYMBOL_xxx 图标,可为 NULL
|
||||
* @param captions 卡片底部说明文字
|
||||
* @param enabled 该按键在当前界面是否可用(不可用显示为灰色)
|
||||
*/
|
||||
void ui_key_bar_create(lv_obj_t *parent, ui_key_bar_t *bar,
|
||||
const char *const symbols[APP_KEY_NUM],
|
||||
const char *const captions[APP_KEY_NUM],
|
||||
const bool enabled[APP_KEY_NUM]);
|
||||
|
||||
/** 设置某个按键的高亮状态(-1 表示全部取消) */
|
||||
void ui_key_bar_set_highlight(ui_key_bar_t *bar, int index);
|
||||
|
||||
/** 修改某个按键的图标(例如播放/暂停切换) */
|
||||
void ui_key_bar_set_icon(ui_key_bar_t *bar, int key, const char *symbol);
|
||||
|
||||
/** 修改某个按键的说明文字 */
|
||||
void ui_key_bar_set_caption(ui_key_bar_t *bar, int key, const char *caption);
|
||||
|
||||
/* ---------------- 按键高亮闪动 ---------------- */
|
||||
|
||||
typedef struct {
|
||||
int32_t key; /* 上次触发的按键,-1 表示无 */
|
||||
uint32_t tick; /* 触发时刻(lv_tick_get) */
|
||||
} ui_flash_t;
|
||||
|
||||
/** 记录一次按键,用于 400ms 高亮 */
|
||||
void ui_flash_trigger(ui_flash_t *flash, int key);
|
||||
|
||||
/** 返回当前应当高亮的按键(超时或未触发返回 -1) */
|
||||
int ui_flash_active(const ui_flash_t *flash);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __UI_COMMON_H */
|
||||
Reference in new issue
Block a user