From: Reece Dunn (msclrhd_at_[hidden])
Date: 2005-02-18 11:50:51


Matthew Johnson wrote:
> I spent some time reading the archives regarding the gui project that
> was started towards the end of last year. Is that project still
> underway? What is the best way of keeping up with the status of it?

Hi Matthew,

I am still interested in developing such a library and am using parts of
it in a few of my own projects. The general feelings I got from those
discussions was that:

1. A "traditional" heirarchy approach to the UI objects (buttons, list
boxes, etc.) is not the right way to go. There is a complexity here when
either (a) developing a framework from the underlying
C-style/Objective-C API, or (b) building the framework on top of an
existing framework such as Qt, wxWidgets, MFC or WTL.

2. Using boost::signals is the best way to go for event handling. The
issues here involve providing the event mechanism for the core API and
one that interacts with a frameworks event model (such as the WTL
message maps).

3. There was a lot of discussion relating to use of native components
vs custom-drawn graphics/UI objects. I still believe that there should
be a graphics unit that handles graphics/font operations and a native-ui
unit that provides an implementation of the native UI (frame, buttons, etc.)

4. Discussion relating to 3 was relating to the document model being
used. I believe that this can be done through a combination of graphics
and UI objects. For example (in Windows):
* Grid -- a custom control
* Table -- a listview UI component
* Document -- a richedit UI component
* HTML -- an mshtml component
* VectorGraphics -- custom use of the graphics unit to render the
vector elements

5. Relating to 3&4 was discussion about HTML/CSS. There are various
areas that this comes into play, for example a color object interacting
with the CSS color (name, RGB, etc.) and the rectangle/rect object.

My current thinking on a GUI library is to make it modular. Thus,
Boost.Platform would form the base (encapsulating OS and library
detection, strings (ASCII/Unicode builds in Windows, string conversions,
etc.), entry-point abstraction). Then you have Boost.Geometry (rect,
point, size), Boost.Event, Boost.Graphics and Boost.UI.

Regards,
Reece