Домой Софт macOS и Linux Библиотека FTXUI 7.0.0: новые возможности для C++ разработчиков

Библиотека FTXUI 7.0.0: новые возможности для C++ разработчиков

Крупное обновление популярной C++ библиотеки для создания терминальных интерфейсов с поддержкой React-подобного стиля.

Интерфейс приложения на базе FTXUI
Пример работы с библиотекой FTXUI 7.0.0 Источник: linux.org.ru

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%.
Источник: https://www.linux.org.ru