Опубликован GTK 3.96, экспериментальный выпуск GTK 4
Спустя 10 месяцев с момента прошлого тестового выпуска представлен GTK 3.96, новый экспериментальный выпуск будущего стабильного релиза GTK 4. Ветка GTK 4 развивается в рамках нового процесса разработки, который пытается предоставить разработчикам приложений стабильный и поддерживаемый в течение нескольких лет API, который можно использовать не опасаясь, что каждые полгода придётся переделывать приложение из-за изменения API в очередной ветке GTK. До полной стабилизации GTK 4, приложения, предлагаемые для пользователей, рекомендуется продолжить собирать с использованием ветки GTK 3.24.
Основные изменения в GTK 3.96:
- В API GSK (GTK Scene Kit), обеспечивающем отрисовку графических сцен через OpenGL и Vulkan, проведена работа над ошибками, выявлять которые стало проще благодаря новому отладочному инструменту gtk4-node-editor, позволяющему загрузить и отобразить узел рендеринга в сериализированном формате (может быть сохранён в режиме инспектирования GTK inspector), а также сравнить результат отрисовки при применении различных бэкендов;
- Возможности 3D-трансформации доведены до уровня, позволяющего создавать такие анимационные эффекты, как вращающийся куб;
- Полностью переписан GDK-бэкенд Broadway, предназначенный для отрисовки вывода библиотеки GTK в окне web-браузера. Старая реализация Broadway не укладывалась в предложенные в GTK 4 методы отрисовки (вместо вывода в буфер теперь применяется модель на основе узлов отрисовки (render nodes), при которой вывод компонуется в форме дерева высокоуровневых операций, эффективно обрабатываемых GPU при помощи OpenGL и Vulkan). Новый вариант Broadway преобразует узлы отрисовки в DOM-узлы со стилями CSS для вывода интерфейса в браузере. Каждое новое состояние экрана обрабатывается как изменение DOM-дерева относительно прошлого состояния, что позволяет сократить размер передаваемых удалённому клиенту данных. 3D-преобразования и графические эффекты реализуются через CSS-свойство transform;
- В GDK продолжено внедрение API, разработанных с оглядкой на использование протокола Wayland, и проведение чистки API, завязанных на X11, или их перемещение в отдельный бэкенд X11. Отмечается прогресс выполнения работы по уходу от применения дочерних поверхностей и глобальных координат. Из GDK удалена поддержка GDK_SURFACE_SUBSURFACE;
- Продолжен рефакторинг кода, связанного с выполнением операций Drag-and-Drop, в том числе предложены раздельные объекты GdkDrag и GdkDrop;
- Упрощена обработка событий, которые теперь используются только для ввода. Остальные события заменены на отдельные сигналы, например, вместо событий вывода предложен сигнал «GdkSurface: render», вместо событий настройки — «GdkSurface: size-changed», вместо событий сопоставления — «GdkSurface: mapped», вместо gdk_event_handler_set () — «GdkSurface: event»;
- В GDK-бэкенд для Wayland добавлена поддержка portal-интерфейса для доступа к настройкам GtkSettings. Для работы с методами ввода предложена поддержка расширения протокола text-input-unstable-v3;
- Для разработки виджетов представлен новый объект GtkLayoutManager с реализацией системы управления раскладкой элементов в зависимости от размена видимой области. GtkLayoutManager пришёл на смену дочерним свойствам в контейнерах GTK, таких как GtkBox и GtkGrid. Предложено несколько готовых менеджеров раскладки: GtkBinLayout для простых контейнеров с одним дочерним элементом, GtkBoxLayout для линейно выровненных дочерних элементов, GtkGridLayout для выравнивания дочерних элементов по сетке, GtkFixedLayout для произвольного позиционирования дочерних элементов, GtkCustomLayout для трансляции традиционных элементов на основе обработчиков size_allocate;
- В виджеты GtkAssistant, GtkStack и GtkNotebook добавлены публично доступные объекты для страничного вывода дочерних элементов, на которые переведены не связанные с раскладкой (Layout) дочерние свойства данных виджетов. Так как все существующие дочерние свойства преобразованы в обычные свойства, свойства раскладки или перемещены в страничные объекты, из GtkContainer полностью удалена поддержка дочерних свойств;
- Базовая функциональность GtkEntry перемещена в новый виджет GtkText, который также включает расширенный интерфейс редактирования GtkEditable. Все существующие подклассы ввода данных переделаны в форме реализаций GtkEditable на базе нового виджета GtkText;
- Добавлен новый виджет GtkPasswordEntry для форм ввода паролей;
- В GtkWidgets добавлена возможность преобразования дочерних элементов при помощи методов линейной трансформации, задаваемых через CSS или аргумент gtk_widget_allocate в GskTransform. Указанная возможность уже применена в виджете GtkFixed;
- Добавлены новые модели формирования списков: GtkMapListModel, GtkSliceListModel, GtkSortListModel, GtkSelectionModel и GtkSingleSelection. В дальнейшем планируется добавить поддержу моделей списков в GtkListView;
- В GtkBuilder добавлена возможность задания свойств объектов по месту (inline), вместо использования ссылок по идентификатору;
- В gtk4-builder-tool добавлена команда для преобразования UI-файлов из GTK 3 в GTK 4;
- Прекращена поддержка ключевых тем оформления (key theme), вкладочных меню (tabular menu) и комбинированных блоков (combo box). Удалён виджет GtkInvisible.
© OpenNet