GLUT users wanting a GLUT user interface toolkit, Tom Davis (an SGI founder) has contributed his micro-UI toolkit ported to GLUT. With this user interface library, it should be possible to write an OpenGL application with a very asthetically pleasing user interface. See the subdirectories: lib/mui test/mui progs/mui The micro-UI is "as is" and currently doesn't have any documentation beyond the short description below written by Tom. - Mark Kilgard July 16, 1997 Here's some experimental code for a micro-ui (MUI). The code that draws the widgets is taken from the old Showcase "libui", and has been ported to OpenGL. The showcase code had routines to draw the various widgets in many "states" -- selected, highlighted, inactive, et cetera. The philosophy behind MUI is to provide a ui library with multiple levels of access. At the lowest level, if you just want to draw pretty buttons and handle all the interaction yourself, it should provide that. But if you'd like to make a list of the widgets and have the code do locate-highlight as your mouse passes over the buttons and make callbacks when buttons are pressed or sliders are slid, it should provide that too. You should also be able to work at intermediate levels. For example, the Showcase libui has "radio buttons", where a bunch of them are linked together, and if you press one, the previously pressed button is released. But if you'd like to use these for a non-radio-like purpose becasue you like the way they look, you can do so, but you'll have to manually control which ones are activated. There's no layout tool (although I have some ideas on that topic -- I'll try to add them to this someday), so you have to give the coordinates of all the widgets. I have not yet ported all the Showcase libui widgets. So far the list of ported widgets includes: generic buttons radio buttons tiny radio buttons labels bold labels vertical sliders horizontal sliders text entry fields scrolling text blocks (for selecting file names, for example) pull-down menu (*) (*) Actually, I just provide the menu bar, and what gets activated are the GLUT pop-up menues. It works fine, except that the GLUT pop-ups are not drawn in the same style as the rest of the MUI widgets. There's one very weird thing in the code -- the MUI always draws stuff using a sort of display list -- usually a very short display list. The reason for this is that the Showcase libui was designed to run on systems with as few as 16 colors. To get a bigger variety of colors in the 16 color case, it would draw things twice with 2 different colors and 2 different stipple patterns. So to draw pink if it only had red and white, it would draw half the pixels in red, change the stipple to hit the other bits, and then draw the same thing in white. If the system had good color capability, it would just draw in pink. I've tossed out the code that did multiple drawing, but the display list structure is ubiquitous, so I didn't bother to rip it out yet. I shouldn't take too long; I wanted to get all the widgets ported first and then I figured I'd do the whole thing at once rather than piece-meal. I just don't want anyone to conclude that I'm a moron because of the obviously inefficient drawing code. (There are pleny of other features of the code you can use to see if I'm really a moron :^) The code hasn't been cleaned up in the sense that I'd like to have the only visible external names begin with "mui_". I'd also like to make sure that the only include file you'll need is mui.h. And mui.h still exposes too much. I've only used it for a small number of examples (about 3) of applications, and each new one I do causes me to clean things up a bit more. -- Tom Davis (davis@sgi.com)