当前位置:网站首页>电子产品量产工具(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;
}
边栏推荐
猜你喜欢

PID详解

SQL(1) - Add, delete, modify and search

【shell编程】第三章:函数
![[Pytorch study notes] 11. Take a subset of the Dataset and shuffle the order of the Dataset (using Subset, random_split)](/img/59/ce3e18f32c40a97631f5ac1b53662a.png)
[Pytorch study notes] 11. Take a subset of the Dataset and shuffle the order of the Dataset (using Subset, random_split)

MSRA proposes extreme masking model ExtreMA for learning instances and distributed visual representations

【ts】typescript高阶:模版字面量类型

It turns out that the MAE proposed by He Yuming is still a kind of data enhancement
![[Database and SQL study notes] 10. (T-SQL language) functions, stored procedures, triggers](/img/b9/06b90160c962a25a3cc44731afb6dc.png)
[Database and SQL study notes] 10. (T-SQL language) functions, stored procedures, triggers

Thread handler句柄 IntentServvice handlerThread

【Pytorch学习笔记】10.如何快速创建一个自己的Dataset数据集对象(继承Dataset类并重写对应方法)
随机推荐
【Pytorch学习笔记】9.分类器的分类结果如何评估——使用混淆矩阵、F1-score、ROC曲线、PR曲线等(以Softmax二分类为例)
CVPR best paper winner Huang Gao's team from Tsinghua University presented the first dynamic network review
Machine Learning (1) - Machine Learning Fundamentals
【Kaggle项目实战记录】一个图片分类项目的步骤和思路分享——以树叶分类为例(用Pytorch)
原型版本管理
Mysql-连接https域名的Mysql数据源踩的坑
单变量线性回归
【Shell编程】第一章:子串
【论文精读】Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation(R-CNN)
表情捕捉的指标/图像的无参考质量评价
【Pytorch学习笔记】8.训练类别不均衡数据时,如何使用WeightedRandomSampler(权重采样器)
【ts】typescript高阶:typeof使用
Service
[Kaggle project actual combat record] Steps and ideas sharing of a picture classification project - taking leaf classification as an example (using Pytorch)
数控直流电源
11%的参数就能优于Swin,微软提出快速预训练蒸馏方法TinyViT
LeetCode刷题之第416题
GIS面试问题
LeetCode刷题之第746题
【ts】typescript高阶:模版字面量类型