自己動手設計並實現一個linux嵌入式UI框架(設計)

ITBread發表於2015-04-14

  看了“自己動手設計並實現一個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是基礎控制元件

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

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

相關文章