Penguin was a project I embarked on at the tender age of 13. I wanted a meaty C++ project that involved a strong object heirarchy and algorithms I would have to design myself. I picked a GUI toolkit because I was developing games using the Allegro graphics library under DOS (using the DJCPP compiler) and I wanted a powerful GUI to enrich my other projects.
I invented the fragment- and window-management code myself in a bottom-up design kind of way. I based the event system and layout management on Java's SWING.
The resulting system took me about a year to write. While single-threaded, it was performant enough to run under DOS, Windows, and Linux using only Allegro's software-rendering. It could support transparency, drop-shadows, and all kinds of effects.
I based the look-and-feel on Windows 98, which I was using at the time, but I pursued skinning to emulate MacOS's Aqua look-and-feel as well.
I wrote a 200-page Word document that detailed the design and implemntation of the system, which you can find here
For some screenshots, see the wiki.
Here was the original README, though I never got round to putting it on SourceForge, as was my plan:
What is Penguin? Penguin is a simple GUI library, with its own display routines, callback system, and widget classes. It is meant to function as a "lightweight" GUI system for any platforms supporting the Allegro graphics library - these include Windows, DOS, Linux, MacOS and BeOS. It supports basic 'cool stuff' like transparency and masked images, and sports a reasonable set of widgets that should suffice for common usage. What Penguin is not: It is not thread-safe, and all callback functions execute from within the GUI management code. It does not have an extensive widget set, just enough to get going with. It does not feature multi-platform graphics (pluggable look 'n feel). It is obviously not competing with the vast arena of proffesional-level projects that are in one way or another associated with Graphical User Interfaces - the primary function of Penguin was to provide the author with a learning experience, and to gain some technical knowledge in C++ (which it did). I decided to release it in case it turned out to be useful to anyone who was interested in a non-native GUI for use in an Allegro environment. On the Penguin wish-list: - Dockable widgets to use with a toolbar. - Further set of 'bind' template functions as in GTK's GCode.