从2008年年底我就一直想设计一套基于OpenGL的游戏专用GUI系统出来
当然有人说现在不是有现成的吗?CEGUI...
使用这个当然没什么问题
但是觉得自己开发的游戏引擎还是配备一个套自行开发的GUI系统比较好(比如irr)
当然在下面使用若干子库(比如freetype,sigc++等等)还是没有问题的
也是从那个时候看了很多GUI系统,比如CEGUI,MyGUI,GLOOEY,UFO GUI,UI LIB 等等
之后我开始设计了一个套GUI系统但是感觉问题多多
一个主要的问题就是没有处理好事件
现在重新看UI系统
设计她的前置条件有
1.良好的字体渲染器
2.对象系列化
3.中文输入.
4.其它
UI系统应该包括的内容(个人感觉)
1.UI事件
2.UI工厂(或者管理器)
3.UI控件对象(按键,组合框等等)
4.UI边框(装饰器)
5.UI布局管理器
6.其它
故从盖莫引擎2.1.2版本起我会逐步加入新设计的GUI引擎
下面是我的开胃菜
GUI主题色
设置这个的目的是为了统一GUI控件颜色而不需要一个一个设计它
下面是实现很简单的!
class G_DLL_API UIThemeColor : public Object
{
public:
////////////////////////////////////////////////////////
/// 获取默认主题色
////////////////////////////////////////////////////////
static UIThemeColor GetDefaultTheme();
public:
////////////////////////////////////////////////////////
/// 构造,析构主题色
////////////////////////////////////////////////////////
UIThemeColor();
UIThemeColor(const Color &normal,const Color &disable,const Color &focus,const Color &tagged);
UIThemeColor(UIThemeColor &theme);
~UIThemeColor(){}
////////////////////////////////////////////////////////
/// 使用默认主题色
////////////////////////////////////////////////////////
void UseDefaultTheme();
////////////////////////////////////////////////////////
/// 重新设置,获取主题色
////////////////////////////////////////////////////////
void SetThemeColor(const Color &normal,const Color &disable,const Color &focus,const Color &tagged);
void GetThemeColor(Color &normal,Color &disable,Color &focus,Color &tagged);
////////////////////////////////////////////////////////
/// 设置,获取主题正常色
////////////////////////////////////////////////////////
void SetNormalColor(const Color &color){this->color[0] = color;}
Color GetNormalColor()const{return color[0];}
////////////////////////////////////////////////////////
/// 设置,获取主题不可用色
////////////////////////////////////////////////////////
void SetDisableColor(const Color &color){this->color[1] = color;}
Color GetDisableColor()const{return color[0];}
////////////////////////////////////////////////////////
/// 设置,获取主题聚焦颜色
////////////////////////////////////////////////////////
void SetFocusColor(const Color &color){this->color[2] = color;}
Color GetFocusColor()const{return color[2];}
////////////////////////////////////////////////////////
/// 设置,获取主题(被选中的)颜色
////////////////////////////////////////////////////////
void SetTaggedColor(const Color &color){this->color[3] = color;}
Color GetTaggedColor()const{return color[3];}
private:
static UIThemeColor themecolor;
//! 当前保留一个空的颜色值
static const int themecolor_number = 5;
Color color[themecolor_number];
然后每个控件包含一个主题色对象
(当前这里认为控件有4个状态.正常,禁止,聚焦,选中)