mcu_ab568x/userboot240328/app/platform/libs/api_gui.h
2025-05-30 18:03:10 +08:00

160 lines
6.0 KiB
C
Raw Permalink 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 _API_GUI_H
#define _API_GUI_H
typedef struct rect_t_ {
s16 x;
s16 y;
s16 wid;
s16 hei;
} rect_t;
typedef struct point_t_ {
s16 x;
s16 y;
} point_t;
typedef struct area_t_ {
s16 wid;
s16 hei;
} area_t;
typedef void widget_t;
typedef void widget_page_t;
typedef void widget_image_t;
typedef void widget_icon_t;
typedef void widget_text_t;
typedef void widget_rect_t;
//=== 常用颜色非常用颜色可以用make_color函数来生成 ===
#define COLOR_WHITE 0xFFFF
#define COLOR_BLACK 0
#define COLOR_RED 0xF800
#define COLOR_GREEN 0x07E0
#define COLOR_BLUE 0x001F
#define COLOR_YELLOW 0xFFE0
#define COLOR_MAGENTA 0xF81F
#define COLOR_CYAN 0x07FF
#define COLOR_GRAY 0x8410
#define COLOR_DARKGRAY 0xAD55
#define COLOR_DIMGRAY 0x6B4D
//=== GUI ===
//GUI初始化参数
typedef struct gui_init_param_t_ {
u16 screen_width; //屏幕宽
u16 screen_height; //屏幕高
u8 *element_buf; //element与widget缓存
u8 *widget_buf;
u16 element_buf_size;
u16 widget_buf_size;
u8 *temp_buf; //中间计算缓存
u32 temp_buf_size; //中间计算缓存大小
u8 *lines_buf; //推屏缓存(双份)
u32 lines_buf_size; //推屏缓存大小
u16 lines_count; //每次推屏的行数
u16 maxsize_parbuf; //PAR解码缓存
u32 font_res_addr; //字库资源地址
u16 max_font_size;
u8 font_wspace; //字的间距
u8 font_hspace;
u8 rsvd[20];
} gui_init_param_t;
void os_gui_init(const gui_init_param_t *param); //GUI初始化
void os_gui_draw(void); //TE信号起来后GUI开始绘制图形
void gui_process(void); //主循环调用更新Widget绘制
void gui_set_te_margin(u8 margin); //设置TE时隙
void gui_widget_refresh(void); //刷新widget
void os_gui_draw_w4_done(void); //等待当前帧刷完
//生成一个RGB565的颜色值
u16 make_color(u8 r, u8 g, u8 b);
//=== Widget Common ===
//从Widget Pool中创建一个Page, 最多允许创建两个
widget_page_t *widget_pool_create(bool flag_top);
//清除一个从Widget Pool中创建的Page
void widget_pool_clear(widget_page_t *widget);
//获取第一个Widget配合widget_get_next来遍历所有Widget
void *widget_get_head(void);
widget_t *widget_get_next(const widget_t *widget);
//获取Widget的父Page
widget_page_t *widget_get_parent(const widget_t *widget);
//设置Widget的Alpha值
void widget_set_alpha(widget_t *widget, u8 alpha);
//设置Widget按中心点来设置坐标(默认为按中心对齐,改false则按左上角对齐)
void widget_set_align_center(widget_t *widget, bool align_center);
//设置Widget坐标
void widget_set_pos(widget_t *widget, s16 x, s16 y);
//设置Widget大小
void widget_set_size(widget_t *widget, s16 width, s16 height);
//设置Widget坐标及大小
void widget_set_location(widget_t *widget, s16 x, s16 y, s16 width, s16 height);
//获取Widget坐标及大小
rect_t widget_get_location(const widget_t *widget);
//获取Widget绝对坐标及大小
rect_t widget_get_absolute(const widget_t *widget);
//设置Widget是否可见
void widget_set_visible(widget_t *widget, bool visible);
//获取显示状态
bool widget_get_visble(widget_t *widget);
//=== Widget Page ===
//创建一个Page
widget_page_t *widget_page_create(widget_page_t *parent);
//判断是否为一个Page
bool widget_is_page(const void *widget);
//设置Page client相对Page Window左上的坐标。0,0则对齐到左上角
void widget_page_set_client(widget_page_t *widget, s16 x, s16 y);
//设置Page window缩放到的大小。0,0则不进行缩放
void widget_page_scale_to(widget_page_t *widget, s16 wid, s16 hei);
//更新Page信息
void widget_page_update(void);
//=== Widget Image ===
enum {
ROT_MODE_NORMAL, //普通旋转模式
ROT_MODE_X, //只旋转X (平行四边形, 2.5D效果)
};
//创建一张图片
widget_image_t *widget_image_create(widget_page_t *parent, u32 res_addr);
//设置图片
void widget_image_set(widget_image_t *img, u32 res_addr);
//获取图像尺寸
area_t widget_image_get_size(widget_image_t *img);
//设置图片的旋转角度
void widget_image_set_rotation(void *img_ptr, s16 angle);
//按坐标设置图像旋转角度
void widget_image_set_rotation_bypos(widget_image_t *img, s16 x, s16 y);
//设置图片的旋转中心点
void widget_image_set_rotation_center(void *img_ptr, s16 x, s16 y);
//设置图像旋转模式
void widget_image_set_rotation_mode(widget_image_t *img, u8 mode);
//=== Widget Icon ===
//创建一个图标(图标与图片的区别是图标不支持旋转更省RAM资源)
widget_icon_t *widget_icon_create(widget_page_t *parent, u32 res_addr);
//判断是否是一个图标
bool widget_is_icon(widget_icon_t *icon);
//设置图标
void widget_icon_set(widget_icon_t *icon, u32 res_addr);
//=== Widget Text ===
//创建一个文本. max_word_cnt为最多多少个字(不分全半角),文本不支持align center, 只支持以左上角为坐标
widget_text_t *widget_text_create(widget_page_t *parent, u16 max_word_cnt);
//设置文件内容
void widget_text_set(widget_text_t *txt, const char *text);
//设置文本颜色
void widget_text_set_color(widget_text_t *txt, u16 color);
//设置文本是否自动分行
void widget_text_set_wordwrap(widget_text_t *txt, bool wordwrap);
//获取字高
u8 widget_text_get_height(void);
//=== Widget Rect ===
//创建一个矩形
widget_rect_t *widget_rect_create(widget_page_t *parent);
//设置矩形的填充颜色
void widget_rect_set_color(widget_rect_t *rect, u16 color);
#endif // _API_GUI_H