A full-featured GUI toolkit and window manager built on the Allegro library. Made this when I was 13/14, mainly out of boredom -- this was the first year that I had dropped out of school, so it was a nice large project of the kind I hadn't been able to pursue before. Up here for historical interest (and because the code still actually runs after…
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



About penguin

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.

Original README

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.