当前位置:网站首页>电子产品量产工具(4)-UI系统实现
电子产品量产工具(4)-UI系统实现
2022-08-05 05:16:00 【乛 乛 .】
电子产品量产工具
4 UI系统设计
4.1 UI系统头文件front_manager.h
在头文件中抽象出结构体来描述按键的位置、大小信息以及被按下后的处理信息
4.1.1 按钮结构体Button
typedef int (*ONDRAW_FUNC)(struct Button *ptButton, PDispBuff ptDispBuff);
typedef int (*ONPRESSED_FUNC)(struct Button *ptButton, PDispBuff ptDispBuff, PInputEvent ptInputEvent);
....
typedef struct Button {
char *name; /*按键名*/
int status; /*按键状态*/
Region tRegion; /*按键位置、大小信息*/
ONDRAW_FUNC OnDraw; /*绘制按键*/
ONPRESSED_FUNC OnPressed;/*按键处理函数*/
}Button, *PButton;
4.1.2 front_manager.h完整代码
#ifndef _UI_H
#define _UI_H
#include <common.h>
#include <disp_manager.h>
#include <input_manager.h>
#define BUTTON_DEFAULT_COLOR 0xff0000
#define BUTTON_PRESSED_COLOR 0x00ff00
#define BUTTON_TEXT_COLOR 0x000000
struct Button;
typedef int (*ONDRAW_FUNC)(struct Button *ptButton, PDispBuff ptDispBuff);
typedef int (*ONPRESSED_FUNC)(struct Button *ptButton, PDispBuff ptDispBuff, PInputEvent ptInputEvent);
typedef struct Button {
char *name;
int status;
Region tRegion;
ONDRAW_FUNC OnDraw;
ONPRESSED_FUNC OnPressed;
}Button, *PButton;
void InitButton(PButton ptButton, char *name, PRegion ptRegion, ONDRAW_FUNC OnDraw, ONPRESSED_FUNC OnPressed);
#endif
4.2 按钮button.c
4.2.1 按钮初始化函数InitButton
void InitButton(PButton ptButton, char *name, PRegion ptRegion, ONDRAW_FUNC OnDraw, ONPRESSED_FUNC OnPressed)
{
ptButton->status = 0; /*按键状态*/
ptButton->name = name; /*按键名*/
ptButton->tRegion = *ptRegion; /*按键位置信息*/
ptButton->OnDraw = OnDraw ? OnDraw : DefaultOnDraw; /*若没有指定绘制函数,使用默认绘制函数*/
ptButton->OnPressed = OnPressed ? OnPressed : DefaultOnPressed; /*若没有指定按键处理函数,使用默认按键处理函数*/
}
4.2.2 默认绘制函数InitButton
绘制出长方形按钮
static int DefaultOnDraw(struct Button *ptButton, PDispBuff ptDispBuff)
{
/* 绘制底色 */
DrawRegion(&ptButton->tRegion, BUTTON_DEFAULT_COLOR);
/* 居中写文字 */
DrawTextInRegionCentral(ptButton->name, &ptButton->tRegion, BUTTON_TEXT_COLOR);
/* flush to lcd/web */
FlushDisplayRegion(&ptButton->tRegion, ptDispBuff);
return 0;
}
4.2.3 默认按键处理函数InitButton
按下按键后按钮变色
static int DefaultOnPressed(struct Button *ptButton, PDispBuff ptDispBuff, PInputEvent ptInputEvent)
{
unsigned int dwColor = BUTTON_DEFAULT_COLOR;
ptButton->status = !ptButton->status;
if (ptButton->status)
dwColor = BUTTON_PRESSED_COLOR;
/* 绘制底色 */
DrawRegion(&ptButton->tRegion, dwColor);
/* 居中写文字 */
DrawTextInRegionCentral(ptButton->name, &ptButton->tRegion, BUTTON_TEXT_COLOR);
/* flush to lcd/web */
FlushDisplayRegion(&ptButton->tRegion, ptDispBuff);
return 0;
}
4.2.4 button.c完整代码
#include <ui.h>
static int DefaultOnDraw(struct Button *ptButton, PDispBuff ptDispBuff)
{
/* 绘制底色 */
DrawRegion(&ptButton->tRegion, BUTTON_DEFAULT_COLOR);
/* 居中写文字 */
DrawTextInRegionCentral(ptButton->name, &ptButton->tRegion, BUTTON_TEXT_COLOR);
/* flush to lcd/web */
FlushDisplayRegion(&ptButton->tRegion, ptDispBuff);
return 0;
}
static int DefaultOnPressed(struct Button *ptButton, PDispBuff ptDispBuff, PInputEvent ptInputEvent)
{
unsigned int dwColor = BUTTON_DEFAULT_COLOR;
ptButton->status = !ptButton->status;
if (ptButton->status)
dwColor = BUTTON_PRESSED_COLOR;
/* 绘制底色 */
DrawRegion(&ptButton->tRegion, dwColor);
/* 居中写文字 */
DrawTextInRegionCentral(ptButton->name, &ptButton->tRegion, BUTTON_TEXT_COLOR);
/* flush to lcd/web */
FlushDisplayRegion(&ptButton->tRegion, ptDispBuff);
return 0;
}
void InitButton(PButton ptButton, char *name, PRegion ptRegion, ONDRAW_FUNC OnDraw, ONPRESSED_FUNC OnPressed)
{
ptButton->status = 0;
ptButton->name = name;
ptButton->tRegion = *ptRegion;
ptButton->OnDraw = OnDraw ? OnDraw : DefaultOnDraw;
ptButton->OnPressed = OnPressed ? OnPressed : DefaultOnPressed;
}
4.3 测试代码
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <linux/fb.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include <disp_manager.h>
#include <font_manager.h>
#include <ui.h> /*包含必要头文件*/
int main(int argc, char **argv)
{
PDispBuff ptBuffer;
int error;
Button tButton;
Region tRegion;
if (argc != 2)
{
printf("Usage: %s <font_size>\n", argv[0]); //打印用法
return -1;
}
DisplayInit(); //显示系统初始化
SelectDefaultDisplay("fb"); //选择lcd设备显示
InitDefaultDisplay(); //初始化lcd设备显示
ptBuffer = GetDisplayBuffer();//获取内存
FontsRegister(); //字体注册
error = SelectAndInitFont("freetype", argv[1]);//字体大小设置
if (error)
{
printf("SelectAndInitFont err\n");
return -1;
}
/*指定按键形状、位置信息*/
tRegion.iLeftUpX = 200;
tRegion.iLeftUpY = 200;
tRegion.iWidth = 300;
tRegion.iHeigh = 100;
InitButton(&tButton, "yiyifufu", &tRegion, NULL, NULL); //按键初始化
tButton.OnDraw(&tButton, ptBuffer); //绘制案件即显示红色按钮与对应按键名
while (1) //按键按下颜色反转
{
tButton.OnPressed(&tButton, ptBuffer, NULL);
sleep(2);
}
return 0;
}
边栏推荐
- 华科提出首个用于伪装实例分割的一阶段框架OSFormer
- 表情捕捉的指标/图像的无参考质量评价
- 五、请求处理—Rest映射是怎样实现的?
- 吞吐?带宽?傻傻分不清楚
- Tensorflow steps on the pit notes and records various errors and solutions
- 《基于机器视觉测量系统的工业在线检测研究》论文笔记
- The University of Göttingen proposed CLIPSeg, a model that can perform three segmentation tasks at the same time
- 【nodejs】第一章:nodejs架构
- OSPF网络类型
- 十一、拦截器运行原理
猜你喜欢
WCH系列芯片CoreMark跑分
Tensorflow踩坑笔记,记录各种报错和解决方法
【论文精读】R-CNN 之预测框回归(Bounding box regression)问题详述
盘点关于发顶会顶刊论文,你需要知道写作上的这些事情!
Thread handler handle IntentServvice handlerThread
[Database and SQL study notes] 8. Views in SQL
物联网-广域网技术之NB-IoT
【Pytorch学习笔记】9.分类器的分类结果如何评估——使用混淆矩阵、F1-score、ROC曲线、PR曲线等(以Softmax二分类为例)
The University of Göttingen proposed CLIPSeg, a model that can perform three segmentation tasks at the same time
【22李宏毅机器学习】课程大纲概述
随机推荐
C语言联合体union占用空间大小问题
原型版本管理
物联网:LoRa无线通信技术
1008 数组元素循环右移问题 (20 分)
【Promise高级用法】实现并行和串行API
表情捕捉的指标/图像的无参考质量评价
伪RTOS-ProroThread在CH573芯片上的移植
SharedPreferences and SQlite database
六、请求处理—获取请求参数系列注解是怎样工作的?
《基于机器视觉测量系统的工业在线检测研究》论文笔记
Redis设计与实现(第三部分):多机数据库的实现
dataframe 常用操作
Tensorflow steps on the pit notes and records various errors and solutions
Jupyter notebook选择不同的Anaconda环境作为内核运行
【ts】typescript高阶:分布式条件类型
【22李宏毅机器学习】课程大纲概述
沁恒MCU从EVT中提取文件建立MounRiver独立工程
CAN、CAN FD
AIDL详解
11%的参数就能优于Swin,微软提出快速预训练蒸馏方法TinyViT