Op 13 mei, na meer dan een jaar ontwikkeling, werd versie 7.0.0 van de cross-platform bibliotheek uitgebracht FTXUI, ontworpen voor het maken van applicaties met een tekstinterface in C++ en verspreid onder de MIT-licentie.
Mogelijkheden van de bibliotheek:
- functionele stijl, vergelijkbaar met React JS;
- eenvoudige en elegante stijl (volgens de auteur van de bibliotheek);
- verwerking van toetsenbord- en muisgebeurtenissen;
- ondersteuning voor UTF8 en Unicode;
- ondersteuning voor True Color;
- ondersteuning voor het wijzigen van de cursorstijl;
- ondersteuning voor animaties;
- ondersteuning voor tekenen;
- afwezigheid van externe afhankelijkheden;
- cross-platform (Linux/MacOS, WebAssembly, Windows).
Wijzigingen
Documentation
- Documentgeneratie met Doxygen is verbeterd.
- Een eigen thema voor Doxygen is toegevoegd.
- Documentatie is opgesplitst in meerdere pagina's.
Compilatie
- Een script tools$ amalgamate.py is toegevoegd voor het genereren van 'amalgamated' broncode: ftxui.cpp (534 Kb), ftxui.hpp (110 Kb) en ftxui_all.hpp (643 Kb).
- Ondersteuning voor C++20 modules is toegevoegd.
- Ondersteuning voor Meson is toegevoegd.
- Afhankelijkheid van pthread is verwijderd.
- Ondersteuning voor Bazel is verbeterd.
- Andere verbeteringen.
Compatibiliteitswijzigingen met eerdere versies
- Hernoemingen:
- Pixel in `Cell
- Image in Surface
- ScreenInteractive in App
- methode PixelAt in CellAt
Voor compatibiliteit zijn er aliassen en headers opgenomen om bestaande code niet te verstoren.
- Gebruik std::string_view in plaats van const std::string& waar mogelijk. Dit zorgt voor betere compatibiliteit met stringliteralen en voorkomt onnodige kopieƫn.
Componenten
- Het systeem voor het onderscheppen van signalen is verbeterd en gemoderniseerd met behulp van POSIX sigaction voor betrouwbare maskering van signalen. Er is bescherming toegevoegd tegen dubbele terminalherstel bij het afsluiten van het programma door atomair de oorspronkelijke staat bij te houden. Ondersteuning voor extra POSIX-signalen (SIGBUS, SIGSYS als fouten, en SIGQUIT, SIGHUP als signalen voor uitgestelde beƫindiging) is toegevoegd en beveiligingsproblemen met asynchrone signalen zijn verholpen.
- Probleem met cursorweergave bij gebruik van een aangepaste Renderer in geneste containers is verholpen.
- Het positioneren van de cursor in invoervelden en de stabiliteit van scrollen zijn verbeterd.
- Ondersteuning voor niet-ASCII-tekens in wachtwoordinvoermodus is verbeterd.
- Flikkeren van de cursor bij het opnieuw tekenen in App is opgelost.
- Invoerverwerking met behulp van POSIX pipes
- Sta apps FTXUI in staat om gegevens te lezen uit stdin (bij gebruik van pipe) en tegelijkertijd invoer van het toetsenbord in de terminal te accepteren.
- Wordt standaard gebruikt.
- Kan worden uitgeschakeld door App::HandlePipedInput(false) te gebruiken.
- Alleen beschikbaar op Linux en macOS.
- Vele fouten zijn opgelost.
DOM
- Ondersteuning voor nieuwe regel (n) binnen text() en vtext().
- Nu geeft dbox de focus van de bovenste lagen naar de onderste, wat overeenkomt met de visuele weergave.
- Ondersteuning voor tabelranden decorateurs is toegevoegd. Dit stelt bijvoorbeeld in staat om de kleur van tabelranden te veranderen.
- Een integer overflow-fout in ComputeShrinkHard is opgelost.
- Specialisatie toegevoegd aan vbox/hbox/dbox voor het mogelijk maken van gebruik van de Element-container als invoer.
- Problemen met het toevoegen van kindelementen in gridbox zijn opgelost.
- Problemen met de weergave van gauge zijn opgelost.
- Parametrische varianten van flex-decorateurs met parameter _factor zijn toegevoegd. Deze stellen in staat om aangepaste rek- of krimpcoefficiƫnten op te geven:
flex_factor(grow, shrink), flex_grow_factor(grow), flex_shrink_factor(shrink), en varianten voor de x- en y-assen.
Renderoptimalisaties
- Optimalisatie van de cursorbeweging binnen regels in de methode Screen::ResetPosition (zonder het scherm te wissen) naar ƩƩn parametrische set CSI-commando's voor het verplaatsen van de cursor omhoog (x1B[A) in plaats van ƩƩn x1B[1A per regel uit te voeren. Dit verminderde het aantal escape-tekens per frame tijdens het opnieuw tekenen (bijvoorbeeld ~197 -> 6 bytes voor een scherm met 50 regels, ~33-voudige vermindering).
- Optimisaties van Screen::ToString(), Color::Print() en string_width(), wat leidde tot:
- Basis rendering met ~27%.
- Tekst rendering met ~27%.
- Stijl rendering met ~38%.
Bron: linux.org.ru




