当前位置:   article > 正文

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

ocqjgui

上面是我的微信和QQ群,欢迎新朋友的加入。

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

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

程序接口定义三个文件

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

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

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

首先看ocuser

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

其中最重要的函数是:

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

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

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

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

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

  1. //颜色控制结构体
  2. typedef struct
  3. {
  4. uint8_t fontForm;//字符类型
  5. uint32_t textColor;//字体颜色
  6. uint32_t textBackColor;//字体背景色
  7. }ocFont_t;

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/787425
推荐阅读
相关标签
  

闽ICP备14008679号