自己动手设计并实现一个linux嵌入式UI框架(设计)

摘要:
在阅读了“自己动手设计和实现Linux嵌入式UI框架”之后,我显然不喜欢它。因为我还没有看到庐山的真面目,让我今天继续。首先,让我谈谈我使用的知识背景。通常,UI框架应该包括哪些组件?我设计的嵌入式UI框架旨在表达设计思想和逻辑处理。内部设计和实施将简单明了,并将复杂性降至最低。这是设计部分。下一部分是具体控制措施的实施。

  看了“自己动手设计并实现一个linux嵌入式UI框架”显然没有尽兴,因为还没有看到庐山真面目,那我今天继续,先来说说,我用到了哪些知识背景。如:C语言基础知识,尤其是指针、函数指针、内存分布,linux 基础知识、如消息队列、framebuffer、多线程、多线程同步、等,数据结构、算法(如链表、队列等),window .netframework 框架设计思想,设计模式如 mvc、观察者、单例、工厂等。知识点有点多,每个知识点有机的组合在一起,形成了一个知识网,构成了一个系统。以上提到的知识点,如果不是很了解推荐看看。

一般来说UI框架需要包含哪些组件?我来整理下:

首先UI框架是要展现给用户看的,那么一个窗口肯定是要有的;

其次,是在该窗口应该还可以显示其他控件如按钮、文本框等;

然后是支持交互操作,那么它就支持事情处理,如触摸事件、按键事件等;

最后框架是给开发人员开发应用用的,那么要有友好的接口。

我设计的这个嵌入式UI框架以表达设计思想,逻辑处理为目的,内部设计与实现会简单明了,尽量减少复杂度。

“一年之计在于春,一天之计在于晨”,一个UI框架之计在与数据结构,都硕算法+数据结构就是程序的灵魂,我们就来个千里之行,始于数据结构。

image

我划分了几个部分,如上图所示,取最关键的成员(结构与方法),描述会比较啰嗦,我直接列出公共的数据结构:

typedef  void(*EventHandler)(void *object, void *msg);
typedef  int (*MatchHandler )(void *object1, void *object2);
 
typedef struct _Rectangle 
{
    int x;    
    int y;
    int width;
    int height;    
} Rectangle,*RectanglePtr;
 
//控件类型
typedef enum
{
    WIN_NULL=0,                // NUll
    WIN_WINDOW,                // window
    WIN_STATIC,                // static
    WIN_EDIT,                // edit
    WIN_BUTTON                // button
 
}ControlType;
 
typedef enum
{
    LEFT=0,  
    MIDDLE,
    RIGHT,   
    TOP,        
    BOTTOM  
}TextAlign;
 
typedef struct _WinBaseBufInfo
{
    //待绘内存起始地址
    unsigned char     *pdstbuf;
    unsigned int     dstpaddr;
    int             width;
    int             height;
    //一行的内存长度
      int             stride;
}WinBaseBufInfo,*WinBaseBufInfoPtr;
 
typedef struct _BaseControl
{
    Rectangle       rect;
    unsigned char   visible;
    unsigned char   enable;
    
    EventHandler       eventcallback;
    EventHandler       keyeventcallback;
    void* parent;
    void*  tag;
}BaseControl,*BaseControlPtr;
 
//链表节点
typedef struct  ControlsList
{
    ControlType contype;
    void *pcontrol;
    struct ControlsList *pnext;
    struct ControlsList *pprev;    
}ControlsList;

先介绍Utils的作用,DrawJpeg与DrawText的作用,直接望文生义,就是绘图、绘字,但里面会涉及libjpeg、点阵字库。细节先不细究。

Eventhandler的作用就是处理消息事件(触摸、按键)

Application就是程序信息

Window、Button、Edit是基础控件

为什么结构体要这么定义,在接下来具体实现中,与代码结合起来就明白了。

设计部分先到这里了,下一篇就是讲具体控件的实现。

免责声明:文章转载自《自己动手设计并实现一个linux嵌入式UI框架(设计)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇软件界面交互和易用性改进总结第六章 前端开发——Vue框架下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

团队介绍&学长采访

1. 团队介绍       刘畅 博客园ID:森高Slontia 身份:PM 个人介绍: 弹丸粉 || 小说创作爱好者 || 撸猫狂魔 我绝对不知道,我一个写代码的怎么就当PM去了?         张安澜 博客园ID:MinstrelZ 身份:开发 个人介绍: 张安澜,来自北京航空航天大学2015级计算机学院,喜欢旅游,修仙党,lol大乱斗选手,吃鸡...

Python将被加入高考科目?你怎么看?

今天看到这样的一则新闻:不禁感叹,人工智能这股风来的太快,已经掀起全民学习Python的浪潮。 2017年中观察:看上去这个大纲内容基本是这样了,但是实行年份可能要往后推了,不在2017年执行了(据说技术科目的另一部分,通用技术,也在进行教改)。 2017年初消息:浙江省信息技术新教材,即将在2017级(2017年9月入学)高中新生中开始使用。 据了解,与...

WebAPi

WebAPi的可视化输出模式(RabbitMQ、消息补偿相关)——所有webapi似乎都缺失的一个功能  最近的工作我在做一个有关于消息发送和接受封装工作。大概流程是这样的,消息中间件是采用rabbitmq,为了保证消息的绝对无丢失,我们需要在发送和接受前对消息进行DB落地。在发送前我会先进行DB的插入,单表插入,所以在性能上也是能接受的,单表插入做了压...

linux安装mysql5.7及相关环境配置

安装mysql5.7以及相关环境配置 检查是否自带mysql和mariadb,并卸载 rpm -qa|grep mysql //rpm -e --nodeps mysql-libs-5.1.52-1.el6_0.1.x86_64 [root@localhost ~]# rpm -qa|grep mariadb mariadb-libs-5.5.60-...

让.net程序运行在没有framework的机器上

Remote Soft's Salamander .NET Native Compiler (www.remotesoft.com) .Net 框架目前逐步在普及了,仍然有很多人在寻找如何让.NET程序脱离.NET框架的方法。 现成的工具有 Xenocode 的postbuidle或者vas,还有 Salamander .NET Linker . 另外...

linux dialog详解(图形化shell)

  liunx 下的dialog 工具是一个可以和shell脚本配合使用的文本界面下的创建对话框的工具。每个对话框提供的输出有两种形式:   1.  将所有输出到stderr 输出,不显示到屏幕。   2.  使用退出状态码,“OK”为0,“NO”为1,"ESC"为255   通用选项 common options:(这个选项来设置dialog box的背...