歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux服務器

在嵌入式Linux系統中應用的GTK+和X分析

在嵌入式 Linux 下有很多圖形界面系統 GUI,包括 Qt/Embedded,FLTK,Microwindows 和 GTK+ 等。作為一個開發者,到底使用什麼樣的 GUI 系統呢?對一個系統,將它改造為符合你的需求,你要做多少修改呢?修改後的系統的尺寸一般會有多大呢?這些都是開發人員會遇到的問題。

我們在這裡討論的就是要對這些內容做一個具體細致的分析,通過我們的討論,大家會對基於 GTK+ 和 X 的 GUI 在嵌入式Linux 下的應用有一個確切的了解。
 
  在嵌入式系統應用日益發展的今天,越來越多的應用都需要使用到 GUI 來進行開發,以此來獲得更好的交互性。
 
  嵌入式 Linux 下 GUI 的選擇,對大多數開發人員來說是一個需要權衡對比的過程。選擇 GTK+ 運行在 X 系統上,然後 X 系統運行在嵌入系統的 framebuffer 上,這會是一個很好的選擇。
 
  GTK+ 與 X 的優點
 
  當然,GTK+ 與 X 一般都是被大家考慮為體積較大的桌面系統的好搭配,但實際上對於嵌入系統來說,它也有著諸多的優點:
 
  1、 X-window 系統與 GTK+ 都非常穩定可靠,X-window 系統是經歷了長期的開發及應用實踐的,GTK+ 也是一個比較成熟的開放源代碼項目;
 
  2、 X-window 系統是一個靈活的 client/server 的模型結構,一個應用客戶端的崩潰不會影響到圖形系統的其他部分,這是一個很重要的特性,它有利於支持第三方應用的擴展開發,而不影響到主體部分;
 
  3、 GTK+有兩個重要的庫:GDK和GLIB.GDK抽象了底層的窗口管理,要移植 GTK+ 到另一個不同的窗口系統的話,我們只需要移植 GDK 就可以了。GLIB 是一個工具集合,它包括了數據類型,各種宏定義,類型轉化,字符串處理,任何應用程序都可以鏈接這個 GLIB 庫,使用其中的各種數據類型、方法,來避免重復代碼,或者說避免開發人員重新發明輪子,這樣有利於減少整個系統的尺寸;
 
  4、 對 GTK+/X 的裁剪是很容易的,它們有著很好的可配置的選項,有著清晰的代碼結構,可以保證安全正確地去掉大段的不需要的代碼;
 
  5、 GTK+ 有著大量的應用,GTK+ 已經被用在了很多重要的應用系統中;
 
  6、 GTK+ 的授權是 LGPL 方式的,X 是 non-copyleft free license 的,第三方開發的系統都能與它們進行鏈接;
 
  7、 GTK+/X 二者都是基於 C 代碼的,而不是C++;
 
  8、 GTK+ 使用 C 來實現了面向對象的架構;
 
  其他 GUI 系統
 
  其他可以選擇的圖形系統包括:Qt/Embedded,FLTK 和 Microwindows.
 
  1、 Qt/E 是其中較高級的,它是一個完整的,基於 framebuffer 的 GUI 系統,由 Trolltech 公司開發;
 
  2、 Qt/E 有著高效的圖形渲染效果,還包括 TrueType 字體系統,及 alpha blending 半透明處理;
 
  3、 但 Qt/E 不是使用 LGPL 授權方式,而是使用兩種授權方式:開發使用 GPL,而商用需要授權與版稅;
 
  4、 Qt/E 是用 C++ 編寫的;
 
  5、 Qt/E 非常大,一個 iPAQ QPE 就包括了 3.3MB 的 Qt/E 庫和一個 718KB 的 QPE 庫(和 Xlib 類似的一種庫);
 
  6、 Qt/E 不夠穩定,QPE demo 不錯,但出現過崩潰;
 
  7、 FLTK (the Fast Light Toolkit) 是一個小型的 GUI 圖形系統,它也是用 C++ 寫的,特性太少,應用范圍較少,不夠成熟;
 
  8、 Microwindows 和 X-Window 相比也是一個不錯的選擇,它占用大約 100KB-600KB 大小的內存,和文件存儲空間,雖然已經有了一個其上的 GTK+ 移植,但還是不夠成熟;
 
  X-window:比你想象的要小很多
 
  對於X-window系統,廣大的網絡開發者已經做了大量的工作來減小其的尺寸,最知名的有TinyX.可以通過對不需要的代碼的裁剪及去除XLIB中靜態數據來減少總體的尺寸,如:color管理系統,弧形,粗線條等。
 
  在大多數開發人員的印象裡,X 系統很龐大,但實際上,你聽到的,是那些對 X 不夠了解的人的一種誤解。在經過裁剪後的情況下,GTK+/X 要比 GTK+/FB 與 Qt/E 還要來得有效,且 XLIB 對一般的應用程序有著更好的支持作用,應用程序的開發會變得更高效。
 
  如何裁剪 GTK+
 
  我們可以從標准的 GTK+ 發行版本來裁剪,裁剪掉其中的不需要的,修改已經有的代碼,並加入新的特性所需要的代碼。裁剪的范圍包括小的改動,也包括一些大的結構性的、核心的改變。
 
  1、 去除 Widgets 窗口
 
  最開始,我們把不需要的 Widgets 去除掉,比如:GtkGamma、GtkHRuler、過時了的 GtkList(被 GtkCList所替代了)、和我們不需要的 GtkFrame 邊框。
 
  2、 Widgets 窗口尺寸與繪制
 
  接著,修改Widgets的大小與繪制方法,GTK+提供了一個主題引擎機制,來控制窗口的外觀與效果。它允許在運行中設置字體,設置行間隔,設置繪制特性。這樣的機制很不錯,但不夠靈活,代碼中很多設置的地方都是使用硬編碼的方式;另外,一種主題,就是一堆額外的代碼段和參數,這樣會增加整體的尺寸。
 
  需要找出影響到窗口系統整體尺寸的內容,再來修改它。比如,一個按鈕的大小與繪制,包括這樣的參數:邊框的寬度,x/y的位置(主題引擎需要的參數),缺省的間隔(常量),缺省的左上角的位置(常量),獲得焦點。這些在嵌入系統中並不需要那麼完整,我們可以根據實際的需求來簡化代碼,來避免GTK+的復雜性。
 
  另外,使用面向對象的方法,來繼承窗口Widgets的特性,作為子類也是一個有效的方法。
 
  3、GtkWindow
 
  GTK+總是假定一個窗口裡面包含了另一個窗口,它們就是嵌套關系。但對於我們經常會碰到的有軟鍵盤的應用時,就不完全正確了。軟鍵盤雖然是屬於一個窗口的,但卻會超出那個窗口。所以為了突破這個假定,需要對GtkWindow增加一些特性,將軟鍵盤處理成一種特殊的子窗口。
 
  軟鍵盤所在的窗口,需要處理軟鍵盤的按鍵事件,並將按鍵轉發給軟鍵盤工具條。當軟鍵盤按下,軟鍵盤的回調函數就被注冊到原始窗口上,這樣軟鍵盤就會響應按鍵事件。在GtkWindow上增加接口,可以創建,響應按鍵。
 
  在小屏幕的嵌入系統中,可以將滾動條做得更簡化些,去掉邊框,使用單個滾動條。這些都更適合嵌入系統

Copyright © Linux教程網 All Rights Reserved