#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