GUI Redevelopment

The current OpenTTD GUI code is inflexible and unpleasant. Therefore an effort is now underway to design and build a replacement system.

Expresso tried it in this thread but realised what a large project it is and very sensibly stopped.

Because it's such a large project we do need to be totally convinced that we have to reimplement the GUI instead of just improving on what we already have before we start down that road.

Requirements

Design

Apparently it's okay to write bits of OpenTTD in C++ now, so with that in mind it's obvious that one of these bits should be the GUI. Then we can have a nice light object-oriented design with sanity and cleanliness and a good sense of hygiene, which flosses twice a day.

Performance requirements and the desire not to end up increasing OpenTTD's system requirements mean that we can't go too fancy on the drawing system. A compositing model would probably use too much memory, so we need good clipping and good z-order handling to avoid things drawing on top of each other when they shouldn't.

At this time we do not intend to alter the basic look of OpenTTD, so the new GUI needs to draw its controls so that they look like the ones we already have. This is of course entirely achievable but does not preclude designing the system so that we can do other things with the look later on.

Obviously some thought needs to go into this.