Pe 13 mai, după mai bine de un an de dezvoltare, a fost lansată versiunea 7.0.0 a bibliotecii multiplatforme FTXUI, destinată creării de aplicații în C++ cu interfață text și distribuită sub licența MIT.
Capabilitățile bibliotecii:
- stil funcțional, asemănător cu React JS;
- stil simplu și elegant (conform autorului bibliotecii);
- tratamentul evenimentelor de tastatură și „mouse”;
- suport pentru UTF8 și Unicode;
- suport pentru True Color;
- suport pentru schimbarea stilului cursorului;
- suport pentru animații;
- suport pentru desenare;
- fără dependențe externe;
- multiplatformă (Linux/MacOS, WebAssembly, Windows).
Modificări
Documentație
- Generarea documentației cu Doxygen a fost corectată.
- A fost adăpată o temă personalizată pentru Doxygen.
- Documentația este acum separată în mai multe pagini.
Compilare
- A fost adăugat scriptul tools$ amalgamate.py pentru generarea codului sursă "amalgamat": ftxui.cpp (534 KB), ftxui.hpp (110 KB) și ftxui_all.hpp (643 KB).
- S-a adăugat suport pentru modulele C++20.
- A fost adăugat suport pentru Meson.
- S-a eliminat dependența de pthread.
- Suportul pentru Bazel a fost corectat.
- Alte îmbunătățiri.
Modificări de compatibilitate cu versiunile anterioare
- Redenumiri:
- Pixel în `Cell
- Image în Surface
- ScreenInteractive în App
- metoda PixelAt în CellAt
Pentru a asigura compatibilitatea, au fost prevăzute aliasuri și antete, astfel încât să nu fie afectată funcționarea codului existent.
- Utilizarea std::string_view în loc de const std::string& acolo unde este posibil. Aceasta oferă o mai bună compatibilitate cu literalile de string și permite evitarea copiilor inutile.
Componente
- Sistemul de interceptare a semnalelor a fost îmbunătățit și modernizat folosind POSIX sigaction pentru o mască de semnale fiabilă. S-a asigurat protecția împotriva restaurării duble a terminalului la ieșirea din program prin urmărirea atomică a stării sursă. A fost adăugat suport pentru semnale POSIX suplimentare (SIGBUS, SIGSYS, ca semnale de eroare, și SIGQUIT, SIGHUP, ca semnale de închidere întârziată) și s-au corectat problemele de securitate ale semnalelor asincrone.
- Problema cu afișarea cursorului la utilizarea Renderer-ului personalizat în containerele încrucișate a fost corectată.
- A fost corectat poziționarea cursorului în câmpurile de introducere și stabilitatea derulării.
- Sprijinul pentru caracterele non-ASCII în modul de introducere a parolelor a fost corectat.
- Flickering-ul cursorului în App la redrawing a fost eliminat.
- Prelucrarea input-ului folosind pipe-uri POSIX
- Permite aplicațiilor FTXUI să citească date din stdin (când se utilizează pipe) și, în același timp, să primească input de la tastatură în terminal.
- Este activat în mod implicit.
- Poate fi dezactivat prin folosirea App::HandlePipedInput(false).
- Disponibil doar pe Linux și macOS.
- Au fost corectate multe erori.
DOM
- Suport pentru newline (n) în text() și vtext().
- Acum dbox transferă focusul de la straturile superioare la cele inferioare, conform afișării vizuale.
- A fost adăugat suport pentru décoratori de margini a tabelelor. Aceasta permite, de exemplu, modificarea culorii marginilor tabelului.
- A fost corectată eroarea de depășire a valorii întregi în ComputeShrinkHard.
- S-a adăugat specializarea în vbox/hbox/dbox pentru a permite utilizarea containerului Element ca date de intrare.
- În gridbox a fost corectată adăugarea elementelor fiice.
- A fost corectată afișarea gauge.
- Au fost adăugate variantele parametrizate ale decoratorilor flex cu parametrul _factor. Acestea permit specificarea coeficientelor personalizate de întindere sau comprimare:
flex_factor(grow, shrink), flex_grow_factor(grow), flex_shrink_factor(shrink), precum și variante pentru axele x și y.
Optimizări de redare
- Optimizarea mutării cursorului pe rânduri în metoda Screen::ResetPosition (fără a curăța ecranul) într-un set de comenzi CSI parametrizat pentru mutarea cursorului în sus (x1B[A) în loc de a transmite un x1B[1A pentru fiecare rând. Aceasta a redus numărul de caractere de escapare pe cadru în timpul redării (de exemplu, ~197 -> 6 octeți pentru un ecran cu 50 de rânduri, o reducere de ~33 de ori).
- Au fost optimizate Screen::ToString(), Color::Print() și string_width(), ceea ce a accelerat:
- Redarea de bază cu ~27%.
- Redarea textului cu ~27%.
- Redarea stilurilor cu ~38%.
Sursa: linux.org.ru




