Доступен GTK+ 3.94, экспериментальный выпуск GTK+ 4
Как сообщает opennet.ru Представлен очередной тестовый выпуск будущего стабильного релиза GTK+ 4. Ветка GTK+ 4 развивается в рамках нового процесса разработки, который пытается предоставить разработчикам приложений стабильный и поддерживаемый в течение нескольких лет API, который можно использовать не опасаясь, что каждые полгода придется переделывать приложение из-за изменения API в очередной ветке GTK+. До полной стабилизации GTK+ 4, приложения, предлагаемые для пользователей, рекомендуется продолжить собирать с использованием ветки GTK+ 3.22, на смену которой в сентябре придет финальная ветка 3.24.
Основные изменения в GTK+ 3.94:
- В API GSK (GTK Scene Kit), обеспечивающем отрисовку графических сцен через OpenGL и Vulkan, представлен новый тип узлов рендеринга - GskOffsetNode, являющихся упрощенным вариантом GskTransformNode, выполняющим работу по трансляции контента при перемещении вверх или вниз по дереву узлов рендеринга (render node tree). Данная возможность позволила реализовать кэширование узлов рендеринга для разных кадров виджетов, при необходимости осуществляя изменение позиции узла. В GSK также добавлен вызов GskDebugNodes для упрощения отладки процесса создания узлов рендеринга в приложениях и операция gsk_render_node_diff для оценки различий между двумя деревьями узлов;
- В бэкенд Broadway, позволяющий отрисовывать вывод библиотеки GTK+ в окне web-браузера, добавлена реализации вызова GskRenderer;
- При откате отрисовки с GSK на Cairo теперь применяется записываемая поверхность (recording surface) вместо поверхности в форме изображения (image surface), что позволяет в дальнейшем повторить отрисовку в другом масштабе;
- В GDK продолжена модернизация API в контексте применения Wayland вместо X. Например, GdkWindow переименован в GdkSurface для соответствия терминологии Wayland. В класс GdkTexture добавлены подклассы GdkMemoryTexture и GdkGLTexture и новый уровень абстракции GdkPaintable (представляет объекты, которые можно нарисовать где угодно с любым размером, без необходимости выполнения сортировки layout-слоев);
- Добавлена возможность отображения видео при помощи виджетов GtkVideo и GtkMediaControls;
- Добавлен новый виджет GtkPicture для разделения функций просмотра изображений и пиктграмм с виджетом GtkImage;
- В виджет GtkFontChooser добавлена поддержка изменения параметров шрифтов OpenType, в том числе настройки изменчивых шрифтов;
- Комбинация Ctrl-Shift-e для ввода Emoji заменена на всплывающий диалог дополнения ввода, активируемый при помощи свойства GtkEntry::enable-emoji-completion;
- Добавлены новые типы контроллеров событий ввода GtkEventControllerMotion, GtkEventControllerKey и GtkGestureStylus, которые пришли на смену старой системе доставки событий ввода. Контроллеры ввода в том числе можно создавать в файлах ".ui". Для Wayland задействована собственная платформа методов ввода, базирующаяся на протоколе Wayland;
- Прекращена поддержка сигнала "::draw", вместо которого во всех виджетах следует реализовать сигнал "::snapshot", по которому создается собственный экземпляр GtkSnapshot для промежуточной отрисовки. При этом выход за границы области виджета больше не обрезается и виджет может выполнять отрисовку за своими пределами;
- Изменен механизм аннулирования виджета, который теперь действует через очистку связанных с виджетом прокэшированных узлов в дереве рендеринга с последующим воссозданием недостающих в кэше частей дерева рендеринга. Для определения областей, которые следует перерисовать, выполняется сравнение состояния дерева рендеринга до и после текущего кадра. В GTK+ inspector добавлена возможность отслеживания аннулирования виджетов:
- Прекращена поддержка загружаемых модулей. Ранее применяемые модули с поддержкой методов ввода, бэкендов вывода на печать и мультимедийных бэкендов преобразованы в модули GIOModules и расширения. Модули поддержки систем ввода на уровне платформ (im-модули для Windows, Wayland, Broadway) теперь всегда включены и активируются по умолчанию на связанных с ними платформах;
- В код поддержки API Vulkan в GDK добавлена возможность выбора устройства вывода через переменную окружения GDK_VULKAN_DEVICE (список доступных устройств можно посмотреть указав GDK_VULKAN_DEVICE=list).