GTK 3.96 published, experimental release of GTK 4

10 months after of the past test release submitted gtk3.96, a new experimental release of the upcoming stable release of GTK 4. The GTK 4 branch is being developed under a new development process that attempts to provide application developers with a stable and supported API for several years that can be used without fear of having to rework the application every six months due to a change API in the next branch of GTK. Until GTK 4 is fully stabilized, it is recommended that applications offered to users continue to be built using the branch gtk3.24.

All changes in GTK 3.96:

  • In the API GSK (GTK Scene Kit), which provides rendering of graphic scenes through OpenGL and Vulkan, work has been done on errors that have become easier to detect thanks to the new debugging tool gtk4-node-editor, which allows you to load and display the render node in a serialized format (can be saved in inspect mode GTK inspector), as well as compare the rendering result when using different backends;

    GTK 3.96 published, experimental release of GTK 4

  • 3D transformation capabilities have been brought to a level that allows you to create animation effects such as a rotating cube;

    GTK 3.96 published, experimental release of GTK 4

  • Completely rewritten Broadway GDK backend designed to render the output of the GTK library in a web browser window. The old implementation of Broadway did not fit into the rendering methods proposed in GTK 4 (instead of buffering output, it now uses a model based on render nodes (render nodes), in which the output is composed in the form of a tree of high-level operations, efficiently processed by the GPU using OpenGL and Vulkan).
    The new Broadway variant converts render nodes to DOM nodes with CSS styles for rendering the interface in the browser. Each new screen state is treated as a change in the DOM tree relative to the previous state, which reduces the size of the data transmitted to the remote client. 3D transforms and graphical effects are implemented through the transform CSS property;

  • The GDK continues to implement APIs designed with the Wayland protocol in mind and clean up X11-based APIs or move them to a separate X11 backend. Progress is noted in the work on avoiding the use of child surfaces and global coordinates. GDK_SURFACE_SUBSURFACE support removed from GDK;
  • Continued refactoring of code related to the execution of Drag-and-Drop operations, including the proposed separate objects GdkDrag and GdkDrop;
  • Simplified handling of events, which are now used only for input. The rest of the events are replaced by separate signals, for example, instead of output events, the signal "GdkSurface::render" is proposed, instead of setup events - "GdkSurface::size-changed", instead of mapping events - "GdkSurface::mapped", instead of gdk_event_handler_set() - "GdkSurface::event";
  • GDK backend for Wayland added support for a portal interface for accessing GtkSettings settings. Support for the text-input-unstable-v3 protocol extension has been proposed for working with input methods;
  • For the development of widgets, a new GtkLayoutManager object is presented with the implementation of a control system for the layout of elements, depending on the change of the visible area. GtkLayoutManager has replaced child properties in GTK containers such as GtkBox and GtkGrid. Several ready-made layout managers are offered: GtkBinLayout for simple containers with one child, GtkBoxLayout for linearly aligned children, GtkGridLayout for aligning children to the grid, GtkFixedLayout for arbitrary positioning of children, GtkCustomLayout for translating traditional elements based on size_allocate handlers;
  • The GtkAssistant, GtkStack, and GtkNotebook widgets now have publicly accessible objects for paging child elements, to which the child properties of these widgets that are not related to the layout (Layout) have been translated. Since all existing child properties have been converted to regular properties, layout properties, or moved to page objects, support for child properties has been completely removed from GtkContainer;
  • The core GtkEntry functionality has been moved to the new GtkText widget, which also includes the advanced GtkEditable editing interface. All existing input subclasses have been converted to form GtkEditable implementations based on the new GtkText widget;
  • Added new GtkPasswordEntry widget for password entry forms;
  • Added the ability to transform child elements in GtkWidgets using linear transformation methods specified via CSS or the gtk_widget_allocate argument in GskTransform. This feature has already been applied in the GtkFixed widget;
  • Added new list generation models: GtkMapListModel, GtkSliceListModel, GtkSortListModel, GtkSelectionModel and GtkSingleSelection. In the future, it is planned to add support for list models in GtkListView;
  • Added the ability to set object properties in-place (inline) to GtkBuilder instead of using references by ID;
  • Added command to gtk4-builder-tool to convert UI files from GTK 3 to GTK 4;
  • Support for key themes (key theme), tab menus (tabular menu) and combined blocks (combo box) has been discontinued. Removed GtkInvisible widget.

    Source: opennet.ru

Add a comment