Le 13 mai, aprÚs plus d'un an de développement, la version 7.0.0 de la bibliothÚque multiplateforme a été lancée FTXUI, destinée à la création d'applications C++ avec interface textuelle et distribuée sous licence MIT.
Fonctionnalités de la bibliothÚque :
- style fonctionnel, similaire Ă React JS ;
- style simple et élégant (selon l'auteur de la bibliothÚque) ;
- traitement des événements du clavier et de la « souris » ;
- prise en charge de l'UTF8 et de l'Unicode ;
- prise en charge des vraies couleurs ;
- prise en charge du changement de style du curseur ;
- prise en charge des animations ;
- prise en charge du dessin ;
- absence de dépendances externes ;
- multiplateforme (Linux/MacOS, WebAssembly, Windows).
Changements
Documentation
- Génération de documentation avec Doxygen corrigée.
- Ajout d'un thÚme personnalisé pour Doxygen.
- Séparation de la documentation en plusieurs pages.
Compilation
- Ajout d'un script tools$ amalgamate.py pour générer le code source « amalgamé » : ftxui.cpp (534 Ko), ftxui.hpp (110 Ko) et ftxui_all.hpp (643 Ko).
- Ajout de la prise en charge des modules C++20.
- Ajout de la prise en charge de Meson.
- Suppression de la dépendance à pthread.
- Correction de la prise en charge de Bazel.
- Autres améliorations.
Modifications de compatibilité avec les versions antérieures
- Renommages :
- Pixel en `Cell
- Image en Surface
- ScreenInteractive en App
- méthode PixelAt en CellAt
Des alias et des en-tĂȘtes sont prĂ©vus pour assurer la compatibilitĂ© sans perturber le code existant.
- Utilisation de std::string_view au lieu de const std::string& lorsque cela est possible. Cela assure une meilleure compatibilité avec les littéraux de chaßne et permet d'éviter des copies inutiles.
Composants
- Le systÚme d'interception des signaux a été amélioré et modernisé en utilisant POSIX sigaction pour un masquage fiable des signaux. Protection contre la double restauration du terminal lors de la sortie du programme grùce au suivi atomique de l'état d'origine. Prise en charge de signaux POSIX supplémentaires (SIGBUS, SIGSYS, en tant que signaux d'échec, et SIGQUIT, SIGHUP, en tant que signaux de fin différée) et correction de problÚmes de sécurité des signaux asynchrones.
- Correction d'un problÚme d'affichage du curseur lors de l'utilisation d'un Renderer personnalisable dans des conteneurs imbriqués.
- Correction du positionnement du curseur dans les champs de saisie et stabilité du défilement.
- Correction de la prise en charge des caractĂšres non ASCII en mode de saisie de mot de passe.
- Ălimination du scintillement du curseur lors du redessin dans l'App.
- Traitement des entrées en utilisant les pipes POSIX.
- Permet aux applications FTXUI de lire les données à partir de stdin (lors de l'utilisation d'un pipe) tout en acceptant toujours l'entrée au clavier dans le terminal.
- Utilisé par défaut.
- Peut ĂȘtre dĂ©sactivĂ© en utilisant App::HandlePipedInput(false).
- Disponible uniquement sur Linux et macOS.
- De nombreuses erreurs corrigées.
DOM
- Prise en charge des sauts de ligne (n) à l'intérieur de text() et vtext().
- Désormais, dbox transfÚre le focus des couches supérieures aux couches inférieures, correspondant à l'affichage visuel.
- Ajout de la prise en charge des décorateurs de bordure de tableau. Cela permet, par exemple, de modifier la couleur des bordures du tableau.
- Correction d'une erreur de débordement entier dans ComputeShrinkHard.
- Ajout de spécialisation dans vbox/hbox/dbox pour permettre d'utiliser le conteneur Element comme entrée.
- Correction de l'ajout d'éléments enfants dans gridbox.
- Correction de l'affichage du gauge.
- Ajout de variantes paramétrées de décorateurs flex avec le paramÚtre _factor. Ils permettent de spécifier des coefficients d'étirement ou de compression personnalisés :
flex_factor(grow, shrink), flex_grow_factor(grow), flex_shrink_factor(shrink), ainsi que des variantes pour les axes x et y.
Optimisations de rendu
- Optimisation du déplacement du curseur dans les lignes dans la méthode Screen::ResetPosition (sans effacer l'écran) en un ensemble de commandes CSI paramétré pour déplacer le curseur vers le haut (x1B[A) au lieu de générer un x1B[1A pour chaque ligne. Cela a réduit le nombre de caractÚres d'échappement par image lors du redessinage (par exemple, ~197 -> 6 octets pour un écran de 50 lignes, réduction d'environ 33 fois).
- Optimisés Screen::ToString(), Color::Print() et string_width(), ce qui a accéléré :
- Le rendu de base d'environ 27%.
- Le rendu de texte d'environ 27%.
- Le rendu de styles d'environ 38%.
Source : linux.org.ru




