13. května, po více než roce vývoje, byl vydán 7.0.0 multiplatformní knihovna FTXUI, určené k vytváření aplikací s textovým uživatelským rozhraním v C++ a distribuované pod licencí MIT.
Funkce knihovny:
- funkcionální styl, podobně jako React JS;
- jednoduchý a elegantní styl (podle autora knihovny);
- zpracování událostí klávesnice a myši;
- podpora UTF8 a Unicode;
- podpora True Color;
- podpora změny stylu kurzoru;
- podpora animací;
- podpora kreslení;
- absence třetích závislostí;
- multiplatformnost (Linux/MacOS, WebAssembly, Windows).
Změny
Dokumentace
- Opraveno generování dokumentace pomocí Doxygen.
- Přidána vlastní téma pro Doxygen.
- Rozdělení dokumentace na několik stránek.
Kompilace
- Přidán skript tools$ amalgamate.py pro generaci „amalgamovaného“ zdrojového kódu: ftxui.cpp (534 KB), ftxui.hpp (110 KB) a ftxui_all.hpp (643 KB).
- Přidána podpora pro moduly C++20.
- Přidána podpora Meson.
- Odstraněna závislost na pthread.
- Opravená podpora Bazel.
- Další vylepšení.
Změny kompatibility s předchozími verzemi
- Přejmenování:
- Pixel na Cell
- Image na Surface
- ScreenInteractive na App
- metoda PixelAt na CellAt
Pro zajištění kompatibility jsou k dispozici aliasy a záhlaví, aby se nezměnila funkčnost stávajícího kódu.
- Použití std::string_view místo const std::string& tam, kde je to možné. To zajišťuje lepší kompatibilitu s literály řetězců a zabraňuje zbytečným kopiím.
Komponenty
- Vylepšen a modernizován systém zachytávání signálů pomocí POSIX sigaction pro spolehlivou masku signálů. Zajištěna ochrana proti dvakrát obnovenému terminálu při ukončení programu pomocí atomického sledování původního stavu. Přidána podpora dalších signálů POSIX (SIGBUS, SIGSYS jako signály selhání a SIGQUIT, SIGHUP jako signály oddáleného ukončení) a opraveny problémy se zabezpečením asynchronních signálů.
- Opraven problém s vykreslováním kurzoru při použití přizpůsobeného Renderer ve vnořených kontejnerech.
- Opraveno umístění kurzoru v textových polích a stabilita rolování.
- Opravená podpora pro ne-ASCII znaky v režimu zadávání hesla.
- Odstraněno blikání kurzoru během překreslování v App.
- Zpracování vstupu pomocí POSIX pipes
- Umožňuje aplikacím FTXUI číst data ze stdin (při použití pipe) a zároveň přijímat vstup z klávesnice v terminálu.
- Používá se jako výchozí.
- Může být zakázáno pomocí App::HandlePipedInput(false).
- Dostupné pouze v Linuxu a macOS.
- Opraveno mnoho chyb.
DOM
- Podpora pro nový řádek (n) uvnitř text() a vtext().
- Nyní dbox předává fokus z horních vrstev na dolní, což odpovídá vizuálnímu zobrazení.
- Přidána podpora dekorátorů hranic tabulek. To umožňuje například měnit barvu hranic tabulky.
- Opraveno přetečení celého čísla v ComputeShrinkHard.
- Přidána specializace pro vbox/hbox/dbox k možnosti použití kontejneru Element jako vstupu.
- V gridbox bylo opraveno přidávání podřízených prvků.
- Opraveno zobrazení gauge.
- Přidány parametrizované varianty dekorátorů flex s parametrem _factor. Ty umožňují uvádět uživatelské koeficienty pro roztažení nebo zhuštění:
flex_factor(grow, shrink), flex_grow_factor(grow), flex_shrink_factor(shrink), stejně jako varianty pro osy x a y.
Optimalizace vykreslování
- Optimalizováno přesunutí kurzoru po řádcích v metodě Screen::ResetPosition (bez vymazání obrazovky) do jednoho parametrizovaného souboru příkazů CSI pro přesun kurzoru nahoru (x1B[<n>A) místo výstupu jednoho x1B[1A na každý řádek. To snížilo počet únikových znaků na snímek během překreslování (např. ~197 -> 6 bajtů pro obrazovku se 50 řádky, ~33násobné snížení).
- Optimalizovány Screen::ToString(), Color::Print() a string_width(), což zrychlilo:
- Základní vykreslování o ~27%.
- Vykreslování textu o ~27%.
- Vykreslování stylů o ~38%.
Zdroj: linux.org.ru




