На 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 КБ), 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& там, където е възможно. Това осигурява по-добра съвместимост с низовите литерали и предотвратява ненужни копия.
FAudio
- Подобрена и обновена система за прихващане на сигнали с използване на POSIX sigaction за надеждно маскиране на сигналите. Осигурена е защита от двойно възстановяване на терминала при изход от програмата с помощта на атомарно проследяване на изходното състояние. Добавена е поддръжка на допълнителни POSIX сигнали (SIGBUS, SIGSYS, като сигнали за срив, и SIGQUIT, SIGHUP, като сигнали за отложено завършване) и са коригирани проблемите със сигурността на асинхронните сигнали.
- Коригирана е проблема с показването на курсора при използване на конфигурируем Renderer в вложени контейнери.
- Коригирано е позиционирането на курсора в полета за въвеждане и стабилността на скролиране.
- Коригирана е поддръжката на не ASCII символи в режима за въвеждане на парола.
- Премахнато е мигането на курсора при прерисуване в App.
- Обработка на входа с използване на POSIX pipes.
- Позволява на приложенията FTXUI да четат данни от stdin (при използване на pipe) и все пак да приемат вход от клавиатурата в терминала.
- Използва се по подразбиране.
- Може да бъде деактивирано с App::HandlePipedInput(false).
- Налична само в Linux и macOS.
- Коригирани са много грешки.
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%.
Източник: linux.org.ru




