Schlüsseltechnologie

STP069: Anatomie einer GUI


Listen Later

Wer hat sich nicht schon einmal über schlechte Benutzeroberflächen geärgert? Aber wer wiederum hat sich Gedanken gemacht, warum diese Oberflächen so sind, wie sie sind, oder wie das Ganze überhaupt zustande kommt?

Shownotes
  • Rückbezug zu STP008 (2D-Grafik) und STP010 (3D-Grafik): dort besprochen die grundsätzliche Methodik zum Zeichnen mit Pixeln, aber wer zeichnet hier eigentlich?

    • Infografik zum Rendering-Ablauf unter Linux, mit Display-Manager (bzw. heutzutage Wayland-Compositor) und Desktop-Shell
    • unter Windows war früher alles in explorer.exe, heute gibt es den Desktop Window Manager dafür
    • Thema heute: Wie baut man als Anwendungsprogramm seine GUI zusammen?

      • klassischer Ansatz: GUI-Toolkit; Programmbibliothek mit vorgefertigten Steuerelementen (Texteingabefeld, Knopf, Checkbox, Listenansicht), siehe Beispielbilder im verlinkten Artikel
      • neumodischer Ansatz: Darstellung einer Programmoberfläche mit einer Webbrowser-Engine (z.B. Electron); somit Verwendung von Webtechnologien (HTML, CSS und JavaScript) an Stelle (im Wortsinne) eines GUI-Toolkits
        • bis dahin, dass selbst die Interface-Elemente von Computerspielen mittlerweile quasi mit einem Webbrowser gerendert werden (Beispielprodukt)
        • eine Variation von STP022: Webentwickler gibt es wie Sand am Meer
        • Wie baut man so ein GUI-Toolkit? Retained Mode vs. Immediate Mode

          • Retained Mode: die Grafikbibliothek behandelt die Steuerelemente als langlebige Objekte, die vom Programm über die Zeit manipuliert werden
          • Immediate Mode: beim Zeichnen jedes Einzelbildes muss das Programm die gewünschten Steuerelemente neu deklarieren; Grafikbibliothek speichert nur wenig Zustand (z.B. aktuelle Cursorposition oder noch nicht verarbeitete Eingabeereignisse)
          • Unterschiede:
            • Retained Mode ist intuitiver (aus Entwicklersicht)
            • Retained Mode führt oft zu einer Duplikation von Zustandsverwaltung (z.B. speichert das Checkbox-Steuerelement ein Bit, ob es angehakt ist; und der Applikationscode selber speichert ein gleichlautendes Bit, ob die entsprechende Funktion aktiviert ist)
            • Immediate Mode ist flexibler (z.B. gibt eine direkte Möglichkeit, die Standard-Steuerelemente noch mit einzelnen Zeichenbefehlen zu erweitern)
            • Immediate Mode kann resourcenschonender sein (z.B. geringerer Speicherverbrauch, weil nicht sichtbare Steuerelemente weniger wahrscheinlich im Speicher gehalten werden)
            • Immediate Mode kann auch mehr Ressourcen verbrauchen (z.B. weil jedes Einzelbild neu gerendert werden muss, auch wenn sich meist in weiten Teilen gar nichts ändert)
            • Mischform: React-artige GUI-Toolkits arbeiten im Retained Mode, aber alle Aktualisierungen führen zu einer kompletten Neudeklaration der betroffenen Steuerelemente; diese Deklaration wird dann mit den vorhandenen Steuerelementen abgeglichen
            • Layoutstrategien: Wie werden Steuerelemente gegeneinander angeordnet?

              • Ziel: ein Arrangement von Steuerelementen soll z.B. auf Änderungen der Fenstergröße sinnfällig reagieren
              • Beispielbild aus der Dokumentation zu QGridLayout -> bei Änderungen der Höhe des Fensters sollen die beiden oberen Zeilen gleichbleiben und nur die unterste Zeile wachsen
              • explizite Deklaration durch den Programmentwickler mühselig: stattdessen berechnen Steuerelemente selbst bestimmte Eigenschaften wie "minimale Größe", "maximale Größe", "sinnvolle Größe" oder "wieviel profitiere ich von Wachstum"
              • Layoutstrategien bei Webseiten und Webapplikationen

                • anhand des Textflusses, z.B. Eingabefelder und Links/Schaltflächen innerhalb von Mengentext (in anderen GUI-Toolkits unüblich; das Web ist durch seine Dokumentenorientierung hier besonders)
                • für alles andere bis ca. 2013: tabellenbasierte Layouts mit manuell (z.B. per JavaScript) berechneten Größen; in der Praxis frustrierend und fehleranfällig
                • seit 2013: Flexbox für Layout von Elementen mit dynamischer Größe nebeneinander bzw. in Form eines Textflusses
                • seit 2017: Grid für Layout von Elementen, die sich in ein dynamisches Raster einfügen
                • außerdem seit 2009/2010: CSS Media Queries zum Umschalten zwischen Layouts auf Basis von Eigenschaften des Endgerätes (Bildschirmgröße und -ausrichtung, Maus- oder Touch-Bedienung, Dark Mode oder Light Mode, etc.)
                • zum Weiterhören: Pentaradio vom März 2024: "UI: Hui oder pfui?"

                  ...more
                  View all episodesView all episodes
                  Download on the App Store

                  SchlüsseltechnologieBy Xyrillian Noises


                  More shows like Schlüsseltechnologie

                  View all
                  Chaosradio by Chaos Computer Club Berlin

                  Chaosradio

                  8 Listeners

                  Freak Show by Metaebene Personal Media - Tim Pritlove

                  Freak Show

                  9 Listeners

                  Logbuch:Netzpolitik by Metaebene Personal Media - Tim Pritlove

                  Logbuch:Netzpolitik

                  6 Listeners

                  Methodisch inkorrekt! by Methodisch inkorrekt!

                  Methodisch inkorrekt!

                  15 Listeners

                  c’t uplink - der IT-Podcast aus Nerdistan by c’t Magazin

                  c’t uplink - der IT-Podcast aus Nerdistan

                  7 Listeners

                  Jung & Naiv by Tilo Jung

                  Jung & Naiv

                  39 Listeners

                  heiseshow by heise online

                  heiseshow

                  3 Listeners

                  Übermedien by Übermedien

                  Übermedien

                  3 Listeners

                  Lage der Nation - der Politik-Podcast aus Berlin by Philip Banse & Ulf Buermeyer

                  Lage der Nation - der Politik-Podcast aus Berlin

                  231 Listeners

                  Die Wochendämmerung - Der stabile Wochenrückblick by Katrin Rönicke und Holger Klein (hauseins)

                  Die Wochendämmerung - Der stabile Wochenrückblick

                  14 Listeners

                  Sicherheitshalber by Der Podcast zur sicherheitspolitischen Lage in Deutschland, Europa und der Welt.

                  Sicherheitshalber

                  37 Listeners

                  Bit-Rauschen: Der Prozessor-Podcast von c’t by c't Magazin

                  Bit-Rauschen: Der Prozessor-Podcast von c’t

                  0 Listeners

                  Legion by rbb | NDR | Undone

                  Legion

                  7 Listeners

                  Haken dran – das Social-Media-Update der c't by Gavin Karlmeier

                  Haken dran – das Social-Media-Update der c't

                  2 Listeners

                  Passwort - der Podcast von heise security by Dr. Christopher Kunz, Sylvester Tremmel

                  Passwort - der Podcast von heise security

                  3 Listeners