I am currently working on my Master's thesis. I am creating a platform-independent graphical user interface library in C++. Though I intend the library to be general-purpose, it will be especially aimed at providing the mechanism to create a platform-independent symbolic mathematics package. It's far from done, but I currently have a library which can do basic GUI interaction (text, buttons, dials, scrolling, clipping) on a Macintosh. It's great fun, and occupies lots of my time.

Eventually I hope to have full documentation here. For the moment, here are some sample screen dumps of test programs using the library:

The above pictures demonstrate some geometric primitives. On the left we have a green box (blue border) with a red box contained inside it. The red box is actually the same size as the green box, but it is clipped to the border of the green box. The library supports arbitrary clipping of primitives, including arbitrary polygons. The second window shows the same green box, but now I've also instantiated a border object to surround the box. The border is fully customizable, and in this example it has been set to a different color and outline color for each edge.

The library allows great flexibility in placing objects. Objects' positions can be defined in terms of other objects to implement any relationship. The window above shows some examples of these relationships. I have defined a stack object which stacks pictures from the bottom up. The bottom item on the stack is a centered text item; the next two are left aligned colored boxes. If I were to remove the blue box from the stack, the red box would automatically move down a notch. Most objects in this environment are dynamically updated; for instance, the boxes in the first two windows would automatically enlarge if the window were expanded.

The library allows great flexibility in defining, shaping, and placing text objects. Above is a simple text object. I specified its position (the position of its upper left corner), but I didn't specify the width or height. Rather, I instructed the library to size and wrap the text in the smallest possible space, subject to the condition that its width be twice its height. Unlimited similar combinations are possible. The box around the text is a normal box (with transparent interior) whose position and shape I defined to mimic that of the text.

The library implements several standard controls. Above are examples of a (very large) text button, a check box, a radio button, a couple slider controls, and a couple scroll bars. Note that these are all implemented from scratch-- they use none of the underlying operating system control functions. This makes it possible for a program to look identical on different platforms. Since this is not generally desirable, however, the library will ultimately use each system's native controls, and provide these system-independent controls as an option.

This screen dump shows off the library's very powerful coordinate system features. The code which created this picture is identical to the code which created the secod screen above, except that I used a non-orthogonal coordinate system in this case, and drew a black box to show its boundaries. The controls all work as you would expect. You can't do this with your average GUI builder....

This window combines several of the elements from above. The scroll bars scroll the text within a square area, and the text is clipped to the square area.

Menu support is not complete, but the screen dumps above show what has currently been implemented. Basic menu selection from a popup menu is supported. Again, these menus were implemented independently of any system support for menus.