
13 мая состоялся релиз библиотеки FTXUI версии 7.0.0. Проект, разработка которого заняла более года, представляет собой кроссплатформенный инструмент для создания приложений с текстовым интерфейсом (TUI) на языке C++. Библиотека распространяется по лицензии MIT.
Ключевые возможности FTXUI
Библиотека предлагает разработчикам широкий набор инструментов для построения интерфейсов в терминале:
- функциональный стиль, напоминающий React JS;
- лаконичный и продуманный API;
- обработку событий клавиатуры и мыши;
- полную поддержку UTF8, Unicode и True Color;
- настройку курсора, анимации и инструменты для рисования;
- отсутствие сторонних зависимостей и кроссплатформенность (Linux, macOS, Windows, WebAssembly).
Основные изменения в версии 7.0.0
Документация
- Улучшена генерация документации через Doxygen;
- добавлена фирменная тема оформления и разделение справочных материалов на тематические страницы.
Компиляция и сборка
- Добавлен скрипт
amalgamate.pyдля объединения исходного кода в отдельные файлы:ftxui.cpp(534 Кб),ftxui.hpp(110 Кб) иftxui_all.hpp(643 Кб); - реализована поддержка модулей C++20 и системы сборки Meson;
- удалена зависимость от библиотеки pthread, исправлена работа с Bazel.
Совместимость
Для улучшения архитектуры были проведены переименования ключевых элементов. Чтобы не нарушить работу старых проектов, разработчики сохранили обратную совместимость через псевдонимы и заголовочные файлы:
Pixelпереименован вCell;Image— вSurface;ScreenInteractive— вApp;- метод
PixelAtтеперь называетсяCellAt.
Также повсеместно внедрен std::string_view вместо const std::string&, что позволило сократить количество ненужных копирований данных.
Улучшения компонентов
- Работа с сигналами: Система перехвата сигналов теперь использует POSIX
sigaction, что повышает надежность маскирования и предотвращает ошибки при выходе из программы. Добавлена поддержка сигналов SIGBUS, SIGSYS, SIGQUIT и SIGHUP. - Обработка ввода: Реализована поддержка POSIX pipes, позволяющая приложению считывать данные из
stdinпараллельно с вводом с клавиатуры. - Стабильность: Исправлены ошибки позиционирования курсора в полях ввода, проблемы с поддержкой не-ASCII символов в режиме пароля и мерцание при перерисовке.
DOM и отрисовка
В этой версии значительно переработана работа с элементами DOM:
- Добавлена поддержка переноса строк (
\n) вtext()иvtext(). - Компонент
dboxтеперь корректно передает фокус между слоями. - Появились декораторы для границ таблиц, позволяющие настраивать их цвет.
- Введены параметризованные декораторы
flex(например,flex_factor), дающие более гибкий контроль над растяжением и сжатием элементов.
Оптимизация производительности
Разработчики уделили особое внимание скорости отрисовки:
- Метод
Screen::ResetPositionбыл переписан: вместо отправки отдельных управляющих последовательностей для каждой строки теперь используется одна команда CSI. Это позволило сократить объем передаваемых данных в 33 раза для экрана из 50 строк. - Оптимизация
Screen::ToString(),Color::Print()иstring_width()привела к ускорению базового рендеринга и обработки текста на 27%, а рендеринга стилей — на 38%.



