轉載--認識迅雷界面引擎

轉載自http://xldoc.xl7.xunlei.com/0000000018/00000000180001000020.html

 Bolt界面引擎概念介紹

 
關鍵概念
       使用XML文件來定義UIObjTree,用Lua腳本來實現界面邏輯
       UIObject的類型包括ImageObject,TextObject,還有一些精心設計的原子類型 《引擎內置的元對象介紹》
       圍繞核心概念建立了一系列輔助設施
 
基本工作原理
    
 
BOLT界面引擎這裏提供了兩個重要的核心概念HostWnd ,Render。Render可以把一顆構建完成的UIObjTree渲染成一張位圖。而HostWnd是界面引擎核心與操作系統之間的橋樑,能把這張位圖通過系統提供的API畫到屏幕上,並能轉化操作系統的鍵盤/鼠標等事件成爲引擎的定義得標準輸入事件(Action)。
 
這張圖裏還提到了我們的UI資源管理模塊和XML佈局文件讀取與管理模塊。
 
Render的基本工作原理
 
   DirtyRect(髒矩形)是驅動Render工作的核心。關於髒矩形,在很多2D遊戲開發的文章裏都有詳細介紹。當一顆UIObjTree上的產生了髒矩形,其對應的Render在下次渲染時就會開始有動作,否則就什麼也不幹。Render會選取與髒矩形相交的所有UIObject,然後按這些UIObject的z-order排序(從小到大)排序 ,再按這個順序依次調用這些UIObject的Draw方法。由於所有的UIObject都是由引擎實現的,所以這個Draw方法也是一個不可見的內部函數,Draw的實現會調用一些我們精心優化過的圖形圖像繪製函數,這一切就構成了Bolt界面引擎的高速渲染引擎。
 
注:虛線表示的矩形是髒矩形,那麼Render只會渲染與這個區域相交的UIObject。
 
BOLT界面引擎裏控件的概念
         基於UIObject和UIObjTree,開發控件就是設計一個可複用的“對象樹片斷”,而使用控件就是由界面引擎完成這個對象樹片斷如何嫁接到對象樹上。
這裏通過一個簡單的例子演示一下這個過程
 
這樣的一個MessageBox。抽象成UIObjTree
我們可以定義Button的對象樹片斷是:
合併以後
 
而且很明顯,引入控件的概念,能把一顆複雜的UIObjTree分解成多個片斷交給團隊開發,而最後合成的UIObjTree依舊保持了各個節點的可訪問性。
 

未來展望
 Bolt界面引擎的核心概念,是完全創新與獨立的,並不依賴任何操作系統。所以BOLT界面引擎的發展方向之一是把界面引擎移植到各種各樣的平臺,目前最成熟穩定的平臺是Windows,有工業級產品的質量。我們在Andiord平臺和MacOS平臺都有初步移植的版本,但我們還需要花費很多精力在合適的機會完成讓這些平臺的界面引擎更完美
   我們在移植到Andiord平臺時發現,界面引擎要想在這些手持設備上流程運行,原有的基於CPU指令集優化的高速渲染器是不好的。一是CPU性能達不到,不夠流暢,二是太耗電,這裏迫切需要使用設備提供的硬件加速功能。得益於界面引擎不希望用戶編寫繪製代碼的核心概念,我們只需要重新調整高速渲染器就可以實現硬件加速。目前我們正在嘗試各種各樣的支持硬件加速的框架方案:既能高效使用硬件的能力 ,又能兼顧CPU算法的靈活性。
   我們目前的主要精力都放在引擎本身的完善上,但實際上,如同HTML與Dreamweaver一樣,界面引擎在設計之初就可以讓佈局部分由使用專業工具的專業人員完成,而不是負責編寫邏輯代碼的工程師。我們對我們的佈局XML格式的簡單優雅和可擴展性都有充分的信心,我們衷心的希望各位同行在理解認可了我們的概念後支持我們的標準,這樣大家就能開發各種輔助工具,互相通用,共同改進BOLT界面引擎的工具鏈支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章