嵌入式Linux系統GUI特點(diǎn)介紹
1 Java的圖形界面工具
Java技術(shù)對于服務(wù)器,個(gè)人電腦和嵌入式系統來(lái)說(shuō)是一項偉大的技術(shù)。由于其具有跨平臺等特性。Java在服務(wù)器和桌面電腦方面的應用是非常成功的。然而在GUI方面,Java只用非常有限的一些特征去構建圖形用戶(hù)界面。其思想就是采用平臺無(wú)關(guān)的Java應用程序接口打包到不同的操作系統來(lái)開(kāi)發(fā)本地圖形用戶(hù)界面,被稱(chēng)之為抽象的窗口工具(AWT)。僅有普通的部件如文件域、文本區、選擇框、單選按鈕、列表框和按鈕被AWT支持,圖形和圖像的特性支持非常有限,也就是說(shuō),只足夠構建簡(jiǎn)單的applet程序。認識到需要更高級的圖形用戶(hù)界面組件和圖形能力,Sun公司開(kāi)發(fā)了Swing,Java 2D,Java3D,圖像的輸入/輸出,以及Java高級圖像(JAI)。Swing是用來(lái)構建Java圖形界面的標準API(應用程序接口),一些AWT類(lèi)由Swing基礎而來(lái)。它有一套完全的組件從按鈕到文件域、表格、樹(shù)型和文件編輯器。這些組件不依賴(lài)于操作系統本地的部件,而是用原始的圖形像直線(xiàn)、矩形、文字畫(huà)出。這種畫(huà)代表感觀(guān)插件,它能夠模仿本地的感觀(guān)。SWT是基于Java開(kāi)發(fā)的,它的設計理念是最大化了操作系統的圖形構件的API,就是說(shuō)只要操作系統提供了相應圖形的構件,那么SWT只是簡(jiǎn)單應用JNI技術(shù)調用它們,只有那些操作系統中不提供的構件,SWT才自己去做一個(gè)模擬的實(shí)現。另外SWT還提供對操作系統本地圖形用戶(hù)界面的直接訪(fǎng)問(wèn),因此,基于SWT的Java應用程序擁有本地的圖形用戶(hù)界面并且可以和本地別的應用程序和部件集成在一起。使用SWT開(kāi)發(fā)包,簡(jiǎn)單、跨平臺、可靠等這些Jaya語(yǔ)言本身所具有的優(yōu)點(diǎn)正漸漸融合到圖形界面的應用程序開(kāi)發(fā)中去。Java語(yǔ)言的另一扇成功之門(mén)正在逐漸打開(kāi)。
2 SWT+GtkFB圖形系統的體系結構
2.1 SWT+GtkFB圖形系統的體系結構
2.1.1 SWT
SWT處于體系機構的最上層,它與Java內的AwT和Swing同屬于設計圖形界面所需的高級函數庫。而且SWT針對AWT 以及Swing的一些問(wèn)題作了改善,如今它已發(fā)展成一套與作業(yè)系統無(wú)關(guān)的圖形元件函數庫。在元件的產(chǎn)生方面采用了適當的模擬,在基本的元件方面是采用原有作業(yè)系統的,對于較復雜的元件才用仿真的技術(shù)?;赟WT的Java應用程序擁有本地的圖形用戶(hù)界面,并且可以和本地別的應用程序,以及部件集成在一起。
SWT是基于Java語(yǔ)言開(kāi)發(fā)出來(lái)的高級圖形元件庫,如圖2所示SWT在Java端通過(guò)JNI(Java Native InteRFace)技術(shù)直接調用native端的GtkFB來(lái)使用操作系統的資源,JNI技術(shù)使得SWT程序可以與其他語(yǔ)言編寫(xiě)的Native端的代碼互相協(xié)作,將它們整合在一起;另一方面可使運行在JVM(JAava虛擬機)中的SWT代碼調用GtkFB庫函數或其他程序;此外利用Invocation API,可將Java虛擬機嵌入到native端的應用中。JNI這個(gè)接口是雙向的,相當于橋梁和紐帶,它將SWT代碼和native端的GtkFB代碼連接起來(lái)。
2.1.2 Gtk庫
如圖1所示,GTK會(huì )用到幾個(gè)連接庫,如基本數據類(lèi)型用的Glib庫,它是由基礎類(lèi)、核心應用支持類(lèi)、實(shí)用功能類(lèi)、數據類(lèi)和對象系統類(lèi)五個(gè)部分組成的。
Pango是用于國際化文本的布局和顯示的全功能框架。Pango可以處理以非從左到右方向排列的文本,并且可以容易地管理復雜語(yǔ)言,甚至還可以處理根據使用環(huán)境而采用不同形式的信函。例如它支持雙向文本,用戶(hù)可以將從左到右的文本和從右到左的文本混合編排;還可有用于確定各種復雜文本(如阿拉伯語(yǔ)和泰米爾語(yǔ))形狀的插件。Pango不僅僅是國際化,而且Pango庫在Xft和XRender的支持下能很好地處理抗鋸齒字體文本的顯示。
Pango還支持各種圖形格式如libpng,libjpeg,libtiff和Framebuffer port用的FreeType等。實(shí)際上GTK提供gdk-pixbuf,gdk和gtk三個(gè)連接庫,其中Gdk-pixbuf讓我們可做相關(guān)的圖像工作,gdk是窗口繪圖系統的抽象層,framebuffer相關(guān)的工作大部分在此完成,而gtk則是高層的應用程序接口。Atk(Accessibility Toolkit)可訪(fǎng)問(wèn)性工具箱。GTK充分利用ATK使殘障人士(如視力低下或行動(dòng)不便)與GTK應用程序交互成為可能。
2.1.3 GtkFB的工作原理
DirectFB訪(fǎng)問(wèn)圖形硬件設備依賴(lài)于操作系統提供的內核接口,即幀緩沖設備(FrameBuffer)。FrameBuffer實(shí)際上是用一塊硬件來(lái)做顯卡和軟件之間的橋梁,Linux的內核將其開(kāi)放出來(lái),使用戶(hù)的程序可以通過(guò)塊內存來(lái)存取顯卡。例如設定顯示分辨率和色彩數、存取顯示內存區等。不同的Linux需要提供針對不同顯示硬件FrameBuffer的驅動(dòng)程序,這就是說(shuō)DirectFB需要運行于FramBuffer之上,然而Linux內核提供了常見(jiàn)芯片的FrameBuffer驅動(dòng)。
當一個(gè)應用程序連接到GtkFB時(shí)會(huì )調用gtk_init(),如圖3所示,此時(shí)GtkFB 啟動(dòng)Linux的Framebiffer,設定分辨率和色彩數,接下來(lái)打開(kāi)鍵盤(pán)和鼠標等外設(PDA打開(kāi)按鍵和觸控屏幕).然后到特定目錄去讀取字型,最后對窗口和事件管理作初始化操作。GtkFB可以支持8、16、24、32bpp的framebuffer。
linux相關(guān)文章:linux教程
評論