Am 13. Mai, nach mehr als einem Jahr Entwicklung, wurde die Version 7.0.0 der plattformĂŒbergreifenden Bibliothek veröffentlicht. FTXUI, die zur Erstellung von C++-Anwendungen mit textbasiertem Interface gedacht ist und unter der MIT-Lizenz verbreitet wird.
Funktionen der Bibliothek:
- funktionaler Stil, Àhnlich wie React JS;
- einfacher und eleganter Stil (laut dem Autor der Bibliothek);
- Bearbeitung von Tastatur- und 'Maus'-Ereignissen;
- UnterstĂŒtzung von UTF8 und Unicode;
- UnterstĂŒtzung von True Color;
- UnterstĂŒtzung fĂŒr CursorstilĂ€nderungen;
- UnterstĂŒtzung von Animationen;
- UnterstĂŒtzung von Grafikoperationen;
- keine externen AbhÀngigkeiten;
- PlattformĂŒbergreifende KompatibilitĂ€t (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 aufgeteilt.
Kompilierung
- Ein Skript tools$ amalgamate.py zur Generierung des 'amalgamierten' Quellcodes wurde hinzugefĂŒgt: ftxui.cpp (534 KB), ftxui.hpp (110 KB) und ftxui_all.hpp (643 KB).
- UnterstĂŒtzung fĂŒr C++20-Module hinzugefĂŒgt.
- UnterstĂŒtzung fĂŒr Meson hinzugefĂŒgt.
- Die AbhÀngigkeit von pthread wurde entfernt.
- Die UnterstĂŒtzung fĂŒr Bazel wurde verbessert.
- Weitere Verbesserungen.
Ănderungen zur KompatibilitĂ€t mit vorherigen Versionen
- Umbenennungen:
- Pixel in `Cell
- Image in Surface
- ScreenInteractive in App
- methode PixelAt in CellAt
Um die KompatibilitÀt zu gewÀhrleisten, wurden Aliasnamen und Header bereitgestellt, um bestehende Codes zu keinem Zeitpunkt zu beeintrÀchtigen.
- Verwendung von std::string_view anstelle von const std::string& wo immer möglich. Dies sorgt fĂŒr eine bessere KompatibilitĂ€t mit String-Literalen und vermeidet unnötige Kopien.
Komponenten
- Das System zur Signalerfassung wurde verbessert und modernisiert, indem POSIX sigaction fĂŒr eine zuverlĂ€ssige Signalmaskierung verwendet wird. Der Schutz gegen doppelte Terminalwiederherstellung beim Beenden des Programms wurde durch atomar verfolgte ursprĂŒngliche ZustĂ€nde sichergestellt. UnterstĂŒtzung fĂŒr zusĂ€tzliche POSIX-Signale (SIGBUS, SIGSYS als Fehler-Signale und SIGQUIT, SIGHUP als Signale fĂŒr verzögertes Beenden) wurde hinzugefĂŒgt, und es wurden Sicherheitsprobleme im Zusammenhang mit asynchronen Signalen behoben.
- Ein Problem mit der Cursoranzeige bei der Verwendung des anpassbaren Renderers in verschachtelten Containern wurde behoben.
- Das Cursor-Positioning in Eingabefeldern und die ScrollstabilitÀt wurden korrigiert.
- Die UnterstĂŒtzung fĂŒr nicht-ASCII-Zeichen im Passwort-Eingabemodus wurde behoben.
- Das Flimmern des Cursors bei der Neuzeichnung in der App wurde behoben.
- Eingabeverarbeitung unter Verwendung von POSIX-Pipes.
- Ermöglicht FTXUI-Anwendungen, Daten aus stdin (bei Verwendung von Pipes) zu lesen und gleichzeitig Eingaben von der Tastatur im Terminal zu akzeptieren.
- Wird standardmĂ€Ăig verwendet.
- Kann durch die Verwendung von App::HandlePipedInput(false) deaktiviert werden.
- Nur unter Linux und macOS verfĂŒgbar.
- Viele Fehler wurden behoben.
DOM
- UnterstĂŒtzung fĂŒr Zeilenumbruch (n) innerhalb von text() und vtext().
- Jetzt ĂŒbertrĂ€gt dbox den Fokus von den oberen Schichten auf die unteren, was der visuellen Darstellung entspricht.
- UnterstĂŒtzung fĂŒr Tabellenrand-Dekoratoren hinzugefĂŒgt. Dies ermöglicht zum Beispiel, die Farbe der TabellenrĂ€nder zu Ă€ndern.
- Fehler bei der GanzzahlĂŒberlauf in ComputeShrinkHard behoben.
- Spezialisierung in vbox/hbox/dbox hinzugefĂŒgt, um einen Elementcontainer als Eingabe verwenden zu können.
- HinzugefĂŒgt, um Kinder in gridbox korrekt hinzuzufĂŒgen.
- Darstellung des gauge korrigiert.
- Parametrisierte Varianten von flex-Dekoratoren mit dem Parameter _factor hinzugefĂŒgt. Diese ermöglichen die Angabe benutzerdefinierter Dehnungs- oder Schrumpfungsfaktoren:
flex_factor(grow, shrink), flex_grow_factor(grow), flex_shrink_factor(shrink) sowie Varianten fĂŒr die Achsen x und y.
Optimierungen der Darstellung
- Optimierung der Cursorbewegung in der Methode Screen::ResetPosition (ohne Bildschirmreinigung) in ein parametrisiertes CSI-Befehlsset zur Cursorbewegung nach oben (x1B[A) anstelle von x1B[1A fĂŒr jede Zeile. Dies reduzierte die Anzahl der Escape-Zeichen pro Frame wĂ€hrend der Neuzeichnung (z. B. von ~197 auf 6 Bytes fĂŒr einen Bildschirm mit 50 Zeilen, eine Reduzierung um etwa das 33-Fache).
- Optimierungen an Screen::ToString(), Color::Print() und string_width(), die folgendes beschleunigten:
- Basis-Rendering um ~27%.
- Text-Rendering um ~27%.
- Stil-Rendering um ~38%.
Quelle: linux.org.ru




