ocGUI编写(1)--框架设计

二维码是我创建的QQ群,欢迎新朋友加入。

最近入手一个开发板,上面有一个彩屏接口,考虑到方便自己平时的开发应用,准备做个简单的GUI库。

要求不需要太高,基本的图形解码以及简单的GUI创建就行。

程序接口定义三个文件

doc:包含一些文档介绍和开发工具

oclib:定义一些基础库函数,封装常用的功能模块

ocuser:应用层与底层驱动的接口。

首先看ocuser

当前只定义了几个简单的接口函数,采用的是点驱动方式,这个方式基本上可以适应各种屏幕和硬件平台,但是有一个问题,就是它的处理效率是最低的。现在GUI刚写,为了扩展性好,先使用这种方式,后面再考虑数据流的接口函数。

其中最重要的函数是:

/**********************************************
 * @brief :在指定的位置绘制一个像素点
 * @param : Xpos: x坐标
 * @param : Ypos: y坐标
 * @note  :初始化成功返回oc_OK,失败返回oc_ON
 * @retval: 绘制成功返回oc_OK,失败返回oc_ON
**********************************************/
uint8_t ocPutDot(uint16_t Xpos, uint16_t Ypos);

用户层需要提供一个接口,只要输入坐标点,就能打点。

这里有个问题,如何实现数据的清除和打点颜色的设置。

最开始的时候,我想过直接把颜色也作为一个参数添加进来,不过考虑了一下又算了,对于彩屏来说,有时候并不需要频繁的设置字体或者背景颜色,虽然只是一条命令的事情,但是在整个程序流程里面来说,设置颜色这个事情是可以被优化的。

那么对于字体颜色的控制我通过结构体设置,再通过一个子函数对其调用

//颜色控制结构体
typedef struct
{
	uint8_t fontForm;//字符类型
	uint32_t textColor;//字体颜色
	uint32_t textBackColor;//字体背景色
}ocFont_t;

对于这个GUI的设计,我的几点要求是

1.移植方便:只要在接口处提供一个打点函数,早期的emwin是要求一个打点和画线的函数

2.效率高:做过显示朋友都知道,GUI设计这块,经常出现的就是刷屏速度跟不上,我想设计的一个方式图像块传输方式,对屏幕界面做一个裁剪,分层若干块,然后每次传输按块传输

3.LIB组件式:程序以组件的方式设计,尽可能减少组件之间的联系,例如我不需要BPM解码,那就直接删除相关的文件。能够随意缩小体积

猜你喜欢

转载自blog.csdn.net/Jun626/article/details/81413623