自己動手設計並實現一個linux嵌入式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是基礎控件

為什么結構體要這么定義,在接下來具體實現中,與代碼結合起來就明白了。

設計部分先到這里了,下一篇就是講具體控件的實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM