[Home]BoostGUI

BOOST WIKI | RecentChanges | Preferences | Page List | Links List

Discussion and working notes on the specification and design of a cross-platform GUI library for Boost.

Discussions on the Boost.Devel Mailing List

Gui toolkit development has been discussed on the developer's mailing list a number of times over the years. BoostDevelGuiThreads has links to the major threads

A pragmatic GUI proposal GuiDesignDoc.

Existing GUI Libraries to Survey

A list of libraries to survey along with volunteers to complete individual survey components. Just suggestions for now. We can hash out the exact list on the developers list.

Specific Technologies / Techniques to Survey

A list of specific technologies / techniques to consider. Just suggestions for now. We can hash out the exact list on the developers list.

Survey Evaluation Points

A list of specific evaluation points to be addressed for each library in the survey. Just suggestions for now. We can hash out the exact list on the developers list.

Survey Results Summary by Library / Evaluation Point

To be worked on later. My two cents: Apple's Cocoa, an Objective-C framework spawned from NextStep/OpenStep? is percieved as one of the best GUI libraries available by many people whose opinion I respect. As it is written in Objective-C, some of it's techniques are not transferable to C++ (nor should they be, Obj-C is dynamically typed). One of the finest things in Cocoa is it's TableViews and OutlineViews? (AKA TreeViews?). Cocoa TableViews are extremely easy to use now with ArrayControllers?, which map standard Cocoa NSArray's to table elements. I would very much like to see boost::GUI TableViews just as easily compatible with STL containers, perhaps something like this:

template<typename Iter_t> void set_data_source(Iter_t begin, Iter_t end) { /*...*/ }

Anyways, I think however it is done, TableViews ought to be very simple to use.

Top Ten Hassles All GUI Programmers Have to Deal With

What are the largest challenges faced by GUI programmers? Definitely - this needs to be a library, not a framework. Taking over main is unacceptable -- MK.

Top Ten Ideas For NEW Features Not Included in Surveyed Libs

Ideas (potentially stupid) for NEW features that we could integrate into a Boostified GUI library.

Notes

General notes and commentary.

Top One Issue To Be Solved First

Completely Cheeky Interjection

Since you guys seem to be looking at the whole topic of GUI design, why not add http://superficial.sourceforge.net to your sources of inspiration. It's not strictly a GUI toolkit and the demo implementation is in Java, but have a look anyway.

Another Interjection

Don't forget the looks. Although not all people care, many people get pissed off if a widget set looks plain alien on the desktop. It can lead even to the point where the software doesn't get used because of it. For instance GTK(-wimp) looks very bad on all Windowses, Tk looks like crap everywhere etc etc. If you're going to make a GUI library make sure it uses widget libraries that are able to look good on all/most of the targeted platforms. For instance wxwidgets is fabulous on that area...

Yet Another Interjection

Dovetailing on the previous question of looks, would the library be sufficiently abstracted that it could support a console as well as a graphical mode? There are plenty of use-cases (headless servers, embedded, OS installations, etc.) when operating in a pure 80-column mode would enhance the capability of the library.

GUI ?

An important consideration is the scope of the library. This sort of ties in with JFB's One Thing above. Most current GUI toolkits solve far more problems than just widgets: they contain threading, filesystem access, networking, and so on. Boost already provides some of these. But even those not provided by Boost now should not be part of a GUI library; they should be separate libraries. Even within the graphical stuff, there is the question of scope. Does Boost.GUI provide just drawing and windowing primitives? Does it provide a set of widgets? How large a set should it provide? Should there perhaps be two libraries, similar to GDK and GTK? Or two libraries in a different way, with one providing primitives, and the other a widget set? Very often when looking at GUI libraries, I get the feeling that the authors aren't entirely clear on the scope of their library. - SebastianRedl?

GUI libraries will always have specialized widgets, arbitrary graphics, deep operating system dependencies, different architectures; no GUI framework is good for everyone, so a "Boost::GUI" would be at best a popular option for specific tastes and needs, not a standard.

To help GUI programmers, both of applications and of frameworks, Boost could instead analyze their needs to reduce wheel reinvention.

Some difficult items that often get a low quality, low portability or low functionality treatment in GUIs include:

Some of these needs are outside Boost's scope or addressed by existing libraries, but I think that some brainstorming could allow the design of new libraries with a wide applicability, including non-GUI uses, and a well defined purpose, instead of a vague mega-library with undecidable requirements. - LorenzoGatti?

Scope of modern GUI

If we speak of GUI only (without built-in XML parser, networking objects, embedded-browser widgets, custom template library, like in Qt etc.), we end up with following issues:

  1. User Interface - widgets, buttons, controls, viewing-controls (e.g. directory trees) etc.
  2. Input System - mice, keyboards, joysticks and maybe other controls.
  3. Graphics
    1. Raster Graphics - surface upon which you can draw (a bunch of pixels data)
    2. Vector Graphics - scalable images, OpenGL? etc.
  4. Text support
    1. Unicode - huge issue addressed by ICU library which is optionally used with boost.regex
    2. Fonts - even more complicated issue than Unicode
Fonts are a great trouble. It is hard to think of a way to make them system independent. Rendering some complex scripts can be a very difficult task. Some scripts have diactric marks and stuff. Each such script has to be addressed separately. There are a lot of different font formats - Raster, Vector, OpenType?, Type1 to name a few. You can render them in plenty of ways. High complexity level.

Generally it's a great trouble as you can not create a separate and unrelated library for each and every one of those issues. They're all related. And together they produce a huge scope. You can not create a GUI library without relying on existing non-boost libraries. You need things like Freetype library etc. So I don't see how fully-functioning GUI library within boost is possible. Only small-scope implementation is possible.


BOOST WIKI | RecentChanges | Preferences | Page List | Links List
Edit text of this page | View other revisions
Last edited December 3, 2007 9:51 am (diff)
Search:
Disclaimer: This site not officially maintained by Boost Developers