1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>Crazy Eddies GUI System: Overview of system components</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.4 -->
<script type="text/javascript">
function hasClass(ele,cls) {
return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}
function addClass(ele,cls) {
if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}
function removeClass(ele,cls) {
if (hasClass(ele,cls)) {
var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
ele.className=ele.className.replace(reg,' ');
}
}
function toggleVisibility(linkObj) {
var base = linkObj.getAttribute('id');
var summary = document.getElementById(base + '-summary');
var content = document.getElementById(base + '-content');
var trigger = document.getElementById(base + '-trigger');
if ( hasClass(linkObj,'closed') ) {
summary.style.display = 'none';
content.style.display = 'block';
trigger.src = 'open.png';
removeClass(linkObj,'closed');
addClass(linkObj,'opened');
} else if ( hasClass(linkObj,'opened') ) {
summary.style.display = 'block';
content.style.display = 'none';
trigger.src = 'closed.png';
removeClass(linkObj,'opened');
addClass(linkObj,'closed');
}
return false;
}
</script>
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">Crazy Eddies GUI System <span id="projectnumber">0.7.6</span></div>
</td>
</tr>
</tbody>
</table>
</div>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Overview of system components </div> </div>
</div>
<div class="contents">
<div class="textblock"><p>The following is intended as a high level overview of the <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> system; the core components are described as are the general relationships between the components. Once you have finished reading this section you should have a comfortable understanding of the way <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> operates.</p>
<p><br/>
</p>
<h2><a class="anchor" id="arch_overview_intro"></a>
Introduction</h2>
<p>Much of the functionality of <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> is exposed - in one way or another - via abstracted interfaces that allow the user of the library to customise the precise way that various functionality is implemented. Whether it's rendering imagery, loading image data, parsing XML files, or any number of other aspects, there usually exists a mechanism for the library user to select - or create - a solution tailored to the needs of their individual project.</p>
<p><br/>
</p>
<h2><a class="anchor" id="arch_overview_lowlevel"></a>
Low Level Interface Objects</h2>
<p>For the most part, the entire <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> system is bootstrapped in one step when the <a class="el" href="classCEGUI_1_1System.html" title="The System class is the CEGUI class that provides access to all other elements in this system...">CEGUI::System</a> object is created. The user passes the <a class="el" href="classCEGUI_1_1System.html#a1d05da171953f93f9494af68b997ebc0" title="Create the System object and return a reference to it.">System::create</a> function their choice of <a class="el" href="classCEGUI_1_1Renderer.html" title="Abstract class defining the basic required interface for Renderer objects.">Renderer</a> object as well as other options like a <a class="el" href="classCEGUI_1_1ResourceProvider.html" title="Abstract class that defines the required interface for all resource provider sub-classes.">ResourceProvider</a>, an <a class="el" href="classCEGUI_1_1XMLParser.html" title="This is an abstract class that is used by CEGUI to interface with XML parser libraries.">XMLParser</a> and an <a class="el" href="classCEGUI_1_1ImageCodec.html" title="Abstract ImageLoader class. An image loader encapsulate the loading of a texture.">ImageCodec</a> (if any of three latter objects are not provided default options are used instead). These four objects - that is the <a class="el" href="classCEGUI_1_1Renderer.html" title="Abstract class defining the basic required interface for Renderer objects.">Renderer</a>, <a class="el" href="classCEGUI_1_1XMLParser.html" title="This is an abstract class that is used by CEGUI to interface with XML parser libraries.">XMLParser</a>, <a class="el" href="classCEGUI_1_1ImageCodec.html" title="Abstract ImageLoader class. An image loader encapsulate the loading of a texture.">ImageCodec</a> and <a class="el" href="classCEGUI_1_1ResourceProvider.html" title="Abstract class that defines the required interface for all resource provider sub-classes.">ResourceProvider</a> - essentially form a bridge from the <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> world to the world outside; these objects are key, so each will be briefly described here so you know the role they play.</p>
<dl class="user"><dt><b>CEGUI::Renderer</b></dt><dd>The <a class="el" href="classCEGUI_1_1Renderer.html" title="Abstract class defining the basic required interface for Renderer objects.">Renderer</a> object is the top level implementation of a set of interfaces that perform rendering - and other video system related services - for <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a>.</dd></dl>
<dl class="user"><dt><b>CEGUI::ResourceProvider</b></dt><dd>The <a class="el" href="classCEGUI_1_1ResourceProvider.html" title="Abstract class that defines the required interface for all resource provider sub-classes.">ResourceProvider</a> object basically loads data indicated by a resource group and a resource name into memory buffers. The exact mechanism employed to do this is not specified - so while for the most part this will likely involve loading file based data from disk, it's possible for a <a class="el" href="classCEGUI_1_1ResourceProvider.html" title="Abstract class that defines the required interface for all resource provider sub-classes.">ResourceProvider</a> implementation to use any other mechanism instead (or as well).</dd></dl>
<dl class="user"><dt><b>CEGUI::XMLParser</b></dt><dd>The <a class="el" href="classCEGUI_1_1XMLParser.html" title="This is an abstract class that is used by CEGUI to interface with XML parser libraries.">XMLParser</a> abstracts access to lower level XML parsing libraries, such as Expat or Xerces-C++. The <a class="el" href="classCEGUI_1_1XMLParser.html" title="This is an abstract class that is used by CEGUI to interface with XML parser libraries.">XMLParser</a> is then used by various components within the <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> system when they require XML data - obtained via the <a class="el" href="classCEGUI_1_1ResourceProvider.html" title="Abstract class that defines the required interface for all resource provider sub-classes.">ResourceProvider</a> - to be parsed.</dd></dl>
<dl class="user"><dt><b>CEGUI::ImageCodec</b></dt><dd>The <a class="el" href="classCEGUI_1_1ImageCodec.html" title="Abstract ImageLoader class. An image loader encapsulate the loading of a texture.">ImageCodec</a> abstracts access to lower level image reading libraries, such as FreeImage or DevIL. The <a class="el" href="classCEGUI_1_1ImageCodec.html" title="Abstract ImageLoader class. An image loader encapsulate the loading of a texture.">ImageCodec</a> is then used by other <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> system components to parse image file data - obtained via the ResouceProvider - into source imagery used by <a class="el" href="classCEGUI_1_1Texture.html" title="Abstract base class specifying the required interface for Texture objects.">CEGUI::Texture</a> objects - as created by the <a class="el" href="classCEGUI_1_1Renderer.html" title="Abstract class defining the basic required interface for Renderer objects.">Renderer</a> object.</dd></dl>
<p><br/>
</p>
<h2><a class="anchor" id="arch_overview_sys_and_mgrs"></a>
System and Manager Objects</h2>
<p>The <a class="el" href="classCEGUI_1_1System.html" title="The System class is the CEGUI class that provides access to all other elements in this system...">System</a> object provides system wide options, settings and functions, as well as access to other non-singleton objects (such as the previously described <a class="el" href="classCEGUI_1_1Renderer.html" title="Abstract class defining the basic required interface for Renderer objects.">Renderer</a>, <a class="el" href="classCEGUI_1_1ResourceProvider.html" title="Abstract class that defines the required interface for all resource provider sub-classes.">ResourceProvider</a>, <a class="el" href="classCEGUI_1_1XMLParser.html" title="This is an abstract class that is used by CEGUI to interface with XML parser libraries.">XMLParser</a> and <a class="el" href="classCEGUI_1_1ImageCodec.html" title="Abstract ImageLoader class. An image loader encapsulate the loading of a texture.">ImageCodec</a> objects). <a class="el" href="classCEGUI_1_1System.html" title="The System class is the CEGUI class that provides access to all other elements in this system...">CEGUI::System</a> also contains the input injection interface that you use to pump externally generated inputs - such as mouse and keyboard input - into the <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> system.</p>
<p>When the core <a class="el" href="classCEGUI_1_1System.html" title="The System class is the CEGUI class that provides access to all other elements in this system...">CEGUI::System</a> object is created the system also creates a set of manager objects that are subsequently used to interact with various parts of <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a>. The main group of managers - as used in the majority of applications - are the <a class="el" href="classCEGUI_1_1ImagesetManager.html" title="Class providing a shared library of Imageset objects to the system.">ImagesetManager</a>, the <a class="el" href="classCEGUI_1_1FontManager.html" title="Class providing a shared library of Font objects to the system.">FontManager</a>, the <a class="el" href="classCEGUI_1_1SchemeManager.html" title="A class that manages the creation of, access to, and destruction of GUI Scheme objects.">SchemeManager</a> and the <a class="el" href="classCEGUI_1_1WindowManager.html" title="The WindowManager class describes an object that manages creation and lifetime of Window objects...">WindowManager</a>. The remaining manager objects, the <a class="el" href="classCEGUI_1_1WindowRendererManager.html">WindowRendererManager</a>, the <a class="el" href="classCEGUI_1_1WindowFactoryManager.html" title="Class that manages WindowFactory objects.">WindowFactoryManager</a> and the <a class="el" href="classCEGUI_1_1WidgetLookManager.html" title="Manager class that gives top-level access to widget data based "look and feel" specifications loaded ...">WidgetLookManager</a> are generally only needed by library users when they come to extend or customise the windows and widgets available to the system.</p>
<p>The key to understanding <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> is in these managers. Generally you do not directly create and destroy objects in <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> (meaning you do not use the C++ <code>new</code> and <code>delete</code> keywords), but rather you use an appropriate manager object to create the object for you. The managers keep track of all the objects created and - because each created object has a name - you can use the managers to get access to created objects at a later time. This arrangement also aids in cleaning up the system when you're done; <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> will destroy any remaining objects automatically when it is closed down (via the <a class="el" href="classCEGUI_1_1System.html#ac38ced3c98206733ce19a9ef49ace059" title="Destroy the System object.">System::destroy</a> function).</p>
<dl class="user"><dt><b>CEGUI::ImagesetManager</b></dt><dd>The <a class="el" href="classCEGUI_1_1ImagesetManager.html" title="Class providing a shared library of Imageset objects to the system.">ImagesetManager</a> manages <a class="el" href="classCEGUI_1_1Imageset.html" title="Offers functions to define, access, and draw, a set of image components on a single graphical surface...">CEGUI::Imageset</a> objects. An <a class="el" href="classCEGUI_1_1Imageset.html" title="Offers functions to define, access, and draw, a set of image components on a single graphical surface...">Imageset</a> represents a series of named regions defined upon some source surface (texture). Each named region defined represents a <a class="el" href="classCEGUI_1_1Image.html" title="Class that represents a single Image of an Imageset.">CEGUI::Image</a> and is typically the lowest level abstraction of imagery used by <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a>; when you - or the system itself - wants to draw something, this typically entails an <a class="el" href="classCEGUI_1_1Image.html" title="Class that represents a single Image of an Imageset.">Image</a> object submitting geometry to a <a class="el" href="classCEGUI_1_1GeometryBuffer.html" title="Abstract class defining the interface for objects that buffer geometry for later rendering.">GeometryBuffer</a> provided via the <a class="el" href="classCEGUI_1_1Renderer.html" title="Abstract class defining the basic required interface for Renderer objects.">Renderer</a>.</dd></dl>
<dl class="user"><dt><b>CEGUI::FontManager</b></dt><dd>The <a class="el" href="classCEGUI_1_1FontManager.html" title="Class providing a shared library of Font objects to the system.">FontManager</a> manages <a class="el" href="classCEGUI_1_1Font.html" title="Class that encapsulates a typeface.">CEGUI::Font</a> objects. In <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> a <a class="el" href="classCEGUI_1_1Font.html" title="Class that encapsulates a typeface.">Font</a> is - unsurprisingly - an abstraction of a typeface of some kind and is used to render textual information. You should be aware that - beneath the surface - the entire font system is actually built on top of the <a class="el" href="classCEGUI_1_1Imageset.html" title="Offers functions to define, access, and draw, a set of image components on a single graphical surface...">Imageset</a> system; when a font is used to draw text it accesses one or more <a class="el" href="classCEGUI_1_1Imageset.html" title="Offers functions to define, access, and draw, a set of image components on a single graphical surface...">Imageset</a> objects holding the imagery for the text glyphs to be drawn.</dd></dl>
<dl class="user"><dt><b>CEGUI::SchemeManager</b></dt><dd>The <a class="el" href="classCEGUI_1_1SchemeManager.html" title="A class that manages the creation of, access to, and destruction of GUI Scheme objects.">SchemeManager</a> manages <a class="el" href="classCEGUI_1_1Scheme.html" title="A class that groups a set of GUI elements and initialises the system to access those elements...">CEGUI::Scheme</a> objects. A <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> <a class="el" href="classCEGUI_1_1Scheme.html" title="A class that groups a set of GUI elements and initialises the system to access those elements...">Scheme</a> is essentially a collection of references to other resources and so provides a means to group resources and definitions that are to be loaded together; essentially a <a class="el" href="classCEGUI_1_1Scheme.html" title="A class that groups a set of GUI elements and initialises the system to access those elements...">Scheme</a> represents a top-level means to form a GUI 'skin'.</dd></dl>
<dl class="user"><dt><b>CEGUI::WindowManager</b></dt><dd>The <a class="el" href="classCEGUI_1_1WindowManager.html" title="The WindowManager class describes an object that manages creation and lifetime of Window objects...">WindowManager</a> manages <a class="el" href="classCEGUI_1_1Window.html" title="An abstract base class providing common functionality and specifying the required interface for deriv...">CEGUI::Window</a> based objects and is the means by which you will create and manage the windows and widgets of your GUIs.</dd></dl>
<dl class="user"><dt><b>CEGUI::WindowFactoryManager</b></dt><dd>Every type of <a class="el" href="classCEGUI_1_1Window.html" title="An abstract base class providing common functionality and specifying the required interface for deriv...">Window</a> based object is required to have a <a class="el" href="classCEGUI_1_1WindowFactory.html" title="Abstract class that defines the required interface for all WindowFactory objects.">WindowFactory</a> based object that creates and destroys instances of that specific window type. <a class="el" href="classCEGUI_1_1WindowFactoryManager.html" title="Class that manages WindowFactory objects.">WindowFactoryManager</a> is where these <a class="el" href="classCEGUI_1_1WindowFactory.html" title="Abstract class that defines the required interface for all WindowFactory objects.">WindowFactory</a> objects are registered with the system. Unless you are registering new concrete <a class="el" href="classCEGUI_1_1Window.html" title="An abstract base class providing common functionality and specifying the required interface for deriv...">Window</a> based classes with the system (or are doing some other advanced operation), you will not need to directly interact with the <a class="el" href="classCEGUI_1_1WindowFactoryManager.html" title="Class that manages WindowFactory objects.">WindowFactoryManager</a>.</dd></dl>
<dl class="user"><dt><b>CEGUI::WindowRendererManager</b></dt><dd>The core <a class="el" href="classCEGUI_1_1Window.html" title="An abstract base class providing common functionality and specifying the required interface for deriv...">Window</a> based objects generally do not perform any specific drawing operations; rather they are only concerned with the logic of the window's implementation. The visual aspects of window objects are delegated to an associated <a class="el" href="classCEGUI_1_1WindowRenderer.html" title="Base-class for the assignable WindowRenderer object.">WindowRenderer</a> object. The <a class="el" href="classCEGUI_1_1WindowRendererManager.html">WindowRendererManager</a> keeps track of the <a class="el" href="classCEGUI_1_1WindowRenderer.html" title="Base-class for the assignable WindowRenderer object.">WindowRenderer</a> objects registered with the system. Again, except when creating new window or widget types, you will not usually need to interact with the <a class="el" href="classCEGUI_1_1WindowRendererManager.html">WindowRendererManager</a>.</dd></dl>
<dl class="user"><dt><b>CEGUI::WidgetLookManager</b></dt><dd>The <a class="el" href="classCEGUI_1_1WidgetLookManager.html" title="Manager class that gives top-level access to widget data based "look and feel" specifications loaded ...">WidgetLookManager</a> is the last manager object, it is part of the Falagard skinning system for <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> and manages <a class="el" href="classCEGUI_1_1WidgetLookFeel.html" title="Class that encapsulates look & feel information for a particular widget type.">WidgetLookFeel</a> objects as loaded from XML LookNFeel files (actually it's possible to define such objects in code alone, but this is rarely - if ever - done). Again, unless you're accessing <a class="el" href="classCEGUI_1_1WidgetLookFeel.html" title="Class that encapsulates look & feel information for a particular widget type.">WidgetLookFeel</a> objects from a custom <a class="el" href="classCEGUI_1_1Window.html" title="An abstract base class providing common functionality and specifying the required interface for deriv...">Window</a> or <a class="el" href="classCEGUI_1_1WindowRenderer.html" title="Base-class for the assignable WindowRenderer object.">WindowRenderer</a> implementation, you will not usually need to use the <a class="el" href="classCEGUI_1_1WidgetLookManager.html" title="Manager class that gives top-level access to widget data based "look and feel" specifications loaded ...">WidgetLookManager</a> directly.</dd></dl>
<p><br/>
</p>
<h2><a class="anchor" id="arch_overview_falmaps"></a>
Falagard Mappings</h2>
<p>The <a class="el" href="classCEGUI_1_1Window.html" title="An abstract base class providing common functionality and specifying the required interface for deriv...">Window</a>, <a class="el" href="classCEGUI_1_1WindowRenderer.html" title="Base-class for the assignable WindowRenderer object.">WindowRenderer</a> and <a class="el" href="classCEGUI_1_1WidgetLookFeel.html" title="Class that encapsulates look & feel information for a particular widget type.">WidgetLookFeel</a> objects are the <a class="el" href="namespaceCEGUI.html" title="Main namespace for Crazy Eddie's GUI Library.">CEGUI</a> system's 'holy trinity'. They each provide part of the functionality required to represent a fully working, interactive window or widget, and are combined via what is known as a "Falagard Mapping" (typically defined in scheme XML files). A falagard mapping is a means to provide a type name to a grouped concrete window or widget type providing the core logic of the widget, a window renderer providing high-level rendering instructions, and a <a class="el" href="classCEGUI_1_1WidgetLookFeel.html" title="Class that encapsulates look & feel information for a particular widget type.">WidgetLookFeel</a> providing the lower-level definitions to be used by the window and window renderer. It is these mapped type names that are typically used when creating windows within the system and frees you from the complexity of needing to create and link these objects manually. </p>
</div></div>
<hr class="footer"/><address class="footer"><small>Generated on Sun Jan 22 2012 16:07:40 for Crazy Eddies GUI System by 
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
</body>
</html>
|