simon-mueller / bratwurst

Working title for Remote Desktop Support (expect a rename, do not bookmark)
0 stars 0 forks source link

Moderne, leichtgewichtige plattformübergreifende GUI Library schreiben #24

Open dannyedel opened 11 years ago

dannyedel commented 11 years ago

Natürlich zunächst mal beschränkt auf die Funktionen, die wir tatsächlich benötigen - später evtl als eigenes Projekt ausgliedern.

Vorschlag Codename: lwgui - lightweight graphical user interface

Richtlinien (und somit auch die Gründe, warum keine bestehende genommen wird)

  1. Light-Weight: Die Library definiert keine eigenen Zeichenroutinen und Grafiken, sondern leitet zum "OS" weiter (GTK, KDE, Mac-Cocoa, Windows...)
  2. Moderne Codingstandards:
    1. KEINE Makros. Zero.
    2. Fehler werden immer über Exceptions weitergegeben, niemals über return-codes.
    3. Benutze so viel standard library wie möglich, erfinde nicht zuviele Räder neu, erst recht nicht wenn sie wunderbar laufen und auf allen halbwegs aktuellen Platformen verfügbar sind... (denke an Vector, Array, String, Map, List...)
    4. Templates sind was tolles
    5. Niemals plain Pointer. Alles ist in einem unique_ptr, shared_ptr oder weak_ptr eingebaut - oder (bei Funktionsparametern sinnvoll) eine Referenz.
      1. Versuche generell, so wenig Pointer wie möglich zu verwenden - i.A. sind Pointer ein Zeichen, dass Move-Semantik benötigt wird, oder Referenz-Semantik.
    6. C++11 Funktionen wie auto, range-for, Move-Constructors etc. sind da, um benutzt zu werden.
    7. Seit C++11 gibt es einen Plattformübergreifenden Threading-Standard, nutzen!
    8. WENN überhaupt casts, dann C++-Casts wie dynamic_cast, static_cast etc. nicht (plaincast*)
    9. Wenn Boost eine Lösung für ein Problem hat, Boost-Libraries nutzen!
  3. Jede Funktion läuft auf jeder Plattform, oder wird nicht aufgenommen.
  4. Sourcecode, der die Library benutzt, muss unverändert auf jeder Plattform compilieren und funktionieren, und zwar ohne Tricks wie #ifdef PLATTFORM1 #elsifdef PLATTFORM2 #endif etc. - derartige Sachen sind Implementierungsdetail und nicht Interface!
  5. Library muss klein genug sein, um statisch gelinkt werden zu können
dannyedel commented 11 years ago

Plattformen auf denen getestet werden sollte: