FLTK, the Window Toolkit of NUKE

“FLTK was created for NUKE”, says D2 Senior Software Developer Bill Spitzak who created FLTK at D2 and got permission to make it open source. FLTK (the Fast Light Toolkit, pronounced “fulltick”) is a C++ graphical user interface toolkit for OpenGL on X11, Windows or Mac OS X. FLUID (the Fast Light User Interface Designer) is a FLTK tool to design interfaces graphically. “FLTK version 1.1 is the official version, but is not maintained by me”, notes Spitzak. He continues, “That's Michael Sweet who works for Easy Software Products, the company that produced CUPS. Matthias Melcher, a former worker here, did the Windows port of FLTK after leaving D2, and the same guys did a Mac OS X port. ILM and Sony use FLTK a lot.”

The first version of NUKE used Forms on GL for its GUI, but D2 wanted to update NUKE for OpenGL. Forms offered no support for OpenGL, and D2 had no access to its source code. Using OpenGL to write all the widgets was too slow, so FLTK uses X too. D2's FLTK originally supported only IRIX machines, but at about that time Linux arrived, and support was added quickly. That helped bring NUKE to Linux.

Spitzak created a new FLTK 2.0 version that's used internally, but he hasn't time to finish it. It's available only from SourceForge CVS. Improvements include: 1) Completely changed menus and browsers where all items are widgets. 2) Styles—global appearance changes and plugins to load KDE themes. He also would like to add Gnome themes. 3) No interpreter. The main reason Motif grew so large was to parse text files, making it into an interpreter. 4) Drawing redone not to blink on resize. 5) Clipboard separate from selection. 6) Drag-and-drop with X protocol. 7) XFT anti-alias fonts. In 2.0, the style structures and menus are big changes. Spitzak notes that many of the 2.0 improvements have been brought into version 1.1. A feature he hasn't created yet is indirection pointers to draw in print or OpenGL.

“Fonts are so bad”, points out Spitzak:

Why should we have to think about what font we use? Why isn't it UTF-8 all the time? And, if a character is not in a font pick, why doesn't the system automatically find another font that is? Another issue, in Microsoft Windows a user may not want a window to raise on click, but Windows won't let you do that. Trying to use child windows is kludge, as independent windows they will blink. If raising the child didn't raise the parent that might work. Child window problems make overlapping windows useless.

“I'd like to replace X with something to do graphics more simply”, says Spitzak. “OpenGL can't just draw something. There's a lot of texture set up to draw something once. And, OpenGL doesn't pay attention to X windows clipping. UI consistency is way over-sold. Toolkits are making programs look too alike, without brand identity.”