После шести месяцев разработки опубликован релиз многоплатформенного тулкита для создания графического интерфейса пользователя – GTK 4.16.0. GTK 4 развивается в рамках процесса разработки, который пытается предоставить разработчикам приложений стабильный и поддерживаемый в течение нескольких лет API, который можно использовать не опасаясь, что каждые полгода придётся переделывать приложения из-за изменения API в очередной ветке GTK.
Среди наиболее заметных улучшений в GTK 4.16:
- Добавлена настройка gtk-font-rendering, предоставляющая гибкие высокоуровневые возможности для управления отрисовкой шрифтов. Для использования низкоуровневых настроек шрифтов следует выставить параметр gtk-font-rendering в значение ‘manual’.
- В библиотеке GSK (GTK Scene Kit), предоставляющей возможности отрисовки графических сцен через OpenGL и Vulkan, по умолчанию для отрисовки в окружениях на базе протокола Wayland задействован движок отрисовки “vulkan”, напрямую использующий графический API Vulkan. В остальных случаях продолжает использоваться движок отрисовки “ngl”, предлагающий реализацию OpenGL, работающую поверх API Vulkan. Для изменения движка можно использовать переменную окружения “GSK_RENDERER”. Так как движки “vulkan” и “ngl” по иному взаимодействуют с графическими драйверами, для стабильной работы с ними рекомендуется использовать последний релиз Mesa 24.2.
- Среди других изменений в библиотеке GSK:
- Реализована техника оптимизации “occlusion culling”, исключающая отрисовку объектов, скрытых за другими непрозрачными объектами или находящимися вне поля зрения.
- В процессе композитинга обеспечен учёт информации о цветовом пространстве.
- Улучшено кэширование глифов и текстур.
- Реализована поддержка плиточного наложения (tiling) больших текстур для создания бесшовной поверхности путём повторения текстуры.
- Улучшена отрисовка теней.
- Добавлена возможность привлечения средств аппаратного ускорения для обработки преобразованных текстур, например, для вывода повёрнутого содержимого на экран.
- Улучшено использование механизмов аппаратного ускорения на системах с композитным менеджером kwin.
- Добавлена отладочная опция “GDK_DEBUG=linear” для включения режима линейного композитинга. Улучшено ведение лога при использовании опций “GDK_DEBUG=offload” и “GSK_DEBUG=renderer”.
- При работе в окружениях на базе протокола Wayland и композитного менеджера kwin реализована возможность использования расширения протокола (color-management) для управление цветом. При выводе закреплённых диалогов использовано Wayland-расширение xdg-dialog. При композитинге задействована шестая версия объекта wl_compositor. Разрешено использование dmabuf в процессе аппаратного ускорения обработки текстур для OpenGL.
- Улучшения в библиотеке GDK, предоставляющей прослойку между GTK и графической подсистемой:
- Существенно расширены возможности для работы с цветовыми пространствами. Обеспечена поддержка цветовых пространств srgb, srgb-linear, rec2100-pq и rec2100-linear, и проведена подготовка к реализации поддержки цветовых пространств для HDR.
Предложен объект GdkColorState, предоставляющий информацию об интерпретации цветов, которую можно использовать для преобразования одного цветового пространства в другое. Для создания объектов с информацией о цветовых пространствах добавлен объект Gdk.CicpParams. В объект GdkTexture, а также в объекты создания, загрузки и преобразования текстур добавлена возможность использования цветовых пространств. - Реализован новый API для работы с курсором, основанный на callback-вызовах.
- Реализована возможность выполнения операций MIP-текстурирования (MipMap, создание уменьшенных версий текстур, используемых при удалении объекта от камеры) силами CPU.
- Для преобразования цветов и MIP-текстурирования задействован пул потоков (thread pool) .
- Добавлена поддержка переменной окружения XDG_ACTIVATION_TOKEN с токеном активации для протокола xdg-activation-v1, при помощи которого одно приложение может переключить фокус на другое.
- Добавлен класс GdkMemoryTextureBuilder, позволяющий формировать объекты с текстурами (GdkTexture) из данных, хранимых в оперативной памяти.
- Существенно расширены возможности для работы с цветовыми пространствами. Обеспечена поддержка цветовых пространств srgb, srgb-linear, rec2100-pq и rec2100-linear, и проведена подготовка к реализации поддержки цветовых пространств для HDR.
- Расширены возможности по созданию тем оформления на базе CSS. Добавлена поддержка переменных и пользовательских свойств. Реализованы CSS-функции color(), oklab(), color-mix(), а также математические функции. Предоставлена возможность использования относительного определения цветов (изменения абсолютных цветов функциями), а также задания уровня прозрачности в процентах. При работе с цветами, рамками, тенями и текстом обеспечен учёт информации о цветовых пространствах.
- В утилиту rendernode-tool добавлены команды “extract” для загрузки данных по URL и “image” для манипуляции текстурами. Реализована возможность генерации файлов в формате PDF.
- В интерфейс gtk4-node-editor добавлена операция ‘Paste as node’.
- В виджет выбора файлов GtkFileChooserWidget добавлена поддержка комбинации Ctrl-Shift-N для создания каталогов.
- В виджете создания всплывающих окон GtkPopover улучшена обработка изменения размера и позиции.
- В виджет GtkGraphicsOffload, используемый для прямой отправки контента, такого как видео, через композитный менеджер минуя рендер GSK, добавлено свойство “black-background” для вывода чёрного фона.
- В виджет GtkGLArea, предназначенный для вывода с использованием OpenGL, добавлена возможность формирования текстур в dmabuf, что позволяет использовать виджет GtkGraphicsOffload для прямого вывода напрямую через композитный сервер. Повышена эффективность взаимодействия с композитным сервером.
- В виджет GtkTextView добавлена поддержка вывода текста с тенью и реализована возможность использования уведомлений GtkTextBufferCommitNotify.
- В виджет GtkCheckButton добавлена поддержка группового определения стиля кнопок.
- Расширены возможности отладки. В интерфейс инспектирования добавлена информация о цветовых пространствах, а также сведения о разрешении монитора. Переменная окружения GDK_DEBUG разделена на GDK_DEBUG и GDK_DISABLE. Добавлены режимы GDK_DISABLE=color-mgmt и GDK_DISABLE=offload. Добавлен режим GTK_DEBUG=css для вывода предупреждений при использовании устаревших возможностей CSS. Добавлены клавиатурные комбинации Super-r для записи лога событий и Super-c для создания скриншота.
- Подняты требования к зависимостям и сборочному окружению. Для сборки теперь необходим компилятор с поддержкой C11 и как минимум версии gstreamer 1.24, pango 1.52 и cairo 1.18. Прекращена поддержка устаревших сборочных режимов gtk_doc (следует использовать documentation), update_screenshots (-> screenshots), demo-profile (-> profile) и demos (-> build-demos).
- Для macOS 10.15+ реализован интерфейс определения цвета пикселей на экране (color picker).
- Для Windows включён режим инкрементального рендеринга с использованием API WGL.