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




