13. svibnja, nakon više od godine razvoja, objavljena je 7.0.0 verzija cross-platform biblioteke FTXUI, namijenjene za izradu C++ aplikacija s tekstualnim sučeljem i distribuirane pod MIT licencom.
Mogućnosti biblioteke:
- funkcionalni stil, sličan React JS;
- jednostavan i elegantan stil (prema autoru biblioteke);
- obrada događaja na tipkovnici i 'mišu';
- podrška za UTF8 i Unicode;
- podrška za True Color;
- podrška za promjenu stila pokazivača;
- podrška za animacije;
- podrška za crtanje;
- nema vanjskih ovisnosti;
- cross-platform (Linux/MacOS, WebAssembly, Windows).
Promjene
Dokumentacija
- Ispravljena generacija dokumentacije s Doxygen.
- Dodana vlastita tema za Doxygen.
- Podjela dokumentacije na više stranica.
Komplikacija
- Dodani skripta tools$ amalgamate.py za generiranje 'amalgamiranog' izvornog koda: ftxui.cpp (534 KB), ftxui.hpp (110 KB) i ftxui_all.hpp (643 KB).
- Dodana podrška za module C++20.
- Dodana podrška za Meson.
- Uklonjena ovisnost od pthread.
- Ispravljena podrška za Bazel.
- Ostala poboljšanja.
Promjene kompatibilnosti s prethodnim verzijama
- Preimenovanja:
- Pixel u `Cell
- Image u Surface
- ScreenInteractive u App
- metoda PixelAt u CellAt
Za osiguranje kompatibilnosti predviđeni su pseudonimi i zaglavlja kako ne bi došlo do prekida rada postojećeg koda.
- Korištenje std::string_view umjesto const std::string& gdje god je to moguće. Ovo osigurava bolju kompatibilnost s.literalima i omogućuje izbjegavanje nepotrebnog kopiranja.
Komponente
- Unaprijeđena i modernizirana sustav hvatanja signala koristeći POSIX sigaction za pouzdano maskiranje signala. Osigurana zaštita od dvostrukog vraćanja terminala prilikom izlaska iz programa s atomskim praćenjem izvorne države. Dodana podrška za dodatne POSIX signale (SIGBUS, SIGSYS, kao signale greške, i SIGQUIT, SIGHUP, kao signale odgađanja završetka) i ispravljeni problemi s sigurnošću asinkronih signala.
- Ispravljena greška u prikazu pokazivača pri korištenju prilagođenog Renderer-a unutar ugniježdenih kontejnera.
- Ispravljeno pozicioniranje pokazivača u poljima za unos i stabilnost pomicanja.
- Ispravljena podrška za ne-ASCII znakove u načinu unosa lozinke.
- Uklonjeno treperenje pokazivača prilikom ponovnog crtanja u App.
- Obrada unosa korištenjem POSIX cijevi
- Omogućuje FTXUI aplikacijama da čitaju podatke iz stdin (kada se koristi pipe) i u isto vrijeme primaju unos s tipkovnice u terminalu.
- Koristi se kao zadano.
- Može se isključiti korištenjem App::HandlePipedInput(false).
- Dostupno samo na Linuxu i macOS-u.
- Ispravljeno je mnogo grešaka.
DOM
- Podrška za prijelome redaka (n) unutar text() i vtext().
- Sada dbox prenosi fokus s gornjih na donje slojeve, što odgovara vizualnom prikazu.
- Dodana podrška za dekoratore rubova tablica. Ovo omogućuje, na primjer, promjenu boje rubova tablice.
- Ispravljena greška s prekomjernim cijelim brojevima u ComputeShrinkHard.
- Dodana specijalizacija u vbox/hbox/dbox kako bi se mogućilo korištenje Element kontejnera kao ulaznih podataka.
- U gridboxu je ispravljeno dodavanje dječjih elemenata.
- Ispravljeno je prikazivanje gauge.
- Dodane su parametrizirane varijante dekoratora flex s parametrom _factor. Omogućuju definiranje korisničkih koeficijenata za istezanje ili skupljanje:
flex_factor(grow, shrink), flex_grow_factor(grow), flex_shrink_factor(shrink), kao i varijante za os x i y.
Optimizacije renderiranja
- Optimizacija pomicanja kursora po redovima u metodi Screen::ResetPosition (bez brisanja ekrana) u jedan parametrizirani skup naredbi CSI za pomicanje kursora prema gore (x1B[<n>A) umjesto ispisa jednog x1B[1A za svaki redak. Ovo je smanjilo broj escape znakova po okviru tijekom ponovnog iscrtavanja (primjerice, ~197 -> 6 bajtova za ekran s 50 redaka, smanjenje za ~33 puta).
- Optimizirane su Screen::ToString(), Color::Print() i string_width(), što je ubrzalo:
- Osnovno renderiranje za ~27%.
- Renderiranje teksta za ~27%.
- Renderiranje stilova za ~38%.
Izvor: linux.org.ru




