13 maja, po ponad roku prac, wydano 7.0.0 wieloplatformowej biblioteki. FTXUI, przeznaczonej do tworzenia aplikacji z interfejsem tekstowym w C++ i rozpowszechnianej na licencji MIT.
Możliwości biblioteki:
- styl funkcyjny, podobny do React JS;
- prosty i elegancki styl (zgodnie z opinią autora biblioteki);
- obsługa zdarzeń z klawiatury i „myszy”;
- wsparcie dla UTF8 i Unicode;
- wsparcie dla True Color;
- wsparcie dla zmiany stylu kursora;
- wsparcie dla animacji;
- wsparcie dla rysowania;
- brak zewnętrznych zależności;
- wieloplatformowość (Linux/MacOS, WebAssembly, Windows).
Zmiany
Dokumentacja
- Naprawiono generację dokumentacji z Doxygen.
- Dodano własny motyw dla Doxygen.
- Podzielono dokumentację na kilka stron.
Kompilacja
- Dodano skrypt tools$ amalgamate.py do generowania 'amalgamowanego' kodu źródłowego: ftxui.cpp (534 KB), ftxui.hpp (110 KB) i ftxui_all.hpp (643 KB).
- Dodano wsparcie dla modułów C++20.
- Dodano wsparcie dla Meson.
- Usunięto zależność od pthread.
- Naprawiono wsparcie dla Bazel.
- Inne ulepszenia.
Zmiany w zgodności z wcześniejszymi wersjami.
- Zmiany nazw:
- Pixel na `Cell`
- Image na Surface
- ScreenInteractive na App
- metoda PixelAt na CellAt
Aby zapewnić zgodność, wprowadzono aliasy i nagłówki, aby nie zakłócić działania istniejącego kodu.
- Zastosowano std::string_view zamiast const std::string& tam, gdzie to możliwe. To zapewnia lepszą zgodność z literałami tekstowymi i pozwala uniknąć niepotrzebnych kopiowań.
Składniki
- Ulepszono i zmodernizowano system przechwytywania sygnałów przy użyciu POSIX sigaction dla niezawodnego maskowania sygnałów. Zapewnia ochronę przed podwójnym przywróceniem terminala podczas wychodzenia z programu za pomocą atomowego śledzenia pierwotnego stanu. Dodano wsparcie dla dodatkowych sygnałów POSIX (SIGBUS, SIGSYS jako sygnałów błędu, oraz SIGQUIT, SIGHUP jako sygnałów opóźnionego zakończenia) i naprawiono problemy z bezpieczeństwem sygnałów asynchronicznych.
- Naprawiono problem z wyświetlaniem kursora przy użyciu dostosowanego Renderer w zagnieżdżonych kontenerach.
- Naprawiono pozycjonowanie kursora w polach wprowadzania oraz stabilność przewijania.
- Naprawiono wsparcie dla nie-ASCII symboli w trybie wprowadzania hasła.
- Usunięto migotanie kursora podczas ponownego rysowania w App.
- Obsługa wejścia z użyciem rur POSIX.
- Pozwala aplikacjom FTXUI na odczyt danych z stdin (przy użyciu rury) i równocześnie odbieranie wejścia z klawiatury w terminalu.
- Jest używane domyślnie.
- Może być wyłączone przy użyciu App::HandlePipedInput(false).
- Dostępne tylko w systemach Linux i macOS.
- Naprawiono wiele błędów.
DOM
- Wsparcie dla nowej linii (n) w text() i vtext().
- Teraz dbox przekazuje fokus z górnych warstw na dolne, co odpowiada wizualnemu wyświetleniu.
- Dodano wsparcie dla dekoratorów granic tabel. Pozwala to na przykład zmieniać kolor granic tabeli.
- Naprawiono błąd przepełnienia liczb całkowitych w ComputeShrinkHard.
- Dodano specjalizację w vbox/hbox/dbox, aby umożliwić użycie kontenera Element jako danych wejściowych.
- W gridbox naprawiono dodawanie elementów podrzędnych.
- Naprawiono wyświetlanie gauge.
- Dodano parametryzowane warianty dekoratorów flex z parametrem _factor. Umożliwiają one podanie użytkownikowi współczynników rozciągania lub kompresji:
flex_factor(grow, shrink), flex_grow_factor(grow), flex_shrink_factor(shrink), a także warianty dla osi x i y.
Optymalizacje renderowania
- Optymalizacja poruszania kursorem po wierszach w metodzie Screen::ResetPosition (bez czyszczenia ekranu) do jednego parametryzowanego zestawu komend CSI do poruszania kursorem w górę (x1B[<n>A) zamiast wyprowadzania jednego x1B[1A dla każdej linii. To zmniejszyło liczbę znaków ucieczki na klatkę podczas ponownego rysowania (na przykład ~197 -> 6 bajtów dla ekranu z 50 wierszami, ~33-krotne zmniejszenie).
- Optymalizowano Screen::ToString(), Color::Print() i string_width(), co przyspieszyło:
- Podstawowe renderowanie o ~27%.
- Renderowanie tekstu o ~27%.
- Renderowanie stylów o ~38%.
Źródło: linux.org.ru




