Po siedmiu miesiącach rozwoju opublikowano wydanie wieloplatformowego zestawu narzędzi do tworzenia graficznego interfejsu użytkownika — GTK 4.14.0. GTK 4 rozwija się w ramach nowego procesu, który stara się zapewnić programistom aplikacji stabilne i wspierane przez kilka lat API, które można używać bez obaw, że co sześć miesięcy będzie trzeba przerabiać aplikacje z powodu zmian w API w nowej gałęzi GTK.
W przyszłości planowane jest utworzenie eksperymentalnej gałęzi 4.90, w której rozwijać się będzie funkcjonalność dla przyszłego wydania GTK5. Do gałęzi GTK5 zostaną wprowadzone zmiany, które naruszają zgodność z API, na przykład związane z przeniesieniem do stanu przestarzałego niektórych widżetów, takich jak stary dialog wyboru plików. Rozważana jest również możliwość zaprzestania wsparcia dla protokołu X11 w gałęzi GTK5, pozostawiając jedynie możliwość pracy z użyciem protokołu Wayland.
Wśród najbardziej zauważalnych usprawnień w GTK 4.14:
- W skład zestawu wchodzą nowe zunifikowane silniki renderujące „ngl” i „vulkan”, wykorzystujące graficzne API OpenGL (GL 3.3+ oraz GLES 3.0+) oraz Vulkan. Oba silniki bazują na API Vulkan, ale w silniku „ngl” dla OpenGL stworzono osobny poziom abstrakcji, działający na Vulkanie z uwzględnieniem różnic między OpenGL a Vulkanem. Tego rodzaju podejście pozwoliło na wykorzystanie wspólnej infrastruktury do przetwarzania grafu sceny, transformacji, buforowania tekstur i glifów w obu silnikach. Zunifikowanie znacznie uprościło również utrzymanie bazy kodu obu silników i ich aktualizację w związku z synchronizacją.
W przeciwieństwie do starego silnika „gl”, w którym dla każdego typu węzłów renderujących (rendernode) używano oddzielnego prostego shadera i przeprowadzano okresową reorganizację danych podczas renderowania w tle (offscreen), w nowych silnikach zamiast renderowania w tle stosuje się złożony shader (ubershader), interpretujący dane z bufora. Do wyróżniających cech nowych silników należy wygładzanie krawędzi (umożliwiające zachowanie drobnych detali i uzyskanie bardziej równych konturów), tworzenie dowolnych gradientów (można używać dowolnej liczby kolorów i wygładzania) oraz ułamkowe skalowanie.
- Domyślnie włączony jest nowy silnik renderowania „ngl”, a także domyślnie włączona jest obsługa interfejsu API grafiki Vulkan. Przy budowie w konfiguracji domyślnej teraz wymagana jest obsługa Vulkan 1.3.
- Do biblioteki GSK (GTK Scene Kit), oferującej możliwości renderowania scen graficznych przez OpenGL i Vulkan, wprowadzono znaczące ulepszenia dotyczące renderowania czcionek, hintingu oraz wykorzystania niecałkowitych wartości skali podczas wyświetlania tekstu. Podczas hintingu (wygładzanie konturu glifu przy rasteryzacji w celu zwiększenia ostrości na ekranach o niskiej rozdzielczości) wprowadzono pozycjonowanie subpikselowe glifów. Poprawiono jakość renderowania czcionek przy niecałkowitych wartościach skali (na przykład 125%). Wprowadzono wsparcie dla wygaszania elementów z pamięci podręcznej dla glifów i tekstur. Zwiększono efektywność pamięci podręcznej glifów.
- W ramach pracy nad odejściem od używania biblioteki Cairo na rzecz rysowania przy pomocy GPU, dodano obsługę „ścieżek” (Path) do rysowania kształtów i obszarów, wykorzystując sekwencję linii lub krzywych Bezier'a cubic i quadratic. Do rysowania przy pomocy ścieżek zaproponowano obiekt GskPath, definiujący parametry linii lub krzywych, a także obiekty GskPathBuilder do tworzenia krzywych, GskPathPoint do określenia punktu na kształcie oraz GskPathMeasure do wykonywania pomiarów, takich jak długość konturu.

- W bibliotece GDK, która zapewnia warstwę między GTK a systemem graficznym, rozszerzono wsparcie dla mechanizmu DMA-BUF, umożliwiającego użycie buforów na poziomie jądra, adresowanych za pomocą deskryptora, co pozwala na przesyłanie danych pikseli między podsystemami jądra przez deskryptor zamiast ich kopiowania. W kontekście GTK DMA-BUF może być używane w celu minimalizacji kopiowania danych pikseli podczas kompozycji i pracy z wideo (np. wideo może być zapisywane przez sprzętowy dekoder w dmabuf, po czym dołączane jest do powierzchni Wayland i przesyłane do menedżera kompozycji w celu nałożenia elementów interfejsu i wyświetlenia na ekranie bez zbędnych operacji kopiowania danych).
Aby bezpośrednio przesyłać treści, takie jak wideo, do menedżera kompozycji (z pominięciem renderowania GSK), dodano widżet GtkGraphicsOffload, a do tworzenia treści do bezpośredniego przesyłania dodano klasę GdkDmabufTextureBuilder, która tworzy obiekty GdkTexture z dmabuf. Źródłami dla dmabuf mogą być pipewire, video4linux lub gstreamer. Wspierane są formaty dmabuf NV16, NV61, NV24, NV42 i YUV.
- Dodano klasę GtkPrintDialog, która służy do tworzenia dialogów drukowania i oferuje asynchroniczne API do użycia zamiast GtkPrintOperation.
- W widżecie GtkEmojiChooser zaktualizowano dane Emoji i dodano możliwość wyszukiwania w różnych językach z uwzględnieniem różnych lokalizacji.
- W widżecie GtkEntry poprawiono śledzenie zmian wprowadzanych przez użytkownika (dla realizacji operacji cofania).
- W widżecie GtkFileChooser przyspieszono otwieranie okna wyboru plików.
- Klasa GtkShortcutsWindow, wyświetlająca wskazówki dotyczące skrótów klawiszowych i gestów ekranowych, została dostosowana do małych ekranów.
- W trybie inspekcji (GTK inspector) zapewniono wyświetlanie informacji o OpenGL, podpowierzchniach i FPS.
- Do narzędzia gtk4-rendernode-tool dodano polecenie „compare”.
- Proponowane jest nowe narzędzie gtk4-path-tool do pracy z ścieżkami.
- W narzędziu gtk4-node-editor dodano wsparcie dla automatycznego zapisu.
- Usunięto awaryjne zakończenie, które występowało przy użyciu Wayland w środowiskach nieopartych na GNOME Shell.
- Dodano nowe funkcje dla osób z niepełnosprawnościami związane z wyświetlaniem skomplikowanego sformatowanego tekstu, obsługą WebKitGTK i wyświetlaniem powiadomień. Ulepszono wsparcie dla specyfikacji ARIA. Dodano interfejs GtkAccessibleText do wykorzystania możliwości dostępności w zewnętrznych widżetach tekstowych. W interfejsie GtkText dodano wsparcie dla protokołu AT-SPI do interakcji z czytnikami ekranu.
- Dodano możliwość renderowania z wykorzystaniem GPU, używając API WGL na platformie Windows.
- Zmniejszono zużycie pamięci podczas ładowania motywów opartych na CSS.
Źródło: opennet.ru

