Выпуск GTK+ 3.90 ознаменовал новый этап подготовки GTK+ 4
Маттиас Класен (Matthias Clasen), лидер Fedora Desktop Team и участник GNOME Release Team, представил выпуск тулкита для создания графического интерфейса пользователя GTK+ 3.90, который позиционируется как тестовая ветка для подготовки будущего стабильного релиза GTK+ 4. GTK+ 4 развивается в рамках нового процесса разработки, который пытается предоставить разработчикам приложений стабильный и поддерживаемый в течение нескольких лет API, который можно использовать не опасаясь, что каждые полгода придется переделывать приложение из-за изменения API в очередной ветке GTK+
В отличие от ветки 3.89.x, выпуски 3.90.x позиционируются как пригодные для создания экспериментальных портов приложений для опробования изменений API. При этом разработчики не гарантируют стабильность данного API на протяжении более 6 месяцев, так как работа над некоторыми запланированными для GTK+ 4 изменениями еще не завершена и финальный API GTK+ 4 может измениться. Например, планируется прекратить поддержку вторичных окон (subwindows) и убрать API GtkContainer из GtkWidget. До полной стабилизации GTK+ 4 в приложениях, предлагаемых для пользователей, рекомендуется продолжить собирать с использованием ветки GTK+ 3.22, которая будет поддерживаться три года.
Из предложенных для GTK+ 4 изменений можно отметить:
- Новый модуль отрисовки на базе графического API Vulkan, в котором уже реализованы шейдеры для многих ресурсоемких элементов CSS, применяемых в виджетах GTK+. Из еще не готовых к применению функций отмечается отрисовка текста, которая пока реализована через Cairo;
- Интеграция GSK (GTK Scene Kit) c возможностями отрисовки графических сцен через OpenGL и Vulkan. В первую очередь решено реализовать модуль отрисовки через Vulkan, а потом портировать необходимые для GSK возможности в модуль для OpenGL;
- Интеграция наработок проекта Emeus с реализацией метода раскладки элементов на основе ограничений (constraint layout), при котором расположение и размер дочерних элементов определяется отталкиваясь от расстояния до границ и размера других элементов. В настоящее время в GTK+ поддерживается два метода позиционирования: модель вложенных блоков (GtkBox) и расстановка элементов на основе фиксированных позиций в окне (GtkFixed, GtkLayout). Emeus предлагает третий метод, похожий на использование модели позиционирования, применяемой в Apple iOS, при котором атрибуты элементов интерфейса, такие как ширина и позиция, привязываются к другим элементам;
- Поддержка спецификаций SVG- и CSS-фильтров;
- Новая модель доставки событий, которая позволит обойтись без subwindow при маршрутизации событий ввода. Необходимость реализации новой модели вызвана более активным использованием анимационных эффектов, отрисовка которых должна производиться без смены раскладки видимых элементов и, соответственно, без subwindow;
- Изменение организации работы виджетов GTK+. GtkContainer отныне не будет применяться в качестве родительского класса для контейнера и виджеты смогут иметь дочерние элементы. API для манипуляции дочерними элементами напоминает DOM: gtk_widget_get_first_child, gtk_widget_get_last_child, gtk_widget_get_next_sibling, gtk_widget_get_prev_sibling. Поддержка дочерних виджетов позволит использовать обычные виджеты вместо гаджетов и узлов CSS, представленных в GTK+ 3.20. Например, для GtkSwitch подготовлены дочерние виджеты с реализацией слайдера и двух видов меток;
- Средства записи активности в GTK+ Inspector с возможностью последующего повторного воспроизведения;
- Большая чистка API.