FTXUI 7.0.0

13 мая, после более года разработки, состоялся выпуск 7.0.0 кроссплатформенной библиотеки FTXUI, предназначенной для создания на C++ приложений с текстовым интерфейсом и распространяемой по лицензии MIT.
Возможности библиотеки:
- функциональный стиль, наподобие React JS;
- простой и элегантный стиль (по мнению автора библиотеки);
- обработка событий клавиатуры и «мыши»;
- поддержка UTF8 и Unicode;
- поддержка True Color;
- поддержка изменения стиля курсора;
- поддержка анимаций;
- поддержка рисования;
- отсутствие сторонних зависимостей;
- кроссплатформенность (Linux/MacOS, WebAssembly, Windows).
Документация
- Исправлена генерация документации с Doxygen.
- Добавлена собственная тема для Doxygen.
- Разделение документации на несколько страниц.
Компиляция
- Добавлен скрипт
tools$ amalgamate.pyдля генерации «амальгамированного» исходного кода:ftxui.cpp(534 Kб),ftxui.hpp(110 Кб) иftxui_all.hpp(643 Кб). - Добавлена поддержка модулей C++20.
- Добавлена поддержка Meson.
- Удалена зависимость от
pthread. - Исправлена поддержка Bazel.
- Другие улучшения.
Изменения совместимости с прошлыми версиями
- Переименовывания:
Pixelв `CellImageвSurfaceScreenInteractiveвApp- метод
PixelAtвCellAtДля обеспечения совместимости предусмотрены псевдонимы и заголовки, чтобы не нарушить работу существующего кода.
- Использование
std::string_viewвместоconst std::string&там, где это возможно. Это обеспечивает лучшую совместимость со строковыми литералами и позволяет избежать ненужных копирований.
Компоненты
- Улучшена и модернизирована система перехвата сигналов с использованием POSIX
sigactionдля надежного маскирования сигналов. Обеспечена защита от двойного восстановления терминала при выходе из программы с помощью атомарного отслеживания исходного состояния. Добавлена поддержка дополнительных сигналов POSIX (SIGBUS,SIGSYS, как сигналов сбоя, иSIGQUIT,SIGHUP, как сигналов отложенного завершения) и исправлены проблемы безопасности асинхронных сигналов. - Исправлена проблема с отображением курсора при использовании настраиваемого
Rendererво вложенных контейнерах. - Исправлено позиционирование курсора в полях ввода и стабильность прокрутки.
- Исправлена поддержка не ASCII символов в режиме ввода пароля.
- Устранено мерцание курсора при перерисовке в
App. - Обработка ввода с использованием POSIX pipes
- Позволяет приложениям FTXUI считывать данные из
stdin(при использовании pipe) и при этом по-прежнему принимать ввод с клавиатуры в терминале. - Используется по умолчанию.
- Может быть отключено использованием
App::HandlePipedInput(false). - Доступно только в Linux и macOS.
- Позволяет приложениям FTXUI считывать данные из
- Исправлены многие ошибки.
DOM
- Поддержка перевода строки (
\n) внутриtext()иvtext(). - Теперь
dboxпередает фокус от верхних слоев к нижним, что соответствует визуальному отображению. - Добавлена поддержка декораторов границ таблиц. Это позволяет, например, изменять цвет границ таблицы.
- Исправлена ошибка целочисленного переполнения в
ComputeShrinkHard. - Добавлена специализация в
vbox/hbox/dboxдля возможности использования контейнераElementв качестве входных данных. - В
gridboxисправлено добавление дочерних элементов. - Исправлено отображение
gauge. - Добавлены параметризованные варианты декораторов
flexс параметром_factor. Они позволяют указывать пользовательские коэффициенты растяжения или сжатия:flex_factor(grow, shrink),flex_grow_factor(grow),flex_shrink_factor(shrink), а также варианты для осейxиy.
Оптимизации отрисовки
- Оптимизация перемещения курсора по строкам в методе
Screen::ResetPosition(без очистки экрана) в один параметризованный набор команд CSI для перемещения курсора вверх (\x1B[A) вместо вывода одного\x1B[1Aна каждую строку. Это уменьшило количество экранирующих символов на кадр во время перерисовки (например, ~197 → 6 байтов для экрана с 50 строками, ~33-кратное уменьшение). - Оптимизированы
Screen::ToString(),Color::Print()иstring_width(), что ускорило:- Базовый рендеринг на ~27%.
- Рендеринг текста на ~27%.
- Рендеринг стилей на ~38%.
>>> Подробности на GitHub и в первой редакции новости
