Il 13 maggio, dopo oltre un anno di sviluppo, è stata rilasciata la versione 7.0.0 della libreria cross-platform FTXUI, progettata per creare applicazioni con interfaccia testuale in C++ e distribuita con licenza MIT.
Caratteristiche della libreria:
- stile funzionale, simile a React JS;
- stile semplice ed elegante (secondo l'autore della libreria);
- gestione degli eventi da tastiera e mouse;
- supporto per UTF8 e Unicode;
- supporto per True Color;
- supporto per la modifica dello stile del cursore;
- supporto per animazioni;
- supporto per il disegno;
- assenza di dipendenze esterne;
- cross-platform (Linux/MacOS, WebAssembly, Windows).
Modifiche
Documentazione
- Corretto il processo di generazione della documentazione con Doxygen.
- Aggiunta una tema personalizzato per Doxygen.
- Divisione della documentazione su più pagine.
Compilazione
- Aggiunto lo script tools$ amalgamate.py per generare il codice sorgente "amalgamato": ftxui.cpp (534 KB), ftxui.hpp (110 KB) e ftxui_all.hpp (643 KB).
- Aggiunto supporto per moduli C++20.
- Aggiunto supporto per Meson.
- Rimossa la dipendenza da pthread.
- Corretto il supporto per Bazel.
- Altri miglioramenti.
Modifiche di compatibilità con versioni precedenti
- Rinominazioni:
- Pixel in `Cell
- Image in Surface
- ScreenInteractive in App
- metodo PixelAt in CellAt
Per garantire la compatibilità, sono previsti alias e intestazioni in modo da non interrompere il funzionamento del codice esistente.
- Utilizzare std::string_view invece di const std::string& dove possibile. Questo offre una migliore compatibilità con i letterali di stringa e permette di evitare copie non necessarie.
Componenti
- Il sistema di intercettazione dei segnali è stato migliorato e modernizzato utilizzando POSIX sigaction per una mascheratura affidabile dei segnali. È stata garantita la protezione da un doppio ripristino del terminale in uscita dall'applicazione tramite il monitoraggio atomico dello stato originale. È stata aggiunta la supporto per segnali POSIX aggiuntivi (SIGBUS, SIGSYS come segnali di errore, e SIGQUIT, SIGHUP come segnali di termine ritardato) e sono stati risolti problemi di sicurezza relativi ai segnali asincroni.
- Risolto il problema di visualizzazione del cursore quando si utilizza un Renderer personalizzato all'interno di contenitori annidati.
- Corretto il posizionamento del cursore nei campi di input e la stabilità dello scorrimento.
- Corretto il supporto per caratteri non ASCII nella modalità di input della password.
- Eliminato il lampeggiamento del cursore durante il rendering nell'App.
- Gestione dell'input utilizzando pipe POSIX.
- Consente alle applicazioni FTXUI di leggere dati da stdin (utilizzando pipe) e continuare a ricevere input dalla tastiera nel terminale.
- Utilizzato di default.
- Può essere disabilitato utilizzando App::HandlePipedInput(false).
- Disponibile solo su Linux e macOS.
- Corrette molteplici bug.
DOM
- Supporto per il carattere di nuova linea (n) all'interno di text() e vtext().
- Ora dbox trasferisce il focus dagli strati superiori a quelli inferiori, corrispondendo alla visualizzazione.
- Aggiunto supporto per decoratori dei bordi delle tabelle. Questo consente, ad esempio, di cambiare il colore dei bordi della tabella.
- Corretta un'errore di overflow intero in ComputeShrinkHard.
- Aggiunta una specializzazione in vbox/hbox/dbox per consentire l'uso del contenitore Element come input.
- Corretto l'aggiunta di elementi figli in gridbox.
- Corretta la visualizzazione del gauge.
- Aggiunte varianti parametrizzate dei decoratori flex con il parametro _factor. Consentono di specificare fattori di espansione o compressione personalizzati:
flex_factor(grow, shrink), flex_grow_factor(grow), flex_shrink_factor(shrink), oltre a varianti per gli assi x e y.
Ottimizzazioni del rendering
- Ottimizzazione del movimento del cursore sulle righe nel metodo Screen::ResetPosition (senza cancellazione dello schermo) in un insieme parametrizzato di comandi CSI per spostare il cursore verso l'alto (x1B[<n>A) invece di emettere un singolo x1B[1A per ogni riga. Questo ha ridotto il numero di caratteri di escape per frame durante il ridisegno (ad esempio, ~197 -> 6 byte per uno schermo con 50 righe, riduzione di circa 33 volte).
- Ottimizzati Screen::ToString(), Color::Print() e string_width(), che ha accelerato:
- Rendering di base di circa il 27%.
- Rendering di testo di circa il 27%.
- Rendering di stili di circa il 38%.
Fonte: linux.org.ru




