CEGUI 概念简介

背景

Crazy Eddie’s GUI(MIT License),一款开源的GUI(图形用户界面)库。使用C++实现,遵循OOP,其宗旨:

games developers who should be spending their time creating great games, not building GUI sub-systems.

目前最新版为0.8.7,官网(http://cegui.org.uk/)
下文以0.8.7版本进行介绍。

架构图

在这里插入图片描述

  • ImageCode:图形解码模块(如:FreeImage、SILY等)
  • ResourceProvider:资源管理模块
  • XMLParser: XML解析
  • ScriptMode:脚本模块
  • Render+Texture:渲染器模块(如:OpenGL、DirectX等)
  • InputEvent:输入系统模块
  • CEGUICoreWindowRenderSet:窗口渲染模块
  • Base(System):CEGUI核心控制体系模块,包括执行流、资源管理、图像集、系统接口

主要概念

属性

属性系统(Property)
CEGUI中的属性,其实就是一组数据。这些数据可以影响窗口的外观、行为等等。
不仅Window,所有对象,都可以有属性。
属性系统的诞生,是为了可以通过脚本,利用xml动态配置窗口的相关数据。

<Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />

事件

事件系统(Event)
事件是窗口通知外部自身状态改变的机制或者方法。当某个时间发生时,调用某些函数处理通知事件。
CEGUI中的事件系统通过事件标识+一组处理函数组成。
对于Callback函数,CEGUI封装了下面几种类型:
在这里插入图片描述
事件和属性系统,主要是为了在XML中设置窗口事件和窗口逻辑。

资源管理

CEGUI中主要有以下几种资源:

  • .scheme文件:CEGUI系统用到的各种数据的定义,如字体信息、图像集信息、窗口外观信息。
<?xml version="1.0" ?>									
  <GUIScheme Name="TaharezLook">// 表示scheme					
  <Imageset Name="TaharezLook" Filename="TaharezLook.imageset" />// 图像集	
  <Font Name="Commonwealth-10" Filename="Commonwealth-10.font" />// 字体		
  <LookNFeel Filename="TaharezLook.looknfeel" />//外观文件(falagard系统) 	
  <WindowRendererSet Filename="CEGUICoreWindowRenderSet" />// 窗口渲染模块		
  <FalagardMapping WindowType="TaharezLook/Tree" TargetType="CEGUI/Tree" 									
   Renderer="Falagard/Tree" LookNFeel="TaharezLook/Tree" />// 外部名称、内部名称、渲染窗口、外观
</GUIScheme>									
									

  • .looknfeel文件:外观系统,可以提供 XML 文件指定窗口的图像布局,子窗口的布局,默认属性,属性定义等.
  • .imageset文件:图像集文件。将一副图像看成若干小图像的集合。图片位置信息,区分各个小图像。(图像集的大小,需为2的幂尺寸,此时显卡处理效率最佳)
  • .layout文件:布局文件,包含了一个窗口的布局信息。
<?xml version="1.0" encoding="UTF-8"?>								
<GUILayout version="4">								
        <Window type="TaharezLook/FrameWindow" name="Frame" >								
            <Property name="Text" value="Console" />								
            <Property name="TitlebarFont" value="DejaVuSans-10" />								
            <Property name="MaxSize" value="{{1,0},{1,0}}" />								
            <Property name="TitlebarEnabled" value="True" />								
            <Property name="Area" value="{{0.208832,0},{0.650387,0},{0.80736,0},{0.998062,0}}" />								
            <Window type="TaharezLook/MultiLineEditbox" name="ConsoleText" >								
                <Property name="Text" value=""/>								
                <Property name="ReadOnly" value="True" />								
                <Property name="MaxTextLength" value="1073741823" />								
                <Property name="MaxSize" value="{{1,0},{1,0}}" />								
                <Property name="Area" value="{{0.019238,0},{0.030633,0},{0.973721,0},{0.769186,0}}" />								
            </Window>								
            <Window type="TaharezLook/Editbox" name="Input" >								
                <Property name="MaxTextLength" value="1073741823" />								
                <Property name="MaxSize" value="{{1,0},{1,0}}" />								
                <Property name="Area" value="{{0.019238,0},{0.772141,0},{0.973721,0},{0.980658,0}}" />								
            </Window>								
        </Window>								
</GUILayout>								
窗口
  • CEGUI中的窗口是一个抽象的概念。其可简单理解为,是一个可独立描画的单位
  • CEGUI的设计思想,以窗口为单位的WidgetSets。
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐