What is Illumination?
Illumination is a collection of classes written in the
programming language C++. The classes are designed to let application developer easily
build graphical user interfaces. Illumination
is distributed under the GNU license. It uses the same technology as
VisualOberon, the predecessor
by the same author but written in Oberon-2.
Illumination is not an integrated programming
environment with build in text editor, builder and that stuff. It is just a
library. Nevertheless is can be the basis for such integrated environment.
Main design criteria for Illumination
Simplicity. Illumination should give great layouting power to the programmer on
the one hand, but also should take away any need to handle low-level GUI
things on the other hand. It should also take away any low-level design
decisions. In that way it is similar to TeX. You give it a abstract
description and it will make it good looking by its own.
Extensibility and fexibility. The classes should be designed to make them easily
extensible. Features missing should be easy to integrate without the need to
rewrite huge code sections and without breaking compability.
Portability. The class library should be portable in that way that
the classes share the same interface among different platforms. Programs
building an interface under one operating system should be portable without
any changes to the code. The class library itself is not portable in that
way that it is implemented by making access to a special OS. Illumination must be
adapted to each OS. However, Illumination tries to build a abstraction layer
everywhere where its is possible to hide OS-dependent details.
Standard conformance. Illumination tries to
be conformant to common standards. For the unix world this especially means
that it tries to support the standards defined by
Illumination should give the programmer access to all common GUI features like
auto font adapting, resizability, and things like drag and drop... It should be
possible to build a complete state of the art GUI.
The used bazzar style of developing offers quick updates and bugfixes, fast response to
problems and good communication and code exchange between developers and users.
About the design...
Illumination tries to achieve the above mentioned goals by...
- ...using themeable controls.
- ...a layout engine.
- ...Model-View pattern.
The layouting engine takes an abstract layout description and then calculates
position and size of the individual controls using the information given in the
description. The concept of layouting engine is not really new, but while there
many proven advantages most development environments still use so called GUI
builders for designing dialogs.
For another development using layouting engines, see the AWT and Swing packages of the
Sun Java implementation. The Java developments have wisely choosen the same solution to
exactly the same set of problems.
What is already implemented?
There is a well running Implementation for X11. The X11 implementation
uses GTK theming if available.
A backend driver for the drawing engine cairo
is finished and is currently the default driver for X11 (if available).
Using cairo for Windows and Mac OS X11 should be possible as soon as there is full support
for these plattforms by the ciaro library and might save a lot of work for the Mac port.
Illumination works on all OS version of the maemo desktop environment (used on Nokia web
tablets). See my maemo page for
There is a well running Implementation for Windows. It uses Windows 2000, XP, Vista theming
code for visual integration into the desktop.
The Mac OS X11 has not been started yet, but
a 80% Mac OS X nativ port. The code is there and just needs to be
ported to get working native version for Mac OS X.
A curses port has been finished but needs more active maintenance.
The current version implements the standard controls available on most plattforms
but also features some more advanced controls.
See the screen shot pages for some examples.
See my maemo page for
Gadgets access their data through models using the model-viewer concept. The
Model-Viewer concept is also used for high level event handling.
A preferences system for configuration of look and feel of the hole system
and individual control types.