13. mája, po viac ako roku vývoja, bol vydaný 7.0.0 multiplatformový knižnica. FTXUI, určené na vytváranie aplikácií s textovým rozhraním v C++ a distribuované pod licenciou MIT.
Možnosti knižnice:
- funkcionálny štýl, podobne ako React JS;
- jednoduchý a elegantný štýl (podľa autora knižnice);
- spracovanie udalostí z klávesnice a „myši“;
- podpora UTF8 a Unicode;
- podpora True Color;
- podpora zmeny štýlu kurzora;
- podpora animácií;
- podpora kreslenia;
- žiadne externé závislosti;
- multiplatformovosť (Linux/MacOS, WebAssembly, Windows).
Zmeny
Dokumentácia
- Opravená generácia dokumentácie pomocou Doxygen.
- Pridaná vlastná téma pre Doxygen.
- Rozdelenie dokumentácie na niekoľko strán.
Kompilácia
- Pridaný skript tools$ amalgamate.py na generovanie«amalgamovaného» zdrojového kódu: ftxui.cpp (534 kB), ftxui.hpp (110 kB) a ftxui_all.hpp (643 kB).
- Pridaná podpora modulov C++20.
- Pridaná podpora pre Meson.
- Odstránená závislosť od pthread.
- Opravená podpora pre Bazel.
- Ďalšie vylepšenia.
Zmeny kompatibility s predchádzajúcimi verziami.
- Premenovanie:
- Pixel na `Cell`.
- Image na Surface.
- ScreenInteractive na App.
- metóda PixelAt na CellAt.
Na zabezpečenie kompatibility sú poskytnuté aliasy a hlavičkové súbory, aby sa neporušila funkčnosť existujúceho kódu.
- Používanie std::string_view namiesto const std::string& tam, kde je to možné. To zaisťuje lepšiu kompatibilitu s reťazcovými literálmi a umožňuje vyhnúť sa zbytočným kópiám.
Komponenty
- Zlepšený a modernizovaný systém zachytávania signálov pomocou POSIX sigaction na spoľahlivé maskovanie signálov. Zabezpečená ochrana pred dvojitým obnovením terminálu pri odchode z programu pomocou atomárneho sledovania pôvodného stavu. Pridaná podpora pre ďalšie signály POSIX (SIGBUS, SIGSYS ako signály zlyhania a SIGQUIT, SIGHUP ako signály oneskoreného ukončenia) a opravené problémy so zabezpečením asynchrónnych signálov.
- Opravený problém s vykreslením kurzora pri používaní prispôsobeného Renderer vo vnorených kontajneroch.
- Opravené umiestnenie kurzora v poliach vstupu a stabilita posúvania.
- Opravená podpora ne-ASCII znakov v režime zadávania hesla.
- Odstránené blikanie kurzora pri prekreslení v App.
- Spracovanie vstupu pomocou POSIX pipes.
- Umožňuje aplikáciám FTXUI čítať údaje z stdin (pri použití pipe) a zároveň prijímať vstup z klávesnice v termináli.
- Používa sa predvolene.
- Môže byť vypnuté použitím App::HandlePipedInput(false).
- Dostupné iba v Linuxe a macOS.
- Opravené mnohé chyby.
DOM
- Podpora nového riadku (n) v rámci text() a vtext().
- Teraz dbox presúva fokus z horných vrstiev na dolné, čo zodpovedá vizuálnemu zobrazeniu.
- Pridaná podpora dekorátorov okrajov tabuliek. To umožňuje napríklad meniť farbu okrajov tabulky.
- Opravená chyba pretečenia celého čísla v ComputeShrinkHard.
- Pridaná špecializácia v vbox/hbox/dbox na použitie kontajnera Element ako vstupných údajov.
- V gridboxe opravené pridávanie podprvkov.
- Opravené zobrazenie gauge.
- Pridané parametrové varianty dekorátorov flex s parametrom _factor. Tieto umožňujú špecifikovať vlastné faktory rozťahovania alebo zmršťovania:
flex_factor(grow, shrink), flex_grow_factor(grow), flex_shrink_factor(shrink), ako aj varianty pre osi x a y.
Optimalizácie vykresľovania
- Optimalizácia pohybu kurzora po riadkoch v metóde Screen::ResetPosition (bez vymazania obrazovky) na jeden parametrový súbor príkazov CSI na presun kurzora nahor (x1B[<n>A) namiesto výstupu jedného x1B[1A na každý riadok. To znížilo počet únikových znakov na snímok počas prekresľovania (napríklad ~197 -> 6 bajtov pre obrazovku s 50 riadkami, ~33-násobné zníženie).
- Optimalizované Screen::ToString(), Color::Print() a string_width(), čo urýchlilo:
- Základné vykresľovanie o ~27%.
- Vykresľovanie textu o ~27%.
- Vykresľovanie štýlov o ~38%.
Zdroj: linux.org.ru




