2023-cü il mayın 13-də, bir ildən çox çəkən inkişafdan sonra, 7.0.0 versiyalı müstəqil platformalı kitabxana buraxıldı FTXUI, C++ dilində mətn interfeysi olan tətbiqlərin yaradılması üçün nəzərdə tutulub və MIT lisenziyası altında yayılır.
Kitabxananın imkanları:
- React JS-ə bənzər funksional üslub;
- sadə və zərif üslub (kitabxana müəllifinin fikrinə görə);
- klaviatura və «siçan» hadisələrinin emalı;
- UTF8 və Unicode dəstəyi;
- True Color dəstəyi;
- kursora üslub dəyişdirmə dəstəyi;
- animasiya dəstəyi;
- rəsm çəkme dəstəyi;
- üçüncü tərəf asılılıqların olmaması;
- müstəqil platformalıdır (Linux/MacOS, WebAssembly, Windows).
Dəyişikliklər
Sənəd
- Doxygen ilə sənəd yaratma prosesi düzəldildi.
- Doxygen üçün öz mövzusu əlavə edildi.
- Sənədin bir neçə səhifəyə bölünməsi.
Derleme
- «Amalqlahanmış» mənbə kodunun yaradılması üçün tools$ amalgamate.py skripti əlavə edildi: ftxui.cpp (534 KB), ftxui.hpp (110 KB) və ftxui_all.hpp (643 KB).
- C++20 modullarının dəstəyi əlavə edildi.
- Meson dəstəyi əlavə edildi.
- pthread asılılığı silindi.
- Bazel dəstəyi düzəldildi.
- Digər təkmilləşdirmələr.
Köhnə versiyalara uyğunluq dəyişiklikləri
- Adların dəyişdirilməsi:
- Pixel `Cell
- Image Surface
- ScreenInteractive App
- PixelAt metodu CellAt
Uyğunluğun təmin edilməsi üçün mövcud kodun işləməsini pozmamaq üçün təqlidlər və başlıqlar təmin olunur.
- Mümkün olduqda const std::string& yerinə std::string_view istifadəsi. Bu, mətn ədəd etiketi ilə daha yaxşı uyğunluq təmin edir və lazımsız kopyalanmalardan qaçmağa imkan tanıyır.
Bileşenler
- Sinyalların tutma sistemi POSIX sigaction istifadə edərək təkmilləşdirildi və sinyalların etibarlılığını təmin etmək üçün etibarlı maskeçəkmə garantisi verildi. Proqramdan çıxdıqda tərsinə bərpa edilmənin qarşısını almaq üçün atomik izləma dəstəyi əlavə edildi. Əlavə POSIX sinyallarının (SIGBUS, SIGSYS uğursuzluq sinyalları, SIGQUIT, SIGHUP isə gecikmiş bitmə sinyalları) dəstəyi əlavə edildi və asinxron siqnal təhlükəsizlik məsələləri düzəldildi.
- Tənzimlənən Rendererdan istifadə edərkən, yerli konteynerlərdə kursorun göstərilməsi problemi düzəldildi.
- Daxil olma sahələrində kursorun mövqeləşdirilməsi və yuvarlanma stabil tehqil edildi.
- Parol daxil etmə rejimində ASCII olmayan simvolların dəstəyi düzəldildi.
- App içində yenidən çəkmə zamanı kursorun titrəməsi ortadan qaldırıldı.
- POSIX borularını istifadə edərək daxil etmənin emalı
- FTXUI tətbiqlərinin stdin-dən (borudən istifadədə) məlumatları oxumasına imkan verir və eyni zamanda terminalda klaviaturalardan daxil etməni qəbul etməyə imkan tanıyır.
- Bu, standart olaraq istifadə olunur.
- App::HandlePipedInput(false) istifadəsi ilə söndürülə bilər.
- Yalnız Linux və macOS-da əlçatandır.
- Çox sayda səhvlər düzəldildi.
DOM
- text() və vtext() içində yeni sətir dəstəyi (n).
- İndi dbox fokusunu üst təbəqələrdən aşağı təbəqələrə köçürür, bu da vizual təqdimata uyğun gəlir.
- Cədvəl sərhədlərinin dekoratorlarının dəstəyi əlavə edildi. Bu, məsələn, cədvəl sərhədinin rəngini dəyişməyə imkan tanıyır.
- Tam sayı taşması hatası ComputeShrinkHard'de düzeltildi.
- Element nesnesini girdi olarak kullanma imkanı için vbox/hbox/dbox'da uzmanlık eklendi.
- Gridbox'ta alt öğelerin eklenmesi düzeltildi.
- Gauge görüntülemesi düzeltildi.
- Kullanıcıya özel genişleme veya daraltma katsayıları belirlemeye olanak tanıyan _factor parametreli flex dekoratörlerinin parametrik varyasyonları eklendi:
flex_factor(grow, shrink), flex_grow_factor(grow), flex_shrink_factor(shrink) ve x ve y eksenleri için varyasyonlar.
Çizim optimizasyonları
- Ekranı temizlemeden Cursor'ı satır arasında hareket ettirme yönteminde Screen::ResetPosition'da bir parametreli CSI komut seti haline getirildi; bu, her satır için bir x1B[1A çıkışı yerine yukarı doğru hareket için x1B[A çıktısını kullanır. Bu, yeniden çizim sırasında bir çerçevede kaçış karakterlerinin sayısını azalttı (örneğin, ~197'den 50 satırlık bir ekran için 6 bayta, ~33 kat azalma).
- Screen::ToString(), Color::Print() ve string_width() optimize edildi, bu da hızlandırdı:
- Temel renderleme civarında.
- Metin renderleme civarında.
- Stil renderleme civarında.
Mənbə: linux.org.ru




