24 October 2006

GUI Toolkits - More VCF

I've already covered the Visual Component Framework (VCF), but I feel like talking about it a bit more.

Before starting make sure you check out the list of features from the VCF documentation, as I won't repeat them all here (after all it is what hyperlinking is invented for).

There are three core libraries in the VCF:
  • FoundationKit - The base library for the VCF providing the lower level building blocks for the other libraries. It provides the RTTI system, string support, threading, and much more.
  • GraphicsKit - It's the library that provides the graphic rendering and graphics formats. It has some great functionality from libAGG (The Anti-Grain Geometry Tookit) which I have mentioined in some previous posts.
  • ApplicationKit - The GUI functionality itself. Obviously this is the largest component and covers the widgets, events, focus, and more. It's almost so big there must be a thought to break it down further into smaller functional components.
There are more libraries (kits) that contribute functionality including HTML, OpenGL, the upcoming Regex, and a few more.

One compaint I hear is that the libraries are too large (in file size) which I have never understood as an argument for or against a toolkit (unless we are talking MASSIVE). It is rare that a toolkit has a small amount of dependencies, plus with the VCF you don't need everything if you are into that (but it is obviously more work to do).

I have found writing code in VCF is surprisingly concise and easy to understand. If you have come from an MFC or wxWidgets background, the event system will need some understanding. I was trying out writing something to simulate docking with a small amount of success, although I haven't done as much coding for it as I probably should have. It wasn't more than a little experiment to try out something in the VCF.

I probably should list the major features that it lacks, which are docking windows (and toolbars), fully implemented cross-platform support, scripting language bindings (Edit: There is a basic Javascript engine that has not made it into the release yet), and the finished documentation.

The cross platform aspect remains incomplete for Linux and Mac although the Linux version has pushed on in the recent past. Actually I find it a bit disappointing that it does not have a large community built up around it like some other toolkits. The foundations seem so solid that the system is begging to be extended more.

Make sure you read the documentation here which is excellent although not comprehensive, and not completely finished. Also check out the VCF articles on the CodeProject (do a search for VCF).

As you can tell I am quite positive about this toolkit, it is almost too understated for its own good. I can imagine developing something quite complex in it and being able to extend it for more complex things.