导航

关于GUI的一些想法

Posted on 2005-02-15 02:52  chenlee  阅读(1164)  评论(5)    收藏  举报
最近一直想改进一下garnet engine中的UI部分。因为考虑到实现一个完善的UI需要很大的工作量,所以想找一个现成的开源库来用。

在网上转了转,发现了http://www.cegui.org.ui。功能挺强,而且是专门为在3D程序中使用而设计的,现在已经被整合到OGRE中。但是这个库有些过于臃肿,需要很多外部的dependencies才能运行,比如freetype, xerces等等,并且对中文的支持也比较弱。

又在网上找到了几个比较轻量级的UI库,如:
http://guichan.darkbits.org/
http://www.paragui.org/ 
http://www.picogui.org
没有仔细考察它们的功能,粗看上去都还凑合,但也不是非常理想。于是想如果有时间的话,还是自己写一个UI库算了。

左思右想,如果能给UI部分定义一个标准的程序接口,然后再分别写不同的实现,那就方便多了。而且这样还有助于分离程序的功能和界面。

目前有几个备选方案:

1. 将GUI定义成两组事件的集合:
  - 一组事件由GUI根据用户的输入产生,由后台程序负责响应;
  - 另一组事件由后台程序产生,由GUI来负责响应;
  - 后台程序和GUI都不知道对方的实现细节,它们只能通过这些事件来做交互;
  - 这些事件也可以按照“属性”的形式提供给对方:
    - 每个属性有如下几个事件组成:
      - for application:
        - app_read(...)
        - app_write(...)
        - on_gui_read(...)
        - on_gui_write(...)
      - for GUI:
        - gui_read(...)
        - gui_write(...)
        - on_app_read(...)
        - on_app_write(...)
  - GUI的具体表现形式由script文件定义,对application是透明的,类似effect的描述文件(TBD)

2. 后台程序提供一组功能函数供GUI调用,GUI提供一组通用函数用于创建和定制用户界面。
  - TBD