После пяти месяцев разработки опубликован релиз многоплатформенного тулкита для создания графического интерфейса пользователя – GTK 4.12.0. GTK 4 развивается в рамках нового процесса разработки, который пытается предоставить разработчикам приложений стабильный и поддерживаемый в течение нескольких лет API, который можно использовать не опасаясь, что каждые полгода придётся переделывать приложения из-за изменения API в очередной ветке GTK.
В конце года планируется сформировать экспериментальную ветку 4.90, в которой будет развиваться функциональность для будущего выпуска GTK5. В ветку GTK5 будут включены изменения нарушающие совместимость на уровне API, например, связанные с переводом в разряд устаревших некоторых виджетов, таких как старый диалог выбора файлов. Также обсуждается возможность прекращения в ветке GTK5 поддержки протокола X11 и оставления возможности работы только с использованием протокола Wayland.
Среди наиболее заметных улучшений в GTK 4.12:
- В класс Gtk.FileLauncher добавлено свойство always-ask для показа диалога выбора приложения для открытия файла.
- Обеспечена автоматическая установка параметров шрифта (gtk-hint-font-metrics) на основе выставленного коэффициента масштабирования. Изменение позволило улучшить отрисовку шрифтов в приложениях, поставляемых в формате flatpak.
- Для Wayland реализована возможность заморозки (suspend) состояния окна. Решены проблемы при использовании кнопок стилуса в окружениях на базе Wayland. Для сборки теперь необходимо наличие пакета wayland-protocols как минимум версии 1.31. Решены проблемы с Drag&Drop. Добавлена поддержка протокола fractional-scale, позволяющего использовать нецелые значения масштаба. Задействован протокол “viewporter“, позволяющий клиенту выполнять действия по масштабированию и обрезанию краёв поверхности на стороне сервера.
- Добавлена новая утилита gtk4-rendernode-tool для отрисовки узлов сцены при помощи GskRenderer.
- В интерфейсе GtkFileChooser по умолчанию включён режим сортировки, в первую очередь показывающий каталоги, а уже потом файлы. Налажена работа столбцов с местоположением, датой и временем.
Добавлена обработка ссылок WebDav в строке с файловыми путём. - В виджетах GtkLabel и GtkLinkButton возвращена поддержка URI “file://”.
- Добавлен интерфейс GtkSectionModel для группировки элементов списка в секции. Поддержка разделения на секции добавлена в большинстве виджетов для вывода списков, включая GtkDropDown (выпадающее меню), GtkListView (список элементов) и GtkColumnView (многостолбцовый список).
- В виджетах GtkListView, GtkColumnView и GtkGridView улучшена обработка смены фокуса ввода и предложены новые свойства “::tab-behavior” и “GtkListItem::focusable”. Добавлен класс GtkColumnViewCell для представления элементов в ячейке.
В GtkColumnView добавлена поддержка “фабрик столбцов” (row factories) для генерации виджета ColumnViewCell для каждого столбца и каждого видимого элемента (в ячейке элементы показываются вместе в форме строки). - Значительно расширены средства для людей с ограниченными возможностями. Соответствующие изменения внесены в виджеты GtkButton, GtkPasswordEntry, GtkFontChooserDialog, GtkColorChooserDialog, GtkShortcutsWindow, GtkMenuButton, GtkAboutDialog, GtkFileChooserDialog, GtkStackSidebar, GtkStackSwitcher, GtkMediaControls, GtkColorDialogButton, GtkDropDown, GtkInfoBar, GtkNotebook, GtkPrintUnixDialog, GtkModelButton.
- В режим инспектирования (GTK inspector) добавлена новая секция “Accessibility” и реализован интерфейс для выявления проблем, которые могут возникнуть у людей с ограниченными возможностями. Расширена информация, показываемая во вкладке a11y. Добавлены дополнительные сведения, специфичные для Wayland.
- Улучшена поддержка графического API Vulkan. Добавлена возможность задействования Vulkan для сглаживания градиентов. Реализована поддержка разных форматов изображений и добавлена возможность повтора (redo) загрузки изображения. Добавлен кэш для pipeline-операций и переработано кэширование глифов. Добавлена поддержка нецелых значений при масштабировании.
- В движке отрисовки на базе OpenGL реализован API GdkGLTextureBuilde
для создания текстур. Предоставлена возможность настройки областей обновления текстур. - В библиотеке GDK, предоставляющей прослойку между GTK и графической подсистемой, реализована поддержка загрузки и сохранения текстур с прозрачностью и палитрой в оттенках серого. Реализована поддержка нецелых значений масштаба. При использовании Wayland нецелое масштабирование используется при сборке с cairo или OpenGL при указании опции GDK_DEBUG=gl-fractional.
- В библиотеке GSK (GTK Scene Kit), предоставляющей возможности отрисовки графических сцен через OpenGL и Vulkan, при рендеринге через OpenGL добавлена поддержка текстур с прозрачностью и палитрой в оттенках серого. Улучшен экспериментальный код для рендеринга при помощи API Vulkan. Добавлен параметр GSK_MAX_TEXTURE_SIZE для ограничения размера текстур. Повышена эффективность работы с текстурами.
- В виджет GtkCenterBox добавлено свойство shrink-center-last для сжатия центрального виджета в последнюю очередь, когда сжатие применено к остальным дочерним виджетам. В GtkButton и GtkMenuButton добавлено свойство can-shrink, разрешающее сжатие кнопок до размера, меньше, чем исходный размер содержимого кнопки.
- В видежете GtkBox добавлена поддержка направляющих в вертикальной ориентации.
- В движок тем оформления для некоторых виджетов добавлены отдельные классы стилей. Из библиотеки Adwaita перенесена поддержка стиля “.boxed-list”. Добавлена возможность отображения второстепенных изображений в оттенках серого.
- Поведение клавиши backspace в классе GtkTextView унифицировано с классом GtkEntry.
- В виджеты для работы со списками добавлен API scroll_to, для прокрутки в указанную позицию.
- В утилите gtk4-node-editor улучшено масштабирование, для текстур обеспечено сохранение коэффициента соотношения сторон, упрощено редактирование узлов.
- В реализацию механизма Drag-and-Drop добавлен сигнал GdkDragSurface::compute-size для передачи сведений об изменении размера перемещаемой области.
- Переведены в разряд устаревших функции:
- gtk_css_provider_load_from_data
- gdk_wayland_toplevel_unexport_handle
- gdk_pixbuf_get_from_surface
- gdk_pixbuf_get_from_texture
- gtk_image_new_from_pixbuf
- gtk_image_set_from_pixbuf
- gtk_picture_new_for_pixbuf
- gtk_picture_set_pixbuf
- gtk_widget_translate_coordinates
- gdk_surface_create_similar_surface