May 10,2007

Embedded system GUI design

最近找到這個篇文章, 原來是兩年前自己的程式碼. 實作win32上的Microwindows. 當時老板要我去做手機上的彩色圖形界面, 但前提是用open source, 我就找了很多套件, 例如 microwindows, wxWidget, Fox, fltk 等等.

我使用過以下套件

wxWidget, http://www.wxwidgets.org/
這是我第一個找到的開源套件, 號碼功能強大, Native誇平台. 我也把他port好了, 搞了兩個星期發現他實在太大. 至少3.5MB而很多功能都不會用到. 而且他的MFC GUI編程方法實在不想領教.
WxWidgets License, 由LGPL改寫, 但容許最後作品不用公開程式碼

Microwindows (Nano-X Windows System), http://www.microwindows.org/
這是最多人提到的Open source GUI, 尤其是他使用MPL License, 這可能是最多人用的原因吧. 他是一個比較low level的widget套件. 可以使用兩套API, 一個是Win32 SDK style, 一個是類Xlib style, 但是MFC的那套API好像已不再維護了, 轉而又開發另一個子project, NxLib, 這使得原來的Nano-X API可以兼容真正的Xlib API. 好處是所有Linux下的更高階的widget套件都可以架構在Microwindows系統之上, 如GTK, Qt, WxWidget, fltk 等等. 但是他最後更新的日期是2005年, 也不曉得是活還是死了.

FOX, http://www.fox-toolkit.org/
這個看起來不錯, 但是同樣感覺footprint太大, 而且用了很多高級C++編程方式, 在當時我要port到1998年出產的VxWorks實在困難重重.
LGPL License

Qtopia, http://www.trolltech.com/
大公司都使用這個, 可是我公司付不起錢. 所以我也沒有研究下去. 不過其大概要2MB才真的做出一個GUI出來.
GPL or Qt Commerical License

MiniGUI, http://www.minigui.org/
C API界面. 但是要不就GPL,要不就$$$. 算了吧.

FLTK, http://www.fltk.org/
最後我的選擇是使用fltk. 主要原因是小 700KB左右. 簡單, 很多功能都可以拿掉. 支援UTF8. C++界面. 一開始我是使用FLNX 即係所謂FLTK over Nano-X. 但是當microwindows出了nxlib後, 我就改用FLTK+NxLib+Nano-X三層架構. 同時Nano-X使用LINK_APP_INTO_SERVER模式, footprint大概在1MB以下.

同時他採用FLTK license, 主要是根據LGPL修改而成, 使得所有以靜態連結的程式, 以及繼承的widget都不需要公開程式碼

如果你想要fltk顯示中文, 那麼你可以參看這個project, 它主要根據fltk 1.1.6版作修改, 以便顯示utf8的字串, 不過microwindows上也要作一些小修改

希望這些資訊對做embedded system GUI 的人有用啦.


Posted by wlsloi at 樂多Roodo! │15:32 │回應(9)引用(0)Embedded System
樂多分類:網路/3C 共同主題:開放源碼 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/3216571
回應文章
請問一下FLTK 的物件(如Button) 能不能有不規則形狀?或載入圖片的方式或是其他方法讓UI可以比較不死板版都方方的. 謝謝!!
Posted by CC at May 25,2007 16:26
看了文件應該是可以自定box來模擬button的功能。跑了一下FLNX的demo,看起來都醜醜的,我也很需要有image button這樣的元件。

我也來試試看用NXLib+FLTK的組合...
Posted by ykhuang at May 28,2007 18:38
自定Box是一個方法, 但是Box都是predefine的. 如果要不規則, 自己畫出來吧, override Fl_Widget::draw() 函式就可以有不規則的形狀. 你可以組合一個Fl_Bitmap把圖片畫出來.
真的要做得好, 你可能要用Alpha blending的方式把圖畫出來.
Posted by wls at May 30,2007 22:40
其實有一個簡單的方式,呼叫box()設定FL_NO_BOX,然後用image()設定物件上的圖片就可以了。不過這方法產生了一些後遺症,我還在尋找解法...
Posted by ykhuang at June 7,2007 01:03
有什麼後遺症?
Posted by wls at June 7,2007 13:56
那是FLTK 1.1.3版才遇到的,在PNG的底圖上疊上PNG做的image button,在按下去以後旁邊的按鈕會被抹掉。換了FLTK 1.1.8之後在i386上就沒這問題,但是arm上面程式crash了,正在尋求解決之道...
Posted by ykhuang at June 10,2007 19:52
通常這是alignment的問題. 不然就是記憶體問題. 但是實際情況跟你的OS和BSP有關.
Posted by wls at June 13,2007 00:56
請問 可以介紹一下 FLTK+NxLib+Nano-X三層架構要怎麼架嘛?
又或者 哪個網站有相關資訊呢?
Posted by Jillo at August 27,2007 17:54
[URL=http://www.haroldini.cn/traduzione-italiano-arabo] traduzione italiano arabo [/URL] traduzione italiano arabo [URL=http://www.haroldini.cn/vacanza-ostuni] vacanza ostuni [/URL] vacanza ostuni [URL=http://www.haroldini.cn/l-isola-che-non-c-e] l isola che non c e [/URL] l isola che non c e
Posted by Karen at June 19,2008 12:07