cZUI allows you to quickly create zoomable and scrollable displays of things 2D. It uses vector drawing ibraries like SGE to draw smoothly magnified objects. Objects do not need to be aware of magnification
issues, thus writing with cZUI is easy and fast.
With a rich event framework, cZUI allows complex user actions such as dragging, moving, highlighting,
selecting and removing of any object within the cZUI scene. Included with the distribution are a few
cZUI supports SGE and Cairo over SDL, can be embedded into MFC, and aedGUI widget library via cZUIWidget. Support for other windowing/widget toolkits will be added later.
cZUI contains ready objects for most frequent tasks, just include them in the scene. An overview of cZUI
concepts can be found in the tutorial.
Features of cZUI:
cZUI is written in ANSI C++ and should be supported by a large variety of OSes. It
has been tested on GNU/Linux 2.4, 2.6 and MS Windows.
Support of various graphics libraries:
With a modular graphics and event architecture, cZUI supports SDL, X, and any other windowing
system you may care to write wrappers for. Writing your own graphics/event wrapper for another graphics/event framework is straightforward and should not take more than a few days.
Using a minilithic approach borrowed from Jazz
, cZUI sports a layered design and
a scene tree to allow for easy customization of any object without need of partial rewrite or
Small memory footprint:
Camera/context storage allow the objects to be streamlined and occupy little space. Careful
use of these mechanisms can help remove unnecessary data from objects: the test program with
2080 nodes takes 4044K and (4020K for 1480 nodes), leading to 40 bytes per node.
In a setting of 1 million nodes, this will eat you 44M of total memory.
cZUI was designed to support huge scenes and to be quite fast at that.Currently it
has been tested with a little over 80k nodes (which is not much), this is subject to change. Caution: writing fast apps supporting huge graphs (>30k) will require the author to delve a bit deeper into cZUI and use some more opaque objects, such as SpaceGroup, EventFilter, and ImageGroup. These will allow you much higher speeds by dividing your scene by area, filtering out mousemoves and taking over drawing at high zoomouts.