WouoUI/Third-party-design/platform-test/Gui/gui_main.h
2023-08-16 09:56:20 +08:00

185 lines
4.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __GUI_MAIN_H
#define __GUI_MAIN_H
#include "main.h"
#include "stdbool.h"
#include "string.h"
#include "math.h"
//总目录,缩进表示页面层级
enum
{
M_WINDOW,
M_CONFIRM_WINDOW,
M_SLEEP,
M_MAIN,
M_EDITOR,
M_KNOB,
M_KRF,
M_KPF,
M_VOLT,
M_COUNT,
M_COUNT_SHOW,
M_RANGING,
M_SETTING,
M_ABOUT,
};
//状态,初始化标签
enum
{
S_FADE, //转场动画
S_WINDOW, //弹窗初始化
S_CONFIRM_WINDOW, //弹窗初始化
S_LAYER_IN, //层级初始化
S_LAYER_OUT, //层级初始化
S_NONE, //直接选择页面
};
// 按键ID
enum
{
BTN_ID_CC = 0, // 逆时针旋转
BTN_ID_CW = 1, // 顺时针旋转
BTN_ID_SP = 2, // 短按
BTN_ID_LP = 3, // 长按
};
// 按键变量
#define BTN_PARAM_TIMES 2 // 由于uint8_t最大值可能不够但它存储起来方便这里放大两倍使用
//按键信息
typedef struct
{
uint8_t id;
bool pressed;
}M_BTN_INFO;
//菜单结构体
typedef struct MENU
{
char *m_select;
} M_SELECT;
/************************************* 页面变量 *************************************/
//OLED变量
#define DISP_H 64 //屏幕高度
#define DISP_W 128 //屏幕宽度
//UI变量
#define UI_DEPTH 20 //最深层级数
#define UI_MNUMB 50 //菜单数量
// 列表变量
// 默认参数
#define LIST_FONT u8g2_font_HelvetiPixel_tr // 列表字体
#define LIST_TEXT_H 8 // 列表每行文字字体的高度
#define LIST_LINE_H 16 // 列表单行高度
#define LIST_TEXT_S 4 // 列表每行文字的上边距,左边距和右边距,下边距由它和字体高度和行高度决定
#define LIST_BAR_W 5 // 列表进度条宽度需要是奇数因为正中间有1像素宽度的线
#define LIST_BOX_R 0.5 // 列表选择框圆角
// 超窄行高度测试
/*
#define LIST_FONT u8g2_font_4x6_tr // 列表字体
#define LIST_TEXT_H 5 // 列表每行文字字体的高度
#define LIST_LINE_H 7 // 列表单行高度
#define LIST_TEXT_S 1 // 列表每行文字的上边距,左边距和右边距,下边距由它和字体高度和行高度决定
#define LIST_BAR_W 7 // 列表进度条宽度需要是奇数因为正中间有1像素宽度的线
#define LIST_BOX_R 0.5 // 列表选择框圆角
*/
enum
{
DISP_BRI, //屏幕亮度
TILE_ANI, //磁贴动画速度
LIST_ANI, //列表动画速度
WIN_ANI, //弹窗动画速度
SPOT_ANI, //聚光动画速度
TAG_ANI, //标签动画速度
FADE_ANI, //消失动画速度
BTN_SPT, //按键短按时长
BTN_LPT, //按键长按时长
TILE_UFD, //磁贴图标从头展开开关
LIST_UFD, //菜单列表从头展开开关
TILE_LOOP, //磁贴图标循环模式开关
LIST_LOOP, //菜单列表循环模式开关
WIN_BOK, //弹窗背景虚化开关
KNOB_DIR, //旋钮方向切换开关
DARK_MODE, //黑暗模式开关
UI_PARAM, //16//参数数量
};
typedef struct
{
bool init;
uint8_t num[UI_MNUMB];
uint8_t select[UI_DEPTH];
uint8_t layer;
uint8_t index; // = M_SLEEP;
uint8_t state; // = S_NONE;
bool sleep; // = true;
uint8_t fade; // = 1;
uint8_t param[UI_PARAM];
} M_UI;
typedef struct
{
float title_y_calc; //= TILE_INDI_S + (TILE_INDI_H - TILE_B_TITLE_H) / 2 + TILE_B_TITLE_H * 2;
float title_y_trg_calc; //= TILE_INDI_S + (TILE_INDI_H - TILE_B_TITLE_H) / 2 + TILE_B_TITLE_H;
int16_t temp;
bool select_flag;
float icon_x;
float icon_x_trg;
float icon_y;
float icon_y_trg;
float indi_x;
float indi_x_trg;
float title_y;
float title_y_trg;
} M_TILE;
//磁贴变量
//所有磁贴页面都使用同一套参数
#define TILE_B_FONT u8g2_font_helvB18_tr //磁贴大标题字体
#define TILE_B_TITLE_H 18 //磁贴大标题字体高度
#define TILE_ICON_H 30 //磁贴图标高度
#define TILE_ICON_W 30 //磁贴图标宽度
#define TILE_ICON_S 36 //磁贴图标间距
#define TILE_INDI_H 27 //磁贴大标题指示器高度
#define TILE_INDI_W 7 //磁贴大标题指示器宽度
#define TILE_INDI_S 36 //磁贴大标题指示器上边距
typedef void (*fun_callback_t)(int number);//声明回调函数指针
extern M_BTN_INFO btn;
extern M_UI ui;
char *itoa(uint32_t num);
char *ftoa(float num);
//通知需要存储参数
void eeprom_notify_change(void);
// 动画函数
void animation(float *a, float *a_trg, uint8_t n);
// 显示数值的初始化
void check_box_v_init(uint8_t *param);
// 列表类页面通用显示函数
void list_show(M_SELECT arr[], uint8_t ui_index);
// 列表类页面旋转时判断通用函数
void list_rotate_switch();
// 弹窗数值初始化
void window_value_init(char title[], uint8_t select, uint8_t *value, uint8_t max, uint8_t min, uint8_t step, M_SELECT *bg, uint8_t index);
// 确认弹窗数值初始化
void confirm_window_value_init(char title[], uint8_t _select_btn, fun_callback_t _cb, M_SELECT *bg, uint8_t index);
void gui_btn_send_signal(uint8_t btn_id,uint8_t event);
void gui_task(void);
void gui_init(void);
#endif /****** __GUI_MAIN_H ******/