GTK 4.0

Теги

GTK (сокращение от GIMP ToolKit) — кроссплатформенная библиотека элементов интерфейса (фреймворк), имеет простой в использовании API, наряду с Qt является одной из двух наиболее популярных на сегодняшний день библиотек для X Window System. 

GTK 4 развивается в рамках нового процесса разработки, который пытается предоставить разработчикам приложений стабильный и поддерживаемый в течение нескольких лет API, который можно использовать не опасаясь, что каждые полгода придётся переделывать приложения из-за изменения API в очередной ветке GTK. 

Ветка GTK 4 объявлена стабильной и будет использована в следующем выпуске GNOME 40.0. Одновременно объявлено о прекращении поддержки ветки GTK 2, через несколько дней для которой планируется опубликовать последний релиз. Поддержка ветки GTK 3 в обозримом будущем будет сохранена. 

Внешний вид графических интерфейсов, созданных с использованием GTK+, может конфигурироваться пользователем и/или программистом. При этом настраиваются не только цвета и шрифты, но и способ отображения различных элементов. Достигается это за счёт использования «движков» для вывода на экран. Путём подключения другого движка можно кардинальным образом менять внешний вид программ. Например, некоторые движки могут использовать псевдо-трёхмерный вид, другие — более «плоский» и т. п.

Обновления в GTK 4:

  • Реализован метод раскладки элементов на основе ограничений (constraint layout), при котором расположение и размер дочерних элементов определяется, отталкиваясь от расстояния до границ и размера других элементов.
  • Добавлен модуль отрисовки на базе графического API Vulkan, в котором реализованы шейдеры для многих ресурсоёмких элементов CSS, применяемых в виджетах GTK.
  • Интегрирован GSK (GTK Scene Kit) c возможностями отрисовки графических сцен через OpenGL и Vulkan.
  • Пересмотрена организация отрисовки - вместо вывода в буфер теперь применяется модель на основе узлов отрисовки (render nodes), при которой вывод компонуется в форме дерева высокоуровневых операций, эффективно обрабатываемых GPU при помощи OpenGL и Vulkan.
  • Добавлены объекты для работы с шейдерами: GskGLShader (обвязка над фрагментными шейдерами GLSL), GskGLShaderNode (узел отрисовки для встраивания шейдеров в сцену) и API gtk_snapshot_push_gl_shader для упрощения интеграции узлов с шейдерами в виджеты. 
  • Появились средства для гибкой обработки изменения фокуса ввода.
  • Предложена модернизированная модель доставки событий, которая позволяет обойтись без subwindow при маршрутизации событий ввода. Необходимость реализации новой модели связана с более активным использованием анимационных эффектов, отрисовка которых должна производиться без смены раскладки видимых элементов и, соответственно, без subwindow.
  • Переработан API GDK с оглядкой на использование протокола Wayland и связанных с ним концепций. Завязанные на X11 и Wayland возможности перемещены в отдельные бэкенды.
  • Проведена большая чистка API, в том числе удалены классы GtkMenu, GtkMenuBar и GtkToolbar, вместо которых предложен GMenu и варианты на основе всплывающих меню (popover).
  • В GtkTextView и другие виджеты ввода встроен стек для отката изменений (undo).
  • Добавлен новый класс GtkNative для виджетов, имеющих собственную поверхность отображения и способных работать отдельно на первом уровне, без привязки к родительским виджетам.
  • Добавлены новые виджеты, включая GtkPicture, GtkText, GtkPasswordEntry, GtkListView, GtkGridView, GtkColumnView, а также виджет для показа Emoji. 
  • Упрощена обработка событий, которые теперь используются только для ввода. Остальные события заменены на отдельные сигналы, например, вместо событий вывода предложен сигнал "GdkSurface::render", вместо событий настройки - "GdkSurface::size-changed".
  • Добавлен новый уровень абстракции GdkPaintable, представляющий объекты, которые можно нарисовать где угодно с любым размером, без необходимости выполнения сортировки layout-слоёв.
  • Добавлены новые средства для воспроизведения анимации и мультимедийного контента, в том числе видео в файлах webm и потокового вещания. Предложены две реализации API GtkMediaFile, на базе gstreamer и ffmpeg, а также готовый виджет GtkVideo с элементами управления для просмотра видео. 
  •  Удалена старая реализация Аccessibility API для людей с ограниченными возможностями, вместо которой предложен новый вариант на базе спецификации ARIA и виджета GtkAccessible.
  • Добавлена поддержка редактируемых меток (GtkEditableLabel).
  • Предложены новые модели списков для отображения закладок (GtkBookmarkList), строк (GtkStringList) и блоков выбора (GtkBitset).
  • В виджете GtkTreeView реализована возможность редактирования ячеек.
  • В GtkFilterListModel и GtkSortListModel добавлена поддержка инкрементальной прокрутки и фильтрации. В GDK обеспечено сохранение истории прокрутки, проведена чистка API GdkDevice, прекращено разделение устройств на master и slave.
  • Добавлен новый GDK-бэкенд для macOS.
  • Для Windows предложен новый GDK-бэкенд отрисовки на базе ANGLE, прослойки для трансляции вызовов OpenGL ES в OpenGL, Direct3D 9/11, Desktop GL и Vulkan. 

На основе GTK+ построены рабочие окружения GNOME и Xfce. Программы, использующие GTK+, могут выполняться в других окружениях, например в KDE и LXDE.