所学来自百问网
目录
1.UI系统
1.1 数据结构的抽象
#ifndef _UI_H
#define _UI_H
#include <common.h>
#include <disp_manager.h>
#include <input_manager.h>
#define BUTTON_DEFAULT_COLOR 0xff0000
#define BUTTON_PRESSEN_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);
// 按钮ui数据结构的抽象
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
1.2 按钮
#include <ui.h>
// 默认居中显示
static int DefaultDraw(struct Button *ptButton,PDispBuff ptDispBuff)
{
// 绘制底色
DrawRegion(&ptButton->tRegion, BUTTON_DEFAULT_COLOR);
// 居中显示文字
DrawTextInRegionCentral(ptButton->name,&ptButton->tRegion,BUTTON_TEXT_COLOR);
// 刷新
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_PRESSEN_COLOR;
// 绘制底色
DrawRegion(&ptButton->tRegion, dwColor);
// 居中显示文字
DrawTextInRegionCentral(ptButton->name,&ptButton->tRegion,BUTTON_TEXT_COLOR);
// 刷新
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 : DefaultDraw;
ptButton->OnPressed = OnPressed ? OnPressed : DefaultOnPressed;
}
1.3 测试
ui_test.c:该文件对按钮进行测试,模拟按钮在不同状态下显示不同的效果
#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 <disp_manager.h>
#include <stdlib.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");
InitDefaultDisplay();
ptBuffer = GetDisplayBuffer();
FontsRegister();
error = SetectAndInitFont("freetype",argv[1]);
if(error)
{
printf("SetectAndInitFont err\n");
return -1;
}
tRegion.iLeftUpX = 200;
tRegion.iLeftUpY = 200;
tRegion.iWidth = 300;
tRegion.iHeigh = 100;
InitButton(&tButton, "test", &tRegion,NULL,NULL);
tButton.OnDraw(&tButton,ptBuffer);
while(1)
{
tButton.OnPressed(&tButton,ptBuffer,NULL);
sleep(2);
}
return 0;
}