GuiLite/doc/CodeWalkthrough-cn.md
2018-06-11 15:02:29 +08:00

85 lines
6.1 KiB
Markdown
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.

# 代码结构及注释
gui: 1实现了各种常规控件例如按钮标签键盘及容器例如视窗对话框滑动页面开发者可以根据自己的需要直接在相应的代码上进行修改或重绘开发出有自己风格特色的界面2实现了用户输入例如手指按下/释放的消息传递将用户的输入信息传递到整个UI体系树中并调用相应的响应回调函数开发者可以根据自己的需要添加/修改响应回调函数。
core: 实现了各个平台例如Windows, Linux的封装这些封装包括了基本的操作系统接口底层绘制图层管理和消息传递。由于开发者面对的应用场景有所不同所需的操作系统接口也有区别core中只提供了最基础的接口形式开发者可以根据自己的需要直接在api.h/api.cpp中添加新的操作系统接口或**单片机接口**。
最后,代码的更新/发布,不会作具体通知,请开发者随时更新代码库。
## GuiLite的基本原理
GuiLite只作两个工作界面元素管理和图形绘制。
## 界面元素管理
界面元素管理包括对所有控件buttonspinbox, lable, keyboard容器dialog, view管理具体的管理方法是为所有的界面元素建造一棵树利用这棵树实现对所有界面元素的遍历查询状态更改。
比如当你按下一个dialog的button时手指的位置信息xy会被传入树的根部root然后从root开始寻找哪个dialog被点中dialog的哪个button被点中并调用buton被点中的回调函数用于作相应处理一般会进行button的状态修改及重绘工作
### 界面元素如何创建
所有界面元素都继承自c_wnd类的对象对象被实例化时也就完成了界面元素的创建但此时的界面元素是孤独的与其他界面元素没有形成联系没有父母没有兄弟姐妹
### 界面元素如何被管理纳入tree中
新创建的界面元素纳入管理的过程就是为其添加父母兄弟姐妹的过程。使用的函数接口为connect();从此该界面元素会跟其他界面元素一样,纳入一棵树中,并随之响应用户可能的点击操作。
当需要删掉该界面元素时使用disconnect();从此该界面元素会断绝所有的父子关系,从树上摘下来,不再响应用户的触控操作;但对象本身不会被销毁。典型应用场景:软键盘的创建/退出。
## 图形绘制
图形绘制包括: 绘制方法和图层管理。其中点绘制是线/面/位图绘制的基础若干个点的绘制形成点面及位图图层管理则是管理多个界面元素的遮挡关系系统默认支持3层遮挡关系这3个层次可以为视图背景层对话框层keyboard/spinbox控件层。
### 绘制方法
请参看文件bitmap.cpp和surface.cpp中的draw_xxx()函数。
为了发挥GPU的加速功能也可以通过改写draw_xxx/fill_xxx函数使用GPU特性来提升绘制效率。
### 图层管理
GuiLite的所有图层如下图所示
![Graphic layer](GraphicLayer.png)
display层
该层对应了物理显存display层决定了一个显示终端的最终显示效果通常系统中至少有一个display层。
surface层
该层属于display层的一个部分它为左右滑动而存在每一张滑动页面均对应了一个surface层surface层决定了一个滑动页面的最终显示效果通常1个display层会对应多个surface层。
frame层:
该层属于surface层的一个部分它现实叠加界面元素而存在。
### 文件注释
| core 文件名称 | 代码简介 |
| --- | --- |
| bitmap.cpp | 绘制位图支持16 bits和32 bits |
| cmd_target.cpp | 映射UI消息及用户自定义的消息 |
| display.cpp | 生成显示设备设定surface的数目一个surface对应一个滑动页面 |
| rect.cpp | UI元素的位置信息 |
| surface.cpp | 实现像素点的绘制并对各个图层layer进行管理 |
| wave_buffer.cpp | 波形数据的缓冲管理 |
| wave_ctrl.cpp | 实现波形控件 |
| wnd.cpp | UI元素的基本类定义所有的UI元素信息、绘制及管理办法 |
| word.cpp | 显示文字 |
| api_linux.cpp | Linux适配层 |
| api_win.cpp | Window适配层 |
| audio_linux.cpp | Linux audio适配层 |
| audio_win.cpp | Windows audio适配层 |
| msg_linux.cpp | Dispatch消息的Linux实现 |
| msg_win.cpp | Dispatch消息的Windows实现 |
| gui 文件名称 | 代码简介 |
| --- | --- |
| button.cpp | 按钮控件的绘制及用户点击响应函数 |
| dialog.cpp | 对话框的绘制及管理方法 |
| edit.cpp | Edit控件的绘制及用户点击响应函数 |
| gesture.cpp | 手势识别方法,包括:鼠标按下,弹起及滑动 |
| keyboard.cpp | 键盘控件的绘制及用户点击响应函数 |
| label.cpp | 标签控件的绘制 |
| list_box.cpp | List控件的绘制及用户点击响应函数 |
| shape_resource.cpp | 自定义的形状资源,主要用于:支持圆角控件的缩放 |
| slide_group.cpp | 滑动页面的显示及管理 |
| spinbox.cpp | Spinbox控件的绘制及用户点击响应函数 |
| table.cpp | Table控件的绘制 |
### 函数接口注释
| 函数名称 | display.cpp 函数接口注释 |
| --- | --- |
| c_display | c_display构造函数初始化显示参数。输入物理framebuffer指针物理显示器宽度物理显示器高度surface宽度surface高度颜色深度surface个数/滑动页面的个数 |
| create_surface | 创建surface/滑动页面。输入: 用户ID图层的个数|
| merge_surface | 横向组合surface多用于滑动surface。输入待组合的surface源1待组合的surface源2surface源1的起始点x坐标surface源2的起始点x坐标surface源1的起始点y坐标surface源2的起始点y坐标横向组合的偏移距离输出可能改变当前显示内容 |
| get_frame_buffer | 获取该display的物理framebuffer指针 |
| snap_shot | 生成当前显示的快照并输出到bmp文件 |