final experimental release of the framework , which implements all features planned for GTK 4. The GTK 4 branch is evolving within a new development process that aims to provide application developers with a stable API supported for several years, avoiding the need to overhaul applications every six months due to API changes in the next GTK branch. The GTK 4 release is planned to be out by the end of the year.
Among the most downward API support (simultaneously with this in notable mentions include:
- Constraint-based layout method (), where the position and size of child elements are determined based on the distance to the edges and the sizes of other elements.
- Rendering module based on the Vulkan graphics API, featuring shaders for many resource-intensive CSS elements used in GTK widgets.
- Integration (GTK Scene Kit) with capabilities for rendering graphic scenes via OpenGL and Vulkan.
- The rendering organization has been revised — instead of outputting to a buffer, a node-based rendering model is now used, where the output is assembled in the form of a tree of high-level operations efficiently processed by the GPU using OpenGL and Vulkan.
- for flexible handling of input focus changes.
- An upgraded event delivery model that allows bypassing subwindows during input event routing. The need for this new model arises from the increased use of animation effects, whose rendering must occur without altering the layout of visible elements and thus without using subwindows.
- The GDK API has been redesigned with consideration for utilizing the Wayland protocol and associated concepts. Features linked to X11 and Wayland have been moved to .
- A significant API cleanup has been conducted, including the removal of GtkMenu, GtkMenuBar, and GtkToolbar classes, which have been replaced with GMenu and variants based on pop-up menus (popover).
- In GtkTextView and other input widgets, a stack for undoing changes has been integrated.
- A new GtkNative class has been added for widgets that have their own display surface and can operate independently at the top level, without being tied to parent widgets.
- New widgets have been introduced, including GtkPicture, GtkText, GtkPasswordEntry, GtkListView, GtkGridView, GtkColumnView, as well as a widget for displaying Emoji.
- A new object GtkLayoutManager has been introduced for widget development, implementing a layout management system based on the size of the visible area. GtkLayoutManager replaces the child properties in GTK containers, such as GtkBox and GtkGrid.
- Event handling has been simplified, now only used for input. Other events have been replaced with separate signals; for example, instead of output events, the signal 'GdkSurface::render' is proposed, and for size adjustment events — 'GdkSurface::size-changed'.
- A new level of abstraction, GdkPaintable, has been added, representing objects that can be drawn anywhere at any size without the need to perform layout layer sorting.
- The Broadway backend has been rewritten, allowing GTK library output to be rendered in a web browser window.
- The API related to Drag-and-Drop operations has been redesigned, including separate GdkDrag and GdkDrop objects.
Improvements over the previous test release:
- The old Accessibility API for people with disabilities has been removed, replaced by a new variant based on the ARIA specification. and the GtkAccessible widget.
- Support for editable labels (GtkEditableLabel) has been added.
- New list models for displaying bookmarks (GtkBookmarkList), strings (GtkStringList), and selection blocks (GtkBitset) have been introduced.
- The GtkTreeView widget has implemented the ability to edit cells.
- In GtkGridView and GtkListView, scrolling implementation has been improved, with support for auto-scrolling and auto-expansion added.
- Processing of various actions has been significantly accelerated in GtkWidget.
- Incremental scrolling and filtering support have been added to GtkFilterListModel and GtkSortListModel.
- The Inspector now supports inspecting list models and provides direct navigation between objects.
- In GDK, scrolling history preservation has been ensured, GdkDevice API has been cleansed, and the division of devices into master and slave has been discontinued.
- A new GDK backend for macOS has been added.
- For Windows, a new rendering GDK backend based on OpenGL ES translation to OpenGL, Direct3D 9/11, Desktop GL, and Vulkan has been proposed. , The final experimental release of the framework has been published.
Source: opennet.ru
