Po 10 miesiącach od testowej wersji , nowa eksperymentalna wersja przyszłego stabilnego wydania 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 używać bez obaw, że co sześć miesięcy trzeba będzie przerabiać aplikację z powodu zmian w API w kolejnej gałęzi GTK. Do całkowitej stabilizacji GTK 4, aplikacje przeznaczone dla użytkowników należy nadal kompilować z użyciem gałęzi .
Podstawowe w GTK 3.96:
- W API (GTK Scene Kit), które zapewnia renderowanie scen grafiki za pomocą OpenGL i Vulkan, wprowadzono poprawki, których identyfikacja stała się łatwiejsza dzięki nowemu narzędziu do debugowania gtk4-node-editor, które pozwala na załadowanie i wyświetlenie węzła renderowania w zserializowanym formacie (może być zapisany w trybie inspekcji GTK inspector), a także porównanie wyników renderowania przy użyciu różnych backendów;
- Możliwości 3D transformacji wzrosły do poziomu, który umożliwia tworzenie takich efektów animacyjnych jak obracający się sześcian;
- Całkowicie Backend GDK Broadway, przeznaczony do renderowania wyjścia biblioteki GTK w oknie przeglądarki internetowej. Stara implementacja Broadway nie pasowała do proponowanych w GTK 4 metod 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).
Nowa wersja Broadway przekształca węzły renderowania w węzły DOM z stylami CSS do wyjścia interfejsu w przeglądarce. Każdy nowy stan ekranu jest traktowany jako zmiana drzewa DOM w porównaniu do poprzedniego stanu, co umożliwia zmniejszenie rozmiaru przesyłanych do zdalnego klienta danych. Transformacje 3D i efekty graficzne są realizowane za pomocą właściwości CSS transform; - W GDK kontynuowane jest wdrażanie API opracowanych z myślą o wykorzystaniu protokołu Wayland oraz czyszczenie API związanych z X11, lub ich przenoszenie do oddzielnego backendu X11. Odnotowano postęp prac nad odejściem od stosowania podpowierzchni i globalnych współrzędnych. W GDK usunięto wsparcie dla GDK_SURFACE_SUBSURFACE;
- Kontynuacja refaktoryzacji kodu związana z operacjami Drag-and-Drop, w tym wprowadzenie oddzielnych obiektów GdkDrag i GdkDrop;
- Uproszczono obsługę zdarzeń, które teraz są używane tylko do wejścia. Inne zdarzenia zostały zastąpione oddzielnymi sygnałami, na przykład zamiast zdarzeń wyjścia zaproponowano sygnał „GdkSurface::render”, zamiast zdarzeń rozmiaru — „GdkSurface::size-changed”, zamiast zdarzeń mapowania — „GdkSurface::mapped”, zamiast gdk_event_handler_set() — „GdkSurface::event”;
- W backendzie GDK dla Wayland dodano wsparcie dla interfejsu portalowego do dostępu do ustawień GtkSettings. Dla pracy z metodami wejścia wprowadzono wsparcie dla rozszerzenia protokołu text-input-unstable-v3;
- Do tworzenia widgetów wprowadzono nowy obiekt GtkLayoutManager, z implementacją systemu zarządzania rozmieszczeniem elementów w zależności od rozmiaru widocznego obszaru. GtkLayoutManager zastąpił właściwości dziecięce w kontenerach GTK, takich jak GtkBox i GtkGrid. Proponuje się kilka gotowych menedżerów układu: GtkBinLayout dla prostych kontenerów z jednym elementem dziecięcym, GtkBoxLayout dla liniowo wyrównanych elementów dziecięcych, GtkGridLayout dla wyznaczania dziecięcych elementów w siatce, GtkFixedLayout dla dowolnego pozycjonowania dziecięcych elementów, GtkCustomLayout do translacji tradycyjnych elementów na podstawie obsługi size_allocate;
- W widgetach GtkAssistant, GtkStack i GtkNotebook dodano publicznie dostępne obiekty do wyjścia stronicznego dziecięcych elementów, na które przeniesiono niezwiązane z układem (Layout) dziecięce właściwości danych widgetów. Ponieważ wszystkie istniejące dziecięce właściwości zostały przekształcone w zwykłe właściwości, właściwości układu zostały przeniesione do obiektów stronicznych, z GtkContainer całkowicie usunięto wsparcie dla dziecięcych właściwości;
- Podstawowa funkcjonalność GtkEntry została przeniesiona do nowego widgetu GtkText, który również zawiera rozszerzony interfejs edytowania GtkEditable. Wszystkie istniejące podklasy wprowadzania danych zostały przekształcone w realizacje GtkEditable na podstawie nowego widgetu GtkText;
- Dodano nowy widget GtkPasswordEntry do formularzy wprowadzania haseł;
- W GtkWidgets dodano możliwość przekształcania dziecięcych elementów za pomocą metod transformacji liniowej, określonych przez CSS lub argument gtk_widget_allocate w GskTransform. Wskazana możliwość już zastosowano w widgetcie GtkFixed;
- Dodano nowe modele generowania list: GtkMapListModel, GtkSliceListModel, GtkSortListModel, GtkSelectionModel oraz GtkSingleSelection. W przyszłości planowane jest dodanie wsparcia dla modeli list w GtkListView;
- W GtkBuilder dodano możliwość ustawiania właściwości obiektów w miejscu (inline), zamiast używania odwołań za pomocą identyfikatora;
- W gtk4-builder-tool dodano polecenie do konwersji plików UI z GTK 3 do GTK 4;
- Zakończono wsparcie dla kluczowych tematów graficznych (key theme), menu zakładkowych (tabular menu) oraz kombinowanych bloków (combo box). Usunięto widżet GtkInvisible.
Źródło: opennet.ru
