An example game menu using CEGUI
|Original author(s)||Paul D Turner|
|Initial release||December 2004|
|Stable release||0.8.3 (December 7, 2013[±] )|
|Operating system||Windows, Mac OS X, Linux, ...|
Before version 0.5.0:
Crazy Eddie's GUI (CEGUI) system is a graphical user interface C++ library. It was designed particularly for the needs of videogames, but the library is usable for non-game tasks, such as applications and tools. It is designed for user flexibility in look-and-feel, as well as being adaptable to the user's choice in tools and operating systems.
The strength of CEGUI's design is that it is highly configurable. The CEGUI system itself does not directly load files, render windows, directly display text, or even fetch input from the system. CEGUI interfaces with these through user-defined code, though the CEGUI source code package comes with a number of modules for using certain components and libraries.
This freedom allows the user to use CEGUI in any kind of resource management system or operating environment. Input is expected to be gathered by the user's code, possibly filtered as the user sees fit, and then delivered to the CEGUI for window processing.
CEGUI comes with a reasonable set of widgets, comparable to those of the average widget toolkit.
CEGUI can be completely customized using standard image, xml, and/or code editing tools. However, CEGUI also provides tools designed specifically to aid in the design and development of CEGUI based interfaces.
Older versions of CEGUI (before 0.8) provided separate tools for editing different aspects of the interface. The most notable of those being the Imageset and Layout editors.
Since CEGUI 0.8 there exists a new unified editing tool called CEED which is being actively developed. It incorporates all aspects of GUI development into a single tool.
File loading and resource management are handled through a back-end "Resource Provider Module". The user can create custom modules to define how resources are accessed. This allows the library to be used in virtually any operating environment. The default resource provider is cross-platform and provides standard file-access mechanics for loading resources. An optional minizip module enables resource-loading from zip-archives.
CEGUI has a flexible Memory Management system. This system was based on OGRE and allows clients to map different types of allocators to different types of objects. By default all objects use the operating system's default allocator. CEGUI provides support for OGRE and nedmalloc allocators.
CEGUI has an optional back-end Scripting Module. Lua and Python scripting modules are provided by CEGUI. The full CEGUI API is available via script so that clients can create windows, define relationships, and handle events all within a scripted environment.
Look and feel
CEGUI has a powerful system for defining the look and feel of various widgets. This system, known as Falagard, allows the user to define the look of a widget via XML files (or C++ code, if the user prefers). It can also change the layout behavior of any widgets.
CEGUI has a built-in animation system. This system allows many standard transitional effects from moving and resizing windows to color transforms and image sequencing. Animations can be defined in XML and triggered by any event. The client can specify window-properties as key-frames, how to transition between frames, and the transition-time between frames.
CEGUI can be built without any dependencies to outside libraries. However, typical configurations require FreeType, a rendering module, an XML parser module, and an image codec module. CEGUI already provides support for several external libraries thanks to its modular design:
|Rendering Module||OpenGL 3.2+ Core Profile||Uses the programmable rendering pipeline and only non-deprecated functionality and is therefore compatible with OpenGL Core Profile contexts (available since OpenGL 3.2). It can also be used with older OpenGL versions and/or Compatibility Profile, as long as the required functionalities are available.|
|OpenGL||Uses the fixed-function rendering pipeline. It is designed to be compatible with very early OpenGL versions, as early as OpenGL 1.2, using some OpenGL extensions.|
|Microsoft Direct3D||Microsoft Direct3D 9, 10, and 11 are supported using separate modules.|
|OGRE||The latest stable Ogre version is supported in the releases.|
|Irrlicht||The latest stable Irrlicht version is supported in the releases.|
|Image Codec Module||SILLY||Default image codec, which is based on the SILLY library. Supports many formats.|
|DevIL||Image codec based on the DevIL library.|
|FreeImage||Image codec based on the FreeImage library.|
|OGRE||Image codec that loads data via image loading facilities of OGRE.|
|Resource Provider Module||Default||The internal resource provider of CEGUI can be used without requiring an extra module. It uses standard cross-platform file-access.|
|OGRE||Ogre users can use CEGUI's Ogre ResourceManager. This way the resource locations of CEGUI can be specified in the same way as it is done for the Ogre resources already.|
|minizip||CEGUI's MinizipResourceProvider allows users to provides the ability to load the resource files from locations within .zip files.|
|XML Parser Module||Expat||Default XML parser of CEGUI. Uses the Expat library for XML parsing.|
|LibXML2||Uses the LibXML2 library for XML parsing.|
|RapidXml||Uses the RapidXml library for XML parsing.|
|TinyXML||Uses the TinyXML library for XML parsing.|
|Xerces-C++||Uses the Xerces-C++ library for XML parsing. It can do schema validation using the .xsd files provided in CEGUI's resources.|
|Font Module||FreeType||FreeType is the default font library of CEGUI and currently the only officially supported one.|
|Regular Expression Module||PCRE||Default regular expression library and currently the only officially supported one. Uses PCRE.|
|Scripting Module||Lua||Provides lua bindings using tolua++.|
|Python||Official Python bindings are available using PyCEGUI|
|Memory Management||OGRE||Ogre's memory allocator can optionally be used for CEGUI's memory management.|
|nedmalloc||nedmalloc can optionally be used as memory allocator.|
|Bi-Directional Language Module||MiniBIDI||MiniBIDI based implementation of CEGUI's Bidi visual mapping.|
|FriBIDI||FriBIDI based implementation of CEGUI's Bidi visual mapping.|