分析CEGUI的最小资源定制
来源:互联网 发布:淘宝电商平台技术架构 编辑:程序博客网 时间:2024/04/23 17:02
分析CEGUI的最小资源定制
本文针对只创建一个按钮(PushButton)的情况,分析CEGUI资源目录datafiles下最少可以放些什 么,并加以解释。[sihan@localhost datafiles]$ tree.
|-- fonts
| |-- Commonv2c.ttf
| |-- Commonwealth-10.font
| `-- Font.xsd
|-- imagesets
| |-- Imageset.xsd
| |-- TaharezLook.imageset
| `-- TaharezLook.tga
|-- looknfeel
| |-- Falagard.xsd
| `-- TaharezLook.looknfeel
`-- schemes
|-- GUIScheme.xsd
`-- TaharezLook.scheme
CEGUI资源文件
如下是资源类的一个列表,这四个是必须用到的:
CEGUI::Imageset - Imageset xml and texture image files.
CEGUI::Font - Font xml and ttf font files.
CEGUI::Scheme - Scheme xml files.
CEGUI::WidgetLookManager - LookNFeel xml files
这两个实在这次没有用到的:
CEGUI::WindowManager - Window layout xml files.
CEGUI::ScriptModule - Script files in whichever scripted langauge.
- 图片集Imageset
Imageset只是原图形/纹理文件某个区域的定义(Imageset定义时将会指定区域)。每个定义的区域都有一个唯一的名字,并且在系统内被 认为是一个Image。Image是Imageset中一个基本的元素。如果想要更改CEGUI画出的图形,可以更改原图形/纹理文件,或者更改 image的定义区。 - 字体 Font
可以定义两种类型的字体供CEGUI使用:
动态字体 基于true-type(.ttf)的字体文件
静态字体 一个位图字体,这种字体基于一个定义了Images的Imageset。 - Scheme
Schema是把零碎的数据文件组合起来的一种方法。 它也是装载和注册widget类型的最简便的方法。一个Schema可以包含以下一个或者多个类型的定义(这些文件描述的资源可以在schema被装载时 装载)。
Imageset
Font
Window Set
Window Alias
Imageset和font在前面已经提到过。一个Window Set指定了可装载模块(.dll/.so, 等等)的名字。
Widgets集包含了你希望注册的模块集。(注,根据网上的资料,widgets类似于windows的themes)
Window或者widget类型可以有多个名字,Windows Alias提供了这一机制。我们也可以通过这种机制使一个widget"隐藏"另一个已经注册了的widget。 - 布局layout
布局文件包含了一个窗口布局的信息,它也是xml格式的。其中每个'window'元素定义了被创建的window或者widet,'Property' 元素定义每个window的属性值。
<?xml version="1.0" ?>
<GUIScheme Name="TaharezLook">
<Imageset Name="TaharezLook" Filename="TaharezLook.imageset" />
<Font Name="Commonwealth-10" Filename="Commonwealth-10.font" />
<LookNFeel Filename="TaharezLook.looknfeel" />
<WindowRendererSet Filename="CEGUIFalagardWRBase" />
<FalagardMapping WindowType="TaharezLook/Button" TargetType="CEGUI/PushButton" Renderer="Falagard/Button" LookNFeel="TaharezLook/Button" />
</GUIScheme>
TaharezLook.looknfeel:
<?xml version="1.0" ?>
<Falagard>
<!--
***************************************************
TaharezLook/Button
***************************************************
-->
<WidgetLook name="TaharezLook/Button">
<PropertyDefinition name="NormalTextColour" initialValue="FFFFFFFF" redrawOnWrite="true" />
<PropertyDefinition name="HoverTextColour" initialValue="FFFFFFFF" redrawOnWrite="true" />
<PropertyDefinition name="PushedTextColour" initialValue="FFFFFFFF" redrawOnWrite="true" />
<PropertyDefinition name="DisabledTextColour" initialValue="FF7F7F7F" redrawOnWrite="true" />
<PropertyDefinition name="VertLabelFormatting" initialValue="CentreAligned" />
<PropertyDefinition name="HorzLabelFormatting" initialValue="CentreAligned" />
<PropertyDefinition name="NormalImage" initialValue="" redrawOnWrite="true" />
<PropertyDefinition name="HoverImage" initialValue="" redrawOnWrite="true" />
<PropertyDefinition name="PushedImage" initialValue="" redrawOnWrite="true" />
<PropertyDefinition name="DisabledImage" initialValue="" redrawOnWrite="true" />
<PropertyDefinition name="VertImageFormatting" initialValue="Stretched" redrawOnWrite="true" />
<PropertyDefinition name="HorzImageFormatting" initialValue="Stretched" redrawOnWrite="true" />
<ImagerySection name="normal">
<FrameComponent>
<Area>
<Dim type="LeftEdge"><AbsoluteDim value="0" /></Dim>
<Dim type="TopEdge"><AbsoluteDim value="0" /></Dim>
<Dim type="Width"><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height"><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
<Image type="LeftEdge" imageset="TaharezLook" image="ButtonLeftNormal" />
<Image type="RightEdge" imageset="TaharezLook" image="ButtonRightNormal" />
<Image type="Background" imageset="TaharezLook" image="ButtonMiddleNormal" />
</FrameComponent>
<ImageryComponent>
<Area>
<Dim type="LeftEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="TopEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="Width" ><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height" ><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
<ImageProperty name="NormalImage" />
<VertFormatProperty name="VertImageFormatting" />
<HorzFormatProperty name="HorzImageFormatting" />
</ImageryComponent>
</ImagerySection>
<ImagerySection name="hover">
<FrameComponent>
<Area>
<Dim type="LeftEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="TopEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="Width" ><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height" ><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
<Image type="LeftEdge" imageset="TaharezLook" image="ButtonLeftHighlight" />
<Image type="RightEdge" imageset="TaharezLook" image="ButtonRightHighlight" />
<Image type="Background" imageset="TaharezLook" image="ButtonMiddleHighlight" />
</FrameComponent>
<ImageryComponent>
<Area>
<Dim type="LeftEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="TopEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="Width" ><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height" ><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
<ImageProperty name="HoverImage" />
<VertFormatProperty name="VertImageFormatting" />
<HorzFormatProperty name="HorzImageFormatting" />
</ImageryComponent>
</ImagerySection>
<ImagerySection name="pushed">
<FrameComponent>
<Area>
<Dim type="LeftEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="TopEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="Width" ><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height" ><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
<Image type="LeftEdge" imageset="TaharezLook" image="ButtonLeftPushed" />
<Image type="RightEdge" imageset="TaharezLook" image="ButtonRightPushed" />
<Image type="Background" imageset="TaharezLook" image="ButtonMiddlePushed" />
</FrameComponent>
<ImageryComponent>
<Area>
<Dim type="LeftEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="TopEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="Width" ><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height" ><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
<ImageProperty name="PushedImage" />
<VertFormatProperty name="VertImageFormatting" />
<HorzFormatProperty name="HorzImageFormatting" />
</ImageryComponent>
</ImagerySection>
<StateImagery name="Normal">
<Layer>
<Section section="normal" />
<Section section="label">
<ColourProperty name="NormalTextColour" />
</Section>
</Layer>
</StateImagery>
<StateImagery name="Hover">
<Layer>
<Section section="hover" />
<Section section="label">
<ColourProperty name="HoverTextColour" />
</Section>
</Layer>
</StateImagery>
<StateImagery name="Pushed">
<Layer>
<Section section="pushed" />
<Section section="label">
<ColourProperty name="PushedTextColour" />
</Section>
</Layer>
</StateImagery>
<StateImagery name="PushedOff">
<Layer>
<Section section="hover" />
<Section section="label">
<ColourProperty name="HoverTextColour" />
</Section>
</Layer>
</StateImagery>
<StateImagery name="Disabled">
<Layer>
<Section section="normal">
<Colours topLeft="FF7F7F7F" topRight="FF7F7F7F" bottomLeft="FF7F7F7F" bottomRight="FF7F7F7F" />
</Section>
<Section section="label">
<ColourProperty name="DisabledTextColour" />
</Section>
</Layer>
</StateImagery>
</WidgetLook>
</Falagard>
Commonwealth-10.font:
<?xml version="1.0" ?>
<Font Name="Commonwealth-10" Filename="Commonv2c.ttf" Type="FreeType" Size="10" NativeHorzRes="800" NativeVertRes="600" AutoScaled="true"/>
TaharezLook.imageset:
<?xml version="1.0" ?>
<Imageset Name="TaharezLook" Imagefile="TaharezLook.tga" NativeHorzRes="800" NativeVertRes="600" AutoScaled="true">
<Image Name="ClientBrush" XPos="2" YPos="2" Width="64" Height="64" />
<Image Name="GenericBrush" XPos="9" YPos="71" Width="1" Height="1" />
<Image Name="ButtonLeftNormal" XPos="68" YPos="20" Width="12" Height="16" />
<Image Name="ButtonMiddleNormal" XPos="82" YPos="20" Width="12" Height="16" />
<Image Name="ButtonRightNormal" XPos="96" YPos="20" Width="12" Height="16" />
<Image Name="ButtonLeftPushed" XPos="68" YPos="38" Width="12" Height="16" />
<Image Name="ButtonMiddlePushed" XPos="82" YPos="38" Width="12" Height="16" />
<Image Name="ButtonRightPushed" XPos="96" YPos="38" Width="12" Height="16" />
<Image Name="ButtonLeftHighlight" XPos="68" YPos="56" Width="12" Height="16" />
<Image Name="ButtonMiddleHighlight" XPos="82" YPos="56" Width="12" Height="16" />
<Image Name="ButtonRightHighlight" XPos="96" YPos="56" Width="12" Height="16" />
<Image Name="MouseArrow" XPos="138" YPos="127" Width="31" Height="25" XOffset="0" YOffset="0" />
</Imageset>代码
glut_loop.cpp:
#include <GL/glew.h>
#include <GL/freeglut.h>
#include <CEGUI.h>
#include <CEGUIDefaultResourceProvider.h>
#include <RendererModules/OpenGLGUIRenderer/openglrenderer.h>
#define DATA_FILES "./datafiles/"
void render(void);
void resource_group(void);
void load_data_files(void);
void create_window(void);
int window_id;
bool keep_running = true;
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(640, 480);
window_id = glutCreateWindow("GLUT Loop");
glutSetCursor(GLUT_CURSOR_NONE);
GLenum err = glewInit();
CEGUI::OpenGLRenderer* myRenderer = new CEGUI::OpenGLRenderer(0);
new CEGUI::System(myRenderer);
resource_group();
load_data_files();
create_window();
while (keep_running)
{
glutMainLoopEvent();
render();
CEGUI::System::getSingleton().renderGUI();
glutSwapBuffers();
}
glutDestroyWindow(window_id);
return 0;
}
void render(void)
{
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
void resource_group(void)
{
CEGUI::DefaultResourceProvider *rp = static_cast<CEGUI::DefaultResourceProvider*>
(CEGUI::System::getSingleton().getResourceProvider());
rp->setResourceGroupDirectory("schemes", DATA_FILES "schemes/");
rp->setResourceGroupDirectory("imagesets", DATA_FILES "imagesets/");
rp->setResourceGroupDirectory("fonts", DATA_FILES "fonts/");
rp->setResourceGroupDirectory("looknfeels", DATA_FILES "looknfeel/");
CEGUI::Imageset::setDefaultResourceGroup("imagesets");
CEGUI::Font::setDefaultResourceGroup("fonts");
CEGUI::Scheme::setDefaultResourceGroup("schemes");
CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeels");
}
void load_data_files(void)
{
CEGUI::SchemeManager::getSingleton().loadScheme("TaharezLook.scheme");
if (!CEGUI::FontManager::getSingleton().isFontPresent("Commonwealth-10"))
CEGUI::FontManager::getSingleton().createFont("Commonwealth-10");
CEGUI::System::getSingleton().setDefaultFont("Commonwealth-10");
CEGUI::System::getSingleton().setDefaultMouseCursor("TaharezLook", "MouseArrow");
}
void create_window(void)
{
using namespace CEGUI;
WindowManager &wmgr = WindowManager::getSingleton();
Window* myRoot = wmgr.createWindow("DefaultWindow", "root");
System::getSingleton().setGUISheet(myRoot);
// 创建PushButton
PushButton *btn = (PushButton*)wmgr.createWindow("TaharezLook/Button", "testButton");
myRoot->addChildWindow(btn);
// 设置位置,大小
btn->setPosition( UVector2( UDim(0.25f, 0), UDim(0.25f, 0) ) );
btn->setSize( UVector2( UDim(0, 60), UDim(0, 24) ) );
btn->setText("OK");
}
Makefile:
glut_loop: glut_loop.o
g++ glut_loop.o -lglut -L/usr/local/lib/ -lCEGUIBase -lCEGUIOpenGLRenderer -o glut_loop
glut_loop.o: glut_loop.cpp
g++ -g -c glut_loop.cpp -I/usr/local/include/CEGUI
.PHONY: clean
clean:
rm -rf *.o glut_loop
- 分析CEGUI的最小资源定制
- CEGUI::String类分析
- 关于Gson定制的分析
- 资源的最小单位是什么
- CEGUI FirstWindow和FalagardDemo1分析
- CEGUI的文件结构
- CEGUI 的迷惑
- CEGUI的Scheme笔记
- CEGUI 的一些问题
- cegui的问题
- cegui的事件机制
- cegui的looknfeel配置
- CEGUI的字体缓冲
- CEGUI的窗口管理
- CEGUI的事件系统分析
- cegui的编译
- 定制6410开发板的linux最小内核/文件系统
- cegui
- OpenGL 创建一个CEGUI窗口
- wamp建站
- 中毒后回收站我的文档出错解决方法
- 微机原理课程设计32位汇编学习之三(显示字符串)
- CFile的Unicode宽字符写文件
- 分析CEGUI的最小资源定制
- Spring工作原理
- Windows下服务管理cmd
- 微机原理课程设计32位汇编学习之四(显示字符串之特殊字体)
- 同步/异步与阻塞/非阻塞的区别
- 建立C++的dll
- VMWare与主机连接并接入Internet
- FreeGlut 框架
- 关于解释性语言和编译性语言