FTXUI 7.0.0









Am 13. Mai, nach mehr als einem Jahr Entwicklung, wurde die plattformĂŒbergreifende Bibliothek 7.0.0 veröffentlicht. FTXUI, die zur Erstellung von C++-Anwendungen mit textbasierten Schnittstellen gedacht ist und unter der MIT-Lizenz verbreitet wird.

Funktionen der Bibliothek:

  • funktionaler Stil, Ă€hnlich wie bei React JS;
  • ein einfacher und eleganter Stil (laut Meinung des Bibliotheksautors);
  • Verarbeitung von Tastatur- und „Maus“-Ereignissen;
  • UnterstĂŒtzung von UTF8 und Unicode;
  • UnterstĂŒtzung von True Color;
  • UnterstĂŒtzung der CursorstilĂ€nderung;
  • UnterstĂŒtzung von Animationen;
  • UnterstĂŒtzung von Zeichnen;
  • keine externen AbhĂ€ngigkeiten;
  • PlattformunabhĂ€ngigkeit (Linux/MacOS, WebAssembly, Windows).
Änderungen

Dokumentation

  • Die Dokumentationserstellung mit Doxygen wurde verbessert.
  • Ein eigenes Thema fĂŒr Doxygen wurde hinzugefĂŒgt.
  • Die Dokumentation wurde in mehrere Seiten unterteilt.

Kompilation

  • Ein Skript tools$ amalgamate.py zur Generierung von 'amalgamiertem' Quellcode wurde hinzugefĂŒgt: ftxui.cpp (534 KB), ftxui.hpp (110 KB) und ftxui_all.hpp (643 KB).
  • UnterstĂŒtzung fĂŒr C++20-Module wurde hinzugefĂŒgt.
  • UnterstĂŒtzung fĂŒr Meson wurde hinzugefĂŒgt.
  • Die AbhĂ€ngigkeit von pthread wurde entfernt.
  • Die UnterstĂŒtzung fĂŒr Bazel wurde verbessert.
  • Weitere Verbesserungen.

Änderungen zur KompatibilitĂ€t mit frĂŒheren Versionen

  • Umbenennungen:
    • Pixel in `Cell
    • Image in Surface
    • ScreenInteractive in App
    • Methode PixelAt in CellAt
      Um die KompatibilitÀt zu gewÀhrleisten, wurden Aliase und Header bereitgestellt, um die FunktionalitÀt des bestehenden Codes nicht zu beeintrÀchtigen.
  • Verwendung von std::string_view anstelle von const std::string& wo immer möglich. Dies verbessert die KompatibilitĂ€t mit String-Literalen und vermeidet unnötige Kopien.

Komponenten

  • Das Signalsystem wurde verbessert und modernisiert, indem POSIX sigaction verwendet wird, um eine zuverlĂ€ssige Maskierung von Signalen zu gewĂ€hrleisten. Es wird ein doppeltes Wiederherstellen des Terminals beim Verlassen des Programms durch atomare Verfolgung des ursprĂŒnglichen Zustands verhindert. UnterstĂŒtzung fĂŒr zusĂ€tzliche POSIX-Signale (SIGBUS, SIGSYS als Fehler- und SIGQUIT, SIGHUP als verzögerte Abschluss-Signale) wurde hinzugefĂŒgt und Sicherheitsprobleme mit asynchronen Signalen wurden behoben.
  • Ein Problem mit der Cursoranzeige bei Verwendung eines benutzerdefinierten Renderers in verschachtelten Containern wurde behoben.
  • Die Cursorpositionierung in Eingabefeldern und die StabilitĂ€t der Bildlaufbewegung wurden verbessert.
  • Die UnterstĂŒtzung nicht-ASCII-Zeichen im Passwort-Eingabemodus wurde verbessert.
  • Das Flackern des Cursors bei der Neuzeichnung in App wurde beseitigt.
  • Eingabeverarbeitung mit POSIX-Pipes
    • Ermöglicht es FTXUI-Anwendungen, Daten aus stdin (bei Verwendung einer Pipe) zu lesen und dabei weiterhin Tasteneingaben im Terminal zu akzeptieren.
    • Wird standardmĂ€ĂŸig verwendet.
    • Kann durch Verwendung von App::HandlePipedInput(false) deaktiviert werden.
    • Nur in Linux und macOS verfĂŒgbar.
  • Viele Fehler wurden behoben.

DOM

  • UnterstĂŒtzung fĂŒr ZeilenumbrĂŒche (n) innerhalb von text() und vtext().
  • Nun ĂŒbertrĂ€gt dbox den Fokus von oberen auf untere Ebenen, was der visuellen Darstellung entspricht.
  • UnterstĂŒtzung fĂŒr Dekoratoren von TabellenrĂ€ndern hinzugefĂŒgt. Damit ist es beispielsweise möglich, die Farbe der TabellenrĂ€nder zu Ă€ndern.
  • Ein Fehler bei der ganzzahligen Überlauf im ComputeShrinkHard wurde behoben.
  • Eine Spezialisierung in vbox/hbox/dbox wurde hinzugefĂŒgt, um den Container Element als Eingabedaten verwenden zu können.
  • Im gridbox wurde das HinzufĂŒgen von Kinderelementen korrigiert.
  • Die Anzeige des Gauge wurde korrigiert.
  • Parametrisierte Varianten der Flex-Dekoratoren mit dem Parameter _factor wurden hinzugefĂŒgt. Sie ermöglichen die Angabe von benutzerdefinierten Dehnungs- oder Kompressionsfaktoren:
    flex_factor(grow, shrink), flex_grow_factor(grow), flex_shrink_factor(shrink), sowie Varianten fĂŒr die Achsen x und y.

Optimierungen der Darstellung

  • Die Optimierung der Cursorbewegung ĂŒber Zeilen in der Methode Screen::ResetPosition (ohne Bildschirmreinigung) in einem parametrisierten Satz von CSI-Befehlen zur Cursorverschiebung nach oben (x1B[A) anstelle der Ausgabe eines x1B[1A pro Zeile. Dies reduzierte die Anzahl der Escape-Zeichen pro Frame wĂ€hrend der Neuzeichnung (z. B. ~197 -> 6 Byte fĂŒr einen Bildschirm mit 50 Zeilen, ~33-fache Reduzierung).
  • Die Funktionen Screen::ToString(), Color::Print() und string_width() wurden optimiert, was zu einer Beschleunigung fĂŒhrten:
    • Grundlegendes Rendering um ~27%.
    • Text-Rendering um ~27%.
    • Stil-Rendering um ~38%.

Quelle: linux.org.ru

60GB SSD 8Gb DDR4