--------------------------------------------------------------------------------------------------------------------------------------------------------
linguister : kun
--------------------------------------------------------------------------------------------------------------------------------------------------------
这个项目的意图非常简单:如果我们可以使用html来描述GUI,这不是很酷吗?
使用 NaviLibrary 你就可以做到这点!
使用 LLMozLib library 将游览器渲染到贴图,剩下的事情由Navi来负责。
在我们了解更多特性之前, Navi 本质上是个 GUI Window。 这表示它可以非常方便的 将 被渲染到贴图的游览器、Ogre环境、以及标准的Alpha掩码或者色彩键技术 整合到一起。 Navi这个词既代表了库本身,也代表着 使用它来创建的动态GUI窗口 -- "一个Navi"。为了创建一个Navi,你需要做以下的事情:
1、写一个页面。 你应该了解一些基本的 javascript 。
2、将你新写的Navi 和它的尺寸提交给 NaviManager。
3、注册一个类,并且(或者)将它和NaviData关联,用来处理各种事件。
4、使用你喜欢的输入系统向Navi注入鼠标输入事件。
就这些!
使用NaviLibrary 最美妙的地方在于它所使用的语言(HTML,CSS,JS)十分成熟,有着大量的文档,并且相当流行。
Navi 和你平时使用的GUI项目有着很大的不同,因为我们封装了“Gecko(壁虎)”(想想Fixfox), 几乎所有能在Web2.0标准上做的事情,在一个Ogre3D 程序里你都可以做:Yahoo's UI library, Dojo, MooTools, SVG, XUL, AJAX, Flash... 多亏 LLMozLib 和 Mozilla,Navi可以表现上述任意技术 (现在你也可以!)。
1、Movable -- Navis 都可以移动 简单的右击 或者拖拽一个 Navi。
2、Alpha-Masking -- Navis支持Alpha通道。
3、Color-Keying --
4、Dynamic Opacity -- 动态调整不透明度
5、Transparency affects interaction -- 窗口透明度小于%5的地方将对鼠标透明
6、相对位置 和 绝对位置 -- 当一个Navis 被设置了相对(渲染窗口)位置(4角+4边中点+中点)后,它不能移动,但是渲染窗口的大小改变时,它会动态更新自己
7、聪明的输入注入 -- 当你通过NaviManager注入一个用户输入的时候,你将得到一个bool的返回值,它会告诉你当前鼠标是否在某个Navi上。(译者:事实上,大部分GUI 的管理系统都提供一个类似IsMouseOnWindow 的查询函数。)
8、高效 -- Navis 的效率很高; 因为它们只在页面上的内容发生变化的时候在会更新自己(的贴图)。
9、限速更新 -- 如果你发现Navi 自己更新的太快了,可以给它设置一个阈值 (fps)。
10、激活时自动顶层显示
11、不需要注入键盘输入 -- 因为 LLMozLib 捕获了这些输入,并且将它们传递给Gecko。
12、Programmatic Navi Page Creation - Thanks to DataURI's, you may create the pages that a Navi can navigate to at runtime. Simply define a string with all the HTML in it (escaping where necessary). You may use "local://" and "resource://" (see below) specifiers inside this HTML string to refer to other resources.(不是很了解 URI URL之类的....)
13、本地定位 你可以 'local://' 前缀。本地 是指 NaviPage所在的目录来说的。你可以通过NaviManager来实现
14、(未完待续)