No dia 13 de maio, após mais de um ano de desenvolvimento, foi lançado o versão 7.0.0 da biblioteca multiplataforma FTXUI, projetada para criar aplicações em C++ com interface de texto e distribuída sob a licença MIT.
Recursos da biblioteca:
- estilo funcional, semelhante ao React JS;
- estilo simples e elegante (na opinião do autor da biblioteca);
- manipulação de eventos de teclado e mouse;
- suporte a UTF8 e Unicode;
- suporte a True Color;
- suporte à alteração do estilo do cursor;
- suporte a animações;
- suporte a desenho;
- sem dependências externas;
- multiplataforma (Linux/MacOS, WebAssembly, Windows).
Mudanças
Documentação
- Corrigida a geração de documentação com Doxygen.
- Adicionada um tema personalizado para Doxygen.
- Divisão da documentação em várias páginas.
Compilação
- Adicionado script tools$ amalgamate.py para gerar o código-fonte "amalgamado": ftxui.cpp (534 KB), ftxui.hpp (110 KB) e ftxui_all.hpp (643 KB).
- Adicionado suporte a módulos C++20.
- Adicionado suporte a Meson.
- Removida a dependência do pthread.
- Corrigido o suporte ao Bazel.
- Outras melhorias.
Mudanças de compatibilidade com versões anteriores
- Renomeações:
- Pixel para `Cell
- Image para Surface
- ScreenInteractive para App
- método PixelAt para CellAt
Para garantir a compatibilidade, foram fornecidos pseudônimos e cabeçalhos, a fim de não interromper o funcionamento do código existente.
- Uso de std::string_view em vez de const std::string& onde for possível. Isso proporciona melhor compatibilidade com literais de string e evita cópias desnecessárias.
Componentes
- O sistema de interceptação de sinais foi melhorado e modernizado utilizando POSIX sigaction para mascaramento confiável de sinais. Proteção contra recuperação dupla do terminal ao sair do programa foi garantida através do acompanhamento atômico do estado original. Suporte a sinais POSIX adicionais (SIGBUS, SIGSYS, como falhas, e SIGQUIT, SIGHUP, como sinais de encerramento diferido) foi adicionado, além de correções de segurança para sinais assíncronos.
- Corrigido o problema de exibição do cursor ao usar um Renderer personalizado em contêineres aninhados.
- Corrigido o posicionamento do cursor em campos de entrada e a estabilidade de rolagem.
- Corrigido o suporte a caracteres não ASCII no modo de entrada de senha.
- Eliminado o piscar do cursor durante a rerenderização em App.
- Manipulação de entrada utilizando pipes POSIX
- Permite que os aplicativos FTXUI leiam dados do stdin (usando pipe) enquanto ainda aceitam entrada do teclado no terminal.
- Usado por padrão.
- Pode ser desativado usando App::HandlePipedInput(false).
- Disponível apenas em Linux e macOS.
- Muitos bugs corrigidos.
DOM
- Suporte para a quebra de linha (n) dentro de text() e vtext().
- Agora o dbox transfere o foco das camadas superiores para as inferiores, conforme a exibição visual.
- Adicionado suporte para decoradores de borda de tabela. Isso permite, por exemplo, alterar a cor das bordas da tabela.
- Corrigido um erro de estouro inteiro em ComputeShrinkHard.
- Especialização adicionada em vbox/hbox/dbox para permitir o uso do contêiner Element como entrada.
- Corrigido a adição de elementos filhos no gridbox.
- Corrigido o display de gauge.
- Adicionados variantes parametrizadas de decoradores flex com o parâmetro _factor. Eles permitem especificar coeficientes de estiramento ou compressão personalizados:
flex_factor(grow, shrink), flex_grow_factor(grow), flex_shrink_factor(shrink), além de variantes para os eixos x e y.
Otimizações de renderização
- Otimização do movimento do cursor entre linhas no método Screen::ResetPosition (sem limpar a tela) em um conjunto parametrizado de comandos CSI para mover o cursor para cima (x1B[<n>A) em vez de emitir um x1B[1A para cada linha. Isso reduziu a quantidade de caracteres de escape por quadro durante a re-renderização (por exemplo, ~197 -> 6 bytes para uma tela com 50 linhas, redução de ~33 vezes).
- Otimizações em Screen::ToString(), Color::Print() e string_width(), o que acelerou:
- A renderização básica em ~27%.
- A renderização de texto em ~27%.
- A renderização de estilos em ~38%.
Fonte: linux.org.ru




