EmbGUI 适用于单片机平台做简单的界面显示。
简介
EMWIN 和 LVGL 等 GUI 库虽然具有组件丰富,便于移植和应用等特点,但有一个令人烦恼的诟病,那就是卡顿。EmbGUI 就是专门用于解决卡顿的问题。EmbGUI 具有极高的自由度,提供了Text、按钮、绘曲线、行输入、单选框等基本组件,用户可以自由更改里边的源码以获得最佳的 GUI 体验。
文件夹介绍
EmbGUI 源码有 4 个文件夹,分别是 ”App“、”Module“、”Platform“ 和 ”Widget“,下边分别介绍。
1、App 文件夹:此文件夹用于存放用户应用代码,源码发布时为空。
2、Module 文件夹:此文件夹用于存放用户写的 GUI 组件,例如用户写了个通用键盘界面,此时可以将键盘界面相关代码放到此文件夹。
3、Platform 文件夹:此文件夹用于存放移植相关文件。
4、Widget 文件夹:用于存放各个控件的源码。
移植
GUIConf.h 介绍
GUIConf.h 用于配置 EmbGUI,包括屏幕分辨率、选用的像素点格式、支持的字体类型、支持显示的图片格式等等。
GUIPlatform.h 介绍
GUIPlatform.h 定义了 EmbGUI 常用的 API 函数,EmbGUI 里所有控件均是采用这些 API 函数绘制图像。
GUIPlatform.c 介绍
GUIPlatform.c 即为平台移植文件,用户需要根据自己的需要加以完善。
1、画点函数。EmbGUI 的画点函数要求要能绘制指定大小的点,如下所示。为了兼容超大分辨率,EmbGUI 所有的坐标参数均为无符号 32 位整型,同时为了
void GUIDrawPoint(u32 x, u32 y, u32 size, u32 color)
{
int a, b;
int di;
int i, p;
if(0 == size){return;}
a = 0; b = size;
di = 3 - (size << 1);
while(a <= b)
{
i = a, p = b;
while(i > 0)
{
LCDFastDrawPoint(x + b,y - i, color);
LCDFastDrawPoint(x - i,y + b, color);
i--;
}
while( p > 0)
{
LCDFastDrawPoint(x - a, y - p, color);
LCDFastDrawPoint(x - p, y - a, color);
LCDFastDrawPoint(x + a, y - p, color);
LCDFastDrawPoint(x - p, y + a, color);
LCDFastDrawPoint(x + a, y + p, color);
LCDFastDrawPoint(x + p, y + a, color);
p--;
}
a++;
//Bresenham算法画圆
if(di < 0)
{
di += 4 * a + 6;
}
else
{
di += 10 + 4 * (a - b);
b--;
}
}
LCDFastDrawPoint(x, y, color); //圆心坐标
}