GuiLite概述
GuiLite是最簡單,易學的GUI庫。GuiLite 是由6千行左右的 C/C++ 代碼編寫而成,只使用C++的基本特性(類和虛函數),不涉及複雜語法,圖形繪製以描點為基礎,不使用任何算法。
基本原理
GuiLite只作兩個工作:界面元素管理和圖形繪製。
界面管理包括:
- 添加/刪除界面元素(例如:按鈕,標籤,對話框等控件),設置對應的文字及位置信息
- 用戶輸入消息傳遞:根據用戶輸入尋找受影響的界面元素,並回調響應的處理的處理函數
- 用戶自定義消息傳遞:用戶可以自定義消息響應函數,並自主產生消息;當消息產生時,對應的響應函數會被調用
圖形繪製包括:
- 基本的點線繪製,例如:畫點,矩形,橫線,豎線等
- 設置繪製圖層,如果需要多個圖層,在基本點線繪製時,需要給出圖層的索引值
- 圖層處理,在圖層界面發生變化的時候(例如:打開/關閉對話框),GuiLite將決定各個圖層上的像素點,哪個會被最終顯示在屏幕上
注意:圖形繪製不依賴界面管理,可以獨立的存在,例如,在資源有限的單片機環境,有時候不需要界面元素管理,而直接進行圖形,文字的繪製。
擴展方法
GuiLite只給出了基本控件(例如:按鈕,標籤,鍵盤,選擇框)的實現方法,旨在說明控件的實現方法。對於擴展控件,可以選擇下面的方式:
- 如果開發者需要調整基本控件的細節,可以直接在源代碼中修改
- 如果開發者需要構建全新的控件,可以參考基本控件的實現方法,重新實現
對於擴展繪製,例如:畫圓,畫曲線,可以直接在surface.cpp文件中添加響應的函數接口。
代碼目錄結構
core:
- 實現了底層繪製,圖層管理和消息傳遞
- adapter實現了各個平臺(例如:Windows, Linux,Android,iOS,macOS,未知OS或無OS)的封裝。
widgets:
- 實現了各種常規控件(例如:按鈕,標籤,鍵盤,波形)及容器(例如:視窗,對話框,滑動頁面),開發者可以根據自己的需要,直接在相應的代碼上進行修改或重繪,開發出有自己風格,特色的界面
- 實現了用戶的手勢識別(例如:手指滑動,鼠標按下/釋放)的消息傳遞,將用戶的輸入信息傳遞到整個GUI體系樹中,並調用相應的響應回調函數;開發者可以根據自己的需要添加/修改響應回調函數。
圖層管理
- display層:該層對應了物理顯存,display層決定了一個顯示終端的最終顯示效果;通常系統中至少有一個display層。
- surface層:該層屬於display層的一個部分;它為左右滑動而存在,每一張滑動頁面均對應了一個surface層;surface層決定了一個滑動頁面的最終顯示效果;通常1個display層會對應多個surface層。
- frame層:該層屬於surface層的一個部分;它現實疊加界面元素而存在。
閱讀更多 程序猿的未來人生 的文章