Открыть сервис

GTK

GTK (GIMP Toolkit) — это кроссплатформенная свободная библиотека виджетов для создания графических интерфейсов пользователя (GUI). Она предоставляет набор готовых элементов управления (кнопки, окна, поля ввода, меню, слайдеры) и инструментов для их компоновки, позволяя разработчикам создавать приложения с единообразным внешним видом на различных операционных системах. GTK является одной из двух наиболее распространённых библиотек для построения графического интерфейса в среде Linux наряду с Qt, а также используется в Windows и macOS.

История

Предыстория и создание

Разработка GTK началась в 1997 году в рамках проекта GIMP (GNU Image Manipulation Program). Создатели GIMP, Спенсер Кимбалл и Питер Маттис, изначально использовали для интерфейса библиотеку Motif, которая была проприетарной и требовала лицензионных отчислений. Чтобы сделать GIMP полностью свободным программным обеспечением, было принято решение написать собственную библиотеку виджетов. Первая версия, GTK+ 1.0, была выпущена 14 апреля 1998 года. Название «GTK+» (с плюсом) было выбрано для обозначения объектно-ориентированного расширения оригинального набора инструментов.

Версия 2.x

Выпуск GTK+ 2.0 в марте 2002 года стал значительным шагом вперёд. Основные нововведения включали:

  • Поддержку тем оформления, что позволило изменять внешний вид приложений без перекомпиляции.
  • Улучшенную поддержку Unicode и интернационализации.
  • Новый движок рендеринга Pango для работы с текстом.
  • Введение системы типов GObject, которая стала основой для объектно-ориентированного программирования в экосистеме GTK.

GTK+ 2.x на протяжении многих лет была стандартной библиотекой для GNOME (среда рабочего стола) и множества других приложений Linux. Последний минорный релиз в этой линейке, GTK+ 2.24, вышел в 2011 году.

Версия 3.x

GTK+ 3.0 была выпущена в феврале 2011 года. Ключевые изменения:

  • Полная поддержка сглаживания и векторной графики через Cairo.
  • Новый API для работы с CSS-подобными стилями, что упростило создание тем.
  • Улучшенная поддержка мультитач и жестов.
  • Переход на OpenGL для аппаратного ускорения рендеринга (через GDK).

Несмотря на значительные улучшения, переход на GTK+ 3 был болезненным для многих проектов из-за нарушения обратной совместимости с версией 2.x. В 2019 году название было официально изменено с GTK+ на GTK.

Версия 4.x

GTK 4.0 была анонсирована в декабре 2020 года. Эта версия стала результатом многолетней работы по упрощению и модернизации библиотеки:

  • Удаление устаревших API и виджетов.
  • Введение новой системы раскладки виджетов на основе CSS flexbox и grid.
  • Полная интеграция с Vulkan и OpenGL для рендеринга.
  • Переход на использование GSK (GTK Scene Kit) — нового слоя для рендеринга сцены.
  • Улучшенная поддержка анимации и переходов.

GTK 4 является текущей стабильной версией, однако многие приложения, включая GIMP и Inkscape, продолжают использовать GTK 3 из-за сложности миграции.

Архитектура и компоненты

GTK построена на нескольких ключевых библиотеках, образующих стек:

GLib

Низкоуровневая библиотека, предоставляющая основные типы данных (строки, списки, хеш-таблицы), потоки, динамическую загрузку модулей, цикл обработки событий и систему управления памятью. GLib не зависит от графики и может использоваться отдельно.

GObject

Система объектно-ориентированного программирования на языке C, реализующая наследование, сигналы, свойства и интроспекцию типов. GObject является фундаментом для всех классов GTK.

Pango

Библиотека для работы с текстом, отвечающая за разметку, шрифты, поддержку сложных письменностей (арабский, иврит, индийские языки) и рендеринг текста.

Cairo

Библиотека для двухмерной векторной графики, используемая для рисования виджетов, линий, фигур и текста. Обеспечивает аппаратно-независимый вывод.

GDK (GIMP Drawing Kit)

Промежуточный слой, абстрагирующий взаимодействие с оконной системой (X11, Wayland, Windows GDI, macOS Quartz). GDK управляет окнами, событиями ввода (клавиатура, мышь, сенсор) и буферами обмена.

GSK (GTK Scene Kit)

Введён в GTK 4. Отвечает за компоновку и рендеринг сцены, используя OpenGL или Vulkan для аппаратного ускорения.

Классификация виджетов

Виджеты GTK делятся на несколько категорий:

Контейнеры

Виджеты, которые содержат другие виджеты и управляют их расположением:

  • GtkBox — горизонтальное или вертикальное выравнивание.
  • GtkGrid — размещение в таблице (сетке).
  • GtkStack — переключение между несколькими страницами (вкладками).
  • GtkScrolledWindow — область с полосами прокрутки.
  • GtkNotebook — закладки (табы).
  • GtkPaned — разделитель на две изменяемые панели.

Элементы управления

Базовые интерактивные виджеты:

  • GtkButtonкнопка.
  • GtkEntry — однострочное поле ввода текста.
  • GtkTextView — многострочное поле ввода текста.
  • GtkSpinButton — поле для ввода чисел с кнопками увеличения/уменьшения.
  • GtkComboBox — выпадающий список.
  • GtkCheckButton — флажок (чекбокс).
  • GtkToggleButton — кнопка с двумя состояниями.
  • GtkSwitch — переключатель (вкл/выкл).
  • GtkScaleползунок (слайдер).
  • GtkColorButton — кнопка выбора цвета.
  • GtkFontButton — кнопка выбора шрифта.

Отображение информации

Виджеты для вывода данных:

  • GtkLabel — текстовая метка.
  • GtkImage — изображение.
  • GtkProgressBar — индикатор прогресса.
  • GtkLevelBar — индикатор уровня (например, громкости).
  • GtkInfoBar — информационная панель с сообщениями.
  • GtkTreeView — таблица или дерево (список) с данными.
  • GtkIconView — сетка иконок.

Диалоговые окна

Специализированные окна для взаимодействия с пользователем:

  • GtkDialog — базовое диалоговое окно.
  • GtkMessageDialog — окно с сообщением и кнопками (ОК, Отмена).
  • GtkFileChooserDialog — диалог выбора файла.
  • GtkFontChooserDialog — диалог выбора шрифта.
  • GtkAboutDialog — окно «О программе».

Дополнительные виджеты

  • GtkGLArea — область для отрисовки с использованием OpenGL.
  • GtkVideo — виджет для воспроизведения видео (GTK 4).
  • GtkCalendar — виджет календаря.
  • GtkDrawingArea — пустая область для произвольной отрисовки.

Применение

Среда рабочего стола GNOME

GNOME является основным потребителем GTK. Все приложения, входящие в состав GNOME (файловый менеджер Nautilus, текстовый редактор gedit, эмулятор терминала GNOME Terminal, системные настройки), написаны с использованием GTK.

Популярные приложения

Множество известных программ используют GTK:

  • GIMPрастровый графический редактор, давший имя библиотеке.
  • Inkscape — векторный графический редактор.
  • LibreOfficeофисный пакет (использует собственную обёртку VCL, но по умолчанию применяет GTK в Linux).
  • Thunderbird — почтовый клиент (использует GTK на Linux).
  • Firefoxвеб-браузер (использует GTK на Linux для отрисовки интерфейса).
  • Pidgin — клиент для мгновенного обмена сообщениями.
  • Audacity — аудиоредактор.
  • Wireshark — анализатор сетевого трафика.

Встраиваемые системы и мобильные платформы

Благодаря модульности и низкому потреблению ресурсов, GTK используется в некоторых встраиваемых системах. Существует проект Purism Librem 5, смартфон на базе Linux, интерфейс которого (Phosh) построен на GTK.

Преимущества и недостатки

Преимущества

  • Свобода и открытость: GTK распространяется по лицензии LGPL (GNU Lesser General Public License), что позволяет использовать её как в свободных, так и в проприетарных приложениях.
  • Кроссплатформенность: Официальная поддержка Linux (X11/Wayland), Windows и macOS.
  • Интернационализация: Встроенная поддержка Unicode, двунаправленного письма и сложных шрифтов через Pango.
  • Темы оформления: Гибкая система стилизации через CSS, что позволяет легко адаптировать внешний вид под разные окружения.
  • Стабильность API: В рамках одной мажорной версии (например, 3.x) API сохраняет обратную совместимость.
  • Инструменты разработки: Наличие Glade (визуальный редактор интерфейсов) и встроенной поддержки интроспекции для языков-привязок.

Недостатки

  • Сложность миграции: Переход между мажорными версиями (2→3, 3→4) требует значительных усилий по переписыванию кода, что замедляет внедрение новых версий.
  • Размер и зависимости: GTK 4 имеет большое количество зависимостей (Cairo, Pango, GdkPixbuf, Mesa), что может быть проблемой для минималистичных систем.
  • Производительность: В некоторых сценариях GTK может быть менее производительной, чем Qt или нативные библиотеки Windows/macOS, особенно при большом количестве виджетов.
  • Отсутствие нативной интеграции: На Windows и macOS приложения GTK выглядят не так органично, как нативные, хотя темы оформления частично решают эту проблему.
  • Сложность изучения: GObject и система сигналов имеют крутую кривую обучения для новичков по сравнению с более современными фреймворками.

Языки программирования

Хотя GTK написана на C, она имеет официальные и неофициальные привязки (bindings) для многих языков:

  • C — родной язык.
  • C++ — gtkmm.
  • Python — PyGObject (наиболее популярная привязка).
  • JavaScript — GJS (используется в GNOME Shell).
  • Vala — язык, изначально разработанный для работы с GObject и GTK.
  • Rust — gtk-rs (официальные привязки).
  • Ruby — ruby-gtk.
  • Perl — Gtk2-Perl.
  • Haskell — gtk2hs.
  • Java — java-gnome (устаревшая).

Интересные факты

  • Изначально GTK была написана как часть GIMP, но быстро стала самостоятельным проектом.
  • До версии 2.0 GTK использовала Motif-подобный API, который был полностью переработан.
  • В GTK 4 была добавлена поддержка глагольных жестов (например, смахивание), что делает её пригодной для сенсорных интерфейсов.
  • Разработка GTK финансируется в основном компанией Red Hat (часть IBM) и сообществом GNOME.
  • Существует проект «GTK for Windows», который предоставляет сборки библиотеки для Windows, однако поддержка этой платформы всегда была вторичной по отношению к Linux.

Источники

  1. Официальная документация GTK (GNOME Developer Center).
  2. Krause, A. (2007). Foundations of GTK+ Development. Apress.
  3. Logan, S. (2002). GTK+ Programming in C. Prentice Hall.
  4. Репозиторий исходного кода GTK на GitLab (GNOME).
  5. История проекта GIMP и GTK из архива разработчиков.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →