El 13 de mayo, después de más de un año de desarrollo, se lanzó la biblioteca multiplataforma 7.0.0 FTXUI, diseñada para crear aplicaciones con interfaz de texto en C++ y distribuida bajo la licencia MIT.
Funciones de la biblioteca:
- estilo funcional, similar a React JS;
- estilo simple y elegante (según el autor de la biblioteca);
- manejo de eventos del teclado y del ratón;
- soporte para UTF8 y Unicode;
- soporte para True Color;
- soporte para cambiar el estilo del cursor;
- soporte para animaciones;
- soporte para dibujo;
- sin dependencias externas;
- multiplataforma (Linux/MacOS, WebAssembly, Windows).
Cambios
La documentación
- Se corrigió la generación de documentación con Doxygen.
- Se agregó un tema propio para Doxygen.
- División de la documentación en varias páginas.
Compilación
- Se añadió el script tools$ amalgamate.py para generar el código fuente 'amalgamado': ftxui.cpp (534 KB), ftxui.hpp (110 KB) y ftxui_all.hpp (643 KB).
- Se agregó soporte para módulos C++20.
- Se añadió soporte para Meson.
- Se eliminó la dependencia de pthread.
- Se corrigió el soporte para Bazel.
- Otras mejoras.
Cambios de compatibilidad con versiones anteriores
- Renombramientos:
- Pixel a `Cell
- Image a Surface
- ScreenInteractive a App
- método PixelAt a CellAt
Para garantizar la compatibilidad, se han proporcionado alias y encabezados para no interrumpir el funcionamiento del código existente.
- Uso de std::string_view en lugar de const std::string& donde sea posible. Esto proporciona mejor compatibilidad con literales de cadena y evita copias innecesarias.
Componentes
- Se mejoró y modernizó el sistema de captura de señales utilizando POSIX sigaction para una máscara de señales confiable. Se proporcionó protección contra la restauración doble del terminal al salir del programa mediante un seguimiento atómico del estado de origen. Se agregó soporte para señales POSIX adicionales (SIGBUS, SIGSYS como señales de fallo y SIGQUIT, SIGHUP como señales de terminación diferida) y se corrigieron problemas de seguridad de señales asíncronas.
- Se corrigió el problema de visualización del cursor al usar un Renderer personalizado en contenedores anidados.
- Se corrigió el posicionamiento del cursor en los campos de entrada y la estabilidad del desplazamiento.
- Se corrigió el soporte para caracteres no ASCII en modo de entrada de contraseña.
- Se eliminó el parpadeo del cursor durante la redibujación en App.
- Manejo de entrada utilizando pipes POSIX
- Permite que las aplicaciones FTXUI lean datos de stdin (al usar pipe) y al mismo tiempo acepten entrada del teclado en la terminal.
- Se utiliza por defecto.
- Se puede desactivar usando App::HandlePipedInput(false).
- Disponible solo en Linux y macOS.
- Se han corregido muchos errores.
DOM
- Soporte para salto de línea (n) dentro de text() y vtext().
- Ahora dbox transfiere el enfoque de las capas superiores a las inferiores, en correspondencia con la representación visual.
- Agregado soporte para decoradores de bordes de tablas. Esto permite, por ejemplo, cambiar el color de los bordes de la tabla.
- Se corrigió un error de desbordamiento de enteros en ComputeShrinkHard.
- Se agregó especialización en vbox/hbox/dbox para permitir el uso del contenedor Element como entrada.
- Se corrigió la adición de elementos secundarios en gridbox.
- Se corrigió la representación de gauge.
- Se añadieron variantes parametrizadas de decoradores flex con el parámetro _factor. Permiten especificar coeficientes personalizados de estiramiento o compresión:
flex_factor(grow, shrink), flex_grow_factor(grow), flex_shrink_factor(shrink), así como variantes para los ejes x y y.
Optimizaciones de renderización
- Optimización del movimiento del cursor a través de líneas en el método Screen::ResetPosition (sin limpieza de pantalla) a un conjunto parametrizado de comandos CSI para mover el cursor hacia arriba (x1B[A) en lugar de emitir un x1B[1A para cada línea. Esto redujo la cantidad de caracteres de escape por cuadro durante el redibujado (por ejemplo, ~197 -> 6 bytes para una pantalla con 50 líneas, una reducción de aproximadamente 33 veces).
- Optimizados Screen::ToString(), Color::Print() y string_width(), lo que aceleró:
- Renderización básica en ~27%.
- Renderización de texto en ~27%.
- Renderización de estilos en ~38%.
Fuente: linux.org.ru




