Доступен графический тулкит GTK 4.6

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

Среди наиболее заметных улучшений в GTK 4.6:

  • Удалён старый движок отрисовки на базе OpenGL, на смену которому пришёл новый движок NGL, поставляемый по умолчанию начиная с GTK 4.2 и обеспечивающий более высокую производительность. NGL переименован в GL. Переписан код загрузки текстур, улучшена поддержка форматов изображений и цветовых пространств.
  • Значительно переделан код, связанный с вычислением размеров элементов и компоновкой виджетов. Раньше свойства GtkWidget::halign и GtkWidget::valign при размещении элементов отталкивались от размера виджетов по умолчанию, что при указании только одного размера в режиме заполнения области могло приводить к занятию элементом дополнительного пространства. В GTK 4.6 реализована возможность относительного измерения недостающего размера (например, если задана ширина, при размещении может учитываться доступная высота), что позволяет сделать виджеты более тонкими без занятия лишнего пространства.



  • В виджете GtkBox реализована возможность вычисления индивидуального размера дочерних элементов. Если раньше пространство распределялось поровну между дочерними виджетами на основе их размера по умолчанию, то в GTK 4.6 при выводе реализован учёт фактического размера дочерних элементов.


  • В виджете GtkLabel реализована поддержка переноса текста на произвольное число строк, что позволяет создавать узкие метки, занимающие доступное вертикальное пространство.
  • В класс GtkWindow добавлена возможность подгонки минимального размера к коэффициенту соотношения сторон, что позволяет произвольно изменять размер окна, не опасаясь, что оно будет слишком мелким. Добавлено свойство “Window.titlebar“.
  • Добавлено новое предупреждение, информирующее о несоответствии размеров в случае возвращения видежетом некорректного размера. Gtk-CRITICAL **: 00:48:33.319: gtk_widget_measure: assertion ‘for_size >= minimum opposite size’ failed: 23 >= 42
  • В виджете GtkTextView добавлена поддержка вкладок, выровненных по правой границе или по центру. Добавлена поддержка преобразования текста и учёта высоты строки. Улучшена операция прокрутки до указанной метки.
    Улучшена обработка отмены изменений. Решены проблемы при вставке текста из буфера обмена и с выбором места для показа интерфейса вставки Emoji.
  • В виджете GtkMenuButton предоставлена возможность определения собственных дочерних элементов.
  • В GtkBuilder ускорена предкомпиляция шаблонов.
  • Добавлен сигнал activate для активации виджетов GtkComboBox и GtkDropDown.
  • В виджет GtkDropDown добавлено свойство show-arrow для управления показом стрелки.

  • В GtkPopoverMenu добавлен атрибут use-markup для использования Pango-разметки в тексте меню.
  • В системе стилей реализована поддержка CSS-свойств font-variant-caps для отображения мелких заглавных букв и text-transform для трансформации текста.
  • Добавлен интерфейс GtkSymbolicPaintable для управления цветом символьных пиктограмм.
  • В интерфейс инспектирования добавлена поддержка отслеживания операций Drag-and-Drop, обеспечен показ текущего модуля ввода, добавлен просмотрщик содержимого буфера обмена, реализован график для визуализации gtk_widget_measure(), обеспечена возможность журналирования событий. В утилиту gtk4-node-editor добавлена поддержка режима Drag-and-Drop.
  • Для Wayland реализована настройка для активации режима высокого контраста (high-contrast). Добавлена поддержка протокола wl_seat v7.
  • Добавлена настройка gtk-hint-font-metrics для приближения отрисовки текста к поведению GTK3.
  • Для систем на базе X11 добавлена поддержка управляющих жестов на тачпадах (при использовании XInput 2.4) и улучшено поведение перетаскивания окон за заголовок.
  • В GDK улучшена проверка версий OpenGL и OpenGL ES. Добавлена поддержка цветового пространства HSL. При загрузке текстур и обработке форматов изображений напрямую задействованы библиотеки libpng, libjpeg и libtiff. Код инициализации EGL перенесён на сторону фронтэнда.
    Добавлены новые API: gdk_texture_new_from_bytes, gdk_texture_new_from_filename, gdk_texture_download_float, gdk_texture_save_to_png_bytes, gdk_texture_save_to_tiff, gdk_texture_save_to_tiff_bytes и gdk_display_create_gl_context.
  • Ветка “master” в Git-репозитории переименована в “main”.
Release. Ссылка here.