ostateczny eksperymentalny wydanie frameworka , w którym zrealizowane zostały wszystkie możliwości zaplanowane dla GTK 4. Gałąź GTK 4 rozwija się w ramach nowego procesu rozwoju, który stara się zapewnić programistom aplikacji stabilne i wspierane przez kilka lat API, które można wykorzystać bez obaw, że co sześć miesięcy będzie trzeba przerabiać aplikacje z powodu zmian API w kolejnej gałęzi GTK. Wydanie GTK 4 planowane jest do końca roku.
Do najbardziej do można wymienić:
- Metoda układania elementów oparta na ograniczeniach (), w której położenie i rozmiar elementów podrzędnych są określane na podstawie odległości od granic i rozmiaru innych elementów.
- Moduł renderowania oparty na API graficznym Vulkan, w którym zrealizowane zostały shadery dla wielu zasobożernych elementów CSS stosowanych w widgetach GTK.
- Integracja (GTK Scene Kit) z możliwościami renderowania scen graficznych przez OpenGL i Vulkan.
- Przegląd organizacji renderowania — zamiast wyjścia do bufora, teraz stosuje się model oparty na węzłach renderowania (render nodes), w którym wyjście jest kompozytowane w formie drzewa operacji wysokiego poziomu, efektywnie przetwarzanych przez GPU za pomocą OpenGL i Vulkan.
- do elastycznego przetwarzania zmian w fokusie wejścia.
- Zmodernizowany model dostarczania zdarzeń, który pozwala obejść się bez subwindow podczas routingu zdarzeń wejściowych. Konieczność wdrożenia nowego modelu związana jest z bardziej aktywnym wykorzystaniem efektów animacyjnych, których renderowanie powinno odbywać się bez zmiany układu widocznych elementów, a tym samym bez subwindow.
- Przerobione API GDK z myślą o użyciu protokołu Wayland i związanych z nim koncepcji. Opcje związane z X11 i Wayland przeniesione zostały do .
- Przeprowadzono dużą czyszczenie API, w tym usunięto klasy GtkMenu, GtkMenuBar i GtkToolbar, w ich miejsce zaproponowano GMenu i warianty oparte na menu kontekstowych (popover).
- W GtkTextView i innych widgetach wejściowych wbudowany został stos do przywracania zmian (undo).
- Dodana została nowa klasa GtkNative dla widgetów, które mają własną powierzchnię wyświetlania i mogą działać samodzielnie na pierwszym poziomie, bez powiązania z rodzicami widgetów.
- Dodane nowe widgety, w tym GtkPicture, GtkText, GtkPasswordEntry, GtkListView, GtkGridView, GtkColumnView oraz widget do wyświetlania Emoji.
- Wprowadzono nowy obiekt GtkLayoutManager do tworzenia widgetów, który implementuje system zarządzania układem elementów w zależności od rozmiaru widocznego obszaru. GtkLayoutManager zastąpił właściwości podrzędne w kontenerach GTK, takich jak GtkBox i GtkGrid.
- Uproszczono obsługę zdarzeń, które teraz są używane tylko do wprowadzania. Pozostałe zdarzenia zostały zastąpione osobnymi sygnałami, na przykład zamiast zdarzeń wyjścia wprowadzono sygnał „GdkSurface::render”, a zamiast zdarzeń zmiany rozmiaru - „GdkSurface::size-changed”.
- Dodano nowy poziom abstrakcji GdkPaintable, reprezentujący obiekty, które można rysować gdziekolwiek w dowolnym rozmiarze, bez konieczności sortowania warstw układu.
- Przepisano backend Broadway, umożliwiający rysowanie wyjścia biblioteki GTK w oknie przeglądarki internetowej.
- Przeprojektowano API związane z operacjami przeciągania i upuszczania, w tym wprowadzono oddzielne obiekty GdkDrag i GdkDrop.
Udoskonalenia w porównaniu do poprzedniej wersji testowej:
- Usunięto starą implementację API dostępności dla osób z niepełnosprawnościami, którą zastąpiono nową wersją opartą na specyfikacji i widżetu GtkAccessible.
- Dodano wsparcie dla edytowalnych etykiet (GtkEditableLabel).
- Wprowadzono nowe modele list do wyświetlania zakładek (GtkBookmarkList), ciągów (GtkStringList) i bloków wyboru (GtkBitset).
- W widżecie GtkTreeView wprowadzono możliwość edytowania komórek.
- W GtkGridView i GtkListView poprawiono implementację przewijania, dodano wsparcie dla automatycznego przewijania i samoczynnego rozwoju.
- W GtkWidget znacznie przyspieszono przetwarzanie różnych działań.
- W GtkFilterListModel i GtkSortListModel dodano wsparcie dla inkrementalnego przewijania i filtrowania.
- W Inspektorze dodano wsparcie inspekcji modeli list oraz możliwość bezpośredniej nawigacji między obiektami.
- W GDK zapewniono zachowanie historii przewijania, przeprowadzono czyszczenie API GdkDevice, zaprzestano rozdzielania urządzeń na master i slave.
- Dodano nowy backend GDK dla macOS.
- Dla Windows wprowadzono nowy backend GDK do rysowania oparty na , w celu translacji wywołań OpenGL ES na OpenGL, Direct3D 9/11, Desktop GL i Vulkan.
Źródło: opennet.ru
