The release of GTK 3.99.0 marked the availability of functionality planned for GTK 4

Published final experimental release of the framework gtk3.99.0, which implements all the features planned for GTK 4. The GTK 4 branch is being developed as part of a new development process that attempts to provide application developers with a stable and supported API for several years, which can be used without fear that applications will have to be redesigned every six months due to for API changes in the next GTK branch. Release GTK 4 plan to release before the end of the year.

Of the most significant changes Π² gtk4 you can note:

  • Constraint-based nesting method (constraint layout), in which the location and size of child elements is determined based on the distance to the borders and the size of other elements.
  • A rendering module based on the Vulkan graphics API that implements shaders for many of the resource-intensive CSS elements used in GTK widgets.
  • Integration GSK (GTK Scene Kit) with the ability to render graphic scenes through OpenGL and Vulkan.
  • The organization of rendering has been revised - instead of output to the buffer, a model based on render nodes (render nodes) is now used, 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.
  • Facilities for flexible handling of input focus changes.
  • A modernized event delivery model that eliminates the need for a subwindow when routing input events. The need to implement a new model is associated with a more active use of animation effects, which should be rendered without changing the layout of visible elements and, accordingly, without subwindow.
  • Redesigned the GDK API to use the Wayland protocol and related concepts. Features tied to X11 and Wayland moved to separate backends.
  • A lot of API cleaning has been done, including the removal of the GtkMenu, GtkMenuBar and GtkToolbar classes, in favor of GMenu and options based on popover menus (popover).
  • GtkTextView and other input widgets have a built-in undo stack.
  • A new GtkNative class has been added for widgets that have their own display surface and can work separately at the first level, without being tied to parent widgets.
  • Added new widgets, including GtkPicture, GtkText, GtkPasswordEntry, GtkListView, GtkGridView, GtkColumnView, and an Emoji widget.
  • For the development of widgets, a new GtkLayoutManager object is presented with the implementation of a system for controlling the layout of elements depending on the size of the visible area. GtkLayoutManager has replaced child properties in GTK containers such as GtkBox and GtkGrid.
  • Simplified handling of events, which are now used only for input. The rest of the events have been replaced with separate signals, for example, instead of output events, the signal "GdkSurface::render" is proposed, instead of configuration events - "GdkSurface::size-changed".
  • A new abstraction layer has been added to GdkPaintable, representing objects that can be drawn anywhere at any size, without the need to perform layout layer sorting.
  • The Broadway backend has been rewritten to allow rendering of GTK library output in a web browser window.
  • The Drag-and-Drop API has been redesigned, including separate GdkDrag and GdkDrop objects.

Improvements from the previous test release:

  • Removed the old implementation of the Accessibility API for people with disabilities, instead of which a new version based on the specification is proposed AIR and the GtkAccessible widget.
  • Added support for editable labels (GtkEditableLabel).
  • New list models are proposed for displaying bookmarks (GtkBookmarkList), strings (GtkStringList), and selection blocks (GtkBitset).
  • The GtkTreeView widget implements the ability to edit cells.
  • Scrolling implementation has been improved in GtkGridView and GtkListView, support for autoscroll and autoexpand has been added.
  • In GtkWidget processing of various actions is considerably accelerated.
  • Support for incremental scrolling and filtering has been added to GtkFilterListModel and GtkSortListModel.
  • Support for inspecting list models and the ability to navigate directly between objects has been added to the Inspector.
  • In GDK, the scrolling history is preserved, the GdkDevice API has been cleaned, and the division of devices into master and slave has been stopped.
  • Added new GDK backend for macOS.
  • For Windows, a new GDK rendering backend based on ANGLE, layers to translate OpenGL ES calls to OpenGL, Direct3D 9/11, Desktop GL and Vulkan.

Source: opennet.ru

Add a comment