
My design for a C++ GUI library would being with creating an flow component that could render XML + CSS.
The flow component would flow blocks. Blocks would contain text, images, or other objects. If a block changed size, the flow component would reflow immediately.
This is basically what web designers work with in a modern browser like KHTML or Mozilla. I'm far more interested in creating a component of this nature, than another set of gray box wrappers.
Initially, I figured I'd stop short of attempting to create a 2d canvas, something that would be a outlet for vector graphics like SVG or flash.
The components in the GUI library could then be implemented using the flow compnent.
This would mean skipping platform specific widget library, and implementing an cross-platform widget library using this flow component, combining blocks, effects, and images, to create what ever look and feel is desired. The look and feel could be specified by designers somewhat simply using XML + CSS.
You'd get skinnable applications.
Swing took the route of defining look and feel in Java, and foroging native components. I'd like to make it much easier to implement the look and feel.
Create all the widgets using the flow component, and with C++, you'd not pay too dear a penalty for forgoing native components.
Native components are welcome, of course, so long as they play nice the canvas. (Win32 GDI objects do not.)
A huge benefit, too, is that if someone implements a the device class for their device, they could turn to Boost to have a ready Windowing library.
So, I'm going to get working on a flow component...
The real benefit is that every widget now gets to have multi-lingual support as a native capability. And you also get word wrapping, hyphenation, etc.. on every widget...! Mathew