基於 C 語言開發的 GUI 框架
一、介紹
AWTK全稱Toolkit AnyWhere,是ZLG開發的開源GUI引擎,旨在爲嵌入式系統、WEB、各種小程序、手機和PC打造的通用GUI引擎,爲用戶提供一個功能強大、高效可靠、簡單易用、可輕鬆做出炫酷效果的GUI引擎。
AWTK寓意有兩個方面:
- Toolkit AnyWhere。
- ZLG物聯網操作系統AWorks內置GUI。
運行效果截圖:
二、最終目標:
- 支持開發嵌入式應用程序。
- 支持開發Linux應用程序。
- 支持開發MacOS應用程序。
- 支持開發Windows應用程序。
- 支持開發Web APP。
- 支持開發微信小程序。
- 支持開發支付寶小程序。
- 支持開發百度小程序。
- 支持開發Android應用程序。
- 支持開發iOS應用程序。
- 支持開發2D小遊戲。
三、主要特色
1.跨平臺
AWTK是跨平臺的,這有兩個方面的意思:
- AWTK本身是跨平臺的。目前支持的平臺有ZLG AWorks、Windows、Linux、MacOS、嵌入式Linux和嵌入式裸系統,可以輕鬆的移植到各種RTOS上。AWTK以後也可以運行在瀏覽器(即將公測)、各種小程序、Android和iOS等平臺上運行。
- AWTK同時還提供了一套跨平臺的基礎工具庫。其中包括鏈表、數組、字符串(UTF8和widechar),事件發射器、值、對象、文件系統、互斥所和線程、表達式和字符串解析等等,讓你用AWTK開發的應用程序可以真正跨平臺運行。
2.高效
AWTK通過一系列的手段保證AWTK應用程序高效運行:
- 通過髒矩算法只更新變化的部分。
- 支持3 FrameBuffer讓界面以最高幀率運行(可選)。
- UI描述文件和主題文件使用高效的二進制格式,解析在瞬間完成。
- 支持各種GPU加速接口。如OpenGL、DirectX、Vulman和Metal等。
- 支持嵌入式平臺的各種2D加速接口。目前STM32的DMA2D和NXP的PXP接口,廠家可以輕鬆擴展自己的加速接口。
3.穩定
AWTK通過下列方式極力讓代碼穩定可靠:
- 使用cppcheck和facebook infer進行靜態檢查。
- 使用valgrind進行動態內存檢查。
- 近兩萬行的單元測試代碼。
- ZLG強大GUI團隊的支持。
- 經過多個實際項目驗證。
- 多平臺/多編譯器驗證。
- 優秀的架構設計。
- Code Review。
- 手工測試。
4.強大
- 豐富的控件(持續增加中)。
- 支持各種圖片格式(png/jpg/gif/svg)。
- 支持各種字體格式(點陣和矢量)。
- 支持窗口動畫
- 支持控件動畫
- 支持高清屏。
- 支持界面描述文件。
- 支持主題描述文件。
- 支持控件佈局策略。
- 支持對話框高亮策略。
- 豐富的輔助工具。
- 支持從低端的Cortex M3到各種高端CPU。
- 支持無文件系統和自定義的文件系統。
- 支持裸系統和RTOS。
5.易用
- 大量的示例代碼。
- 完善的API文檔和使用文檔。
- ZLG 強大的技術支持團隊。
- 用AWTK本身開發的界面編輯器(開發中)。
- 聲明式的界面描述語言。一行代碼啓用控件動畫,啓用窗口動畫,顯示圖片(png/jpg/svg/gif)。
6.高度擴展性
- 可以擴展自己的控件。
- 可以擴展自己的動畫。
- 可以實現自己的主循環。
- 可以擴展自己的軟鍵盤。
- 可以擴展自己的圖片加載器。
- 可以擴展自己的字體加載器。
- 可以擴展自己的輸入法引擎。
- 可以擴展自己的控件佈局算法。
- 可以擴展自己的對話框高亮策略。
- 可以實現自己的LCD接口。
- 可以擴展自己的矢量引擎(如使用skia/cairo)。
- 所有擴展組件和內置組件具有相同的待遇。
7.多種開發語言
AWTK本身是用C語言開發的,可以通過IDL生成各種腳本語言的綁定。生成的綁定代碼不是簡單的把C語言的API映射到腳本語言,而是生成腳本語言原生代碼風格的API。目前支持以下語言(以後根據需要增加):
- C
- Lua
- Javascript on jerryscript
- Javascript on nodejs
8.國際化
- 支持Unicode。
- 支持輸入法。
- 支持字符串翻譯(實時生效)。
- 支持圖片翻譯(實時生效)。
- 文字雙向排版(計劃中)。
AWTK源碼倉庫:
- 主源碼倉庫:https://github.com/zlgopen/awtk
- 鏡像源碼倉庫:https://gitee.com/zlgopen/awtk