Boost logo

Boost :

Subject: Re: [boost] Thoughts for a GUI (Primitives) Library
From: Artyom (artyomtnk_at_[hidden])
Date: 2010-09-08 00:28:34

Hello all,

Few points why would GUI library be impossible to bring into
Boost (IMHO).

The major problem is religious wars.

Let's start:

1. Use "native" widgets or not

   - "native" - which native for Unix to choose Qt? GTK? Motif? Tk?
   - Your own vector based:

      - how would they integrate to current desktop environment's look and feel
      - how are you going to implement complex text rendering under Unix?
        I mean complex text layouts like right to left, up to down,
        what about fonts rendering... etc. etc. etc.
     Most likely it would be done wrong.

2. What strings should be used? std::string, std::wstring, custom string
   like Qt's QString or GTKmm's ustring?

   - std::string/UTF-8 - hey what about Windows developers to believe
     that wide API is best?
   - std::wstring - hey what about Unix developers for whom UTF-8 is
     natural and wchar_t is wasteful (4 bytes)
   - Custom strings - why to use this when you have strings in C++!
   - Use both... Now everything become bloated, the code is doubled!
     or everything in headers or templates.

3. What about event loop:

   - Let's use ASIO as central event loop! But it template bloated
   - Let's use our custom event loop. But how do I integrate with
     ASIO event loop to support asynchronous networking.

4. What about OS support. What GUI systems are you going to work with:

   - Windows, X Server, What about cell phones? What about frame buffers?

5. What 3D rendering would you use?

   - OpenGL - hey but Direct3D developers don't like it, it has bad windows
support (thanks to MS)
   - Direct3D - hey but it is not portable
   - Both - hey but you can't write cross platform code
   - Let's do our custom...

6. What about licensing? Can we use LGPL libraryes? GPL libraries? or only
BSD/MIT like ones.

   - Only BSD - you will get stuck implementing 99% of the code from the scratch
     (especially stuff like complex text layout, that by no chance would be done
   - BSD and LGPL - hey but it is not free enough got 10% of users! But hey,
these 10%
     of users use proprietary libraries that much worthier then GPL...

Bottom line

It is not about how specific widget would look
like, it is about concept, most GUI library developers
decide one way or other, it may be good or bad but it works.

So finally you don't like some design, you choose something
that works, if this is Qt with preprocessor, if this is
"native C++" GTK or even macro-based wxWidgets... or even
(ohh hell) MFC.

But finally it gives you solid and useful codebase - and what
is mostly important: well debugged and supported one!

GUI framework is **VERY** complex project and it is **VERY** hard
to do it right (see Enlightenment as great example how cool stuff
may never become useful)

More then that it is not clear what "right" is...

It would never happen in Boost. As it tries to please them all.
So you can discuss look and feel and other issues for how.



Boost list run by bdawes at, gregod at, cpdaniel at, john at