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.
Источники
- Официальная документация GTK (GNOME Developer Center).
- Krause, A. (2007). Foundations of GTK+ Development. Apress.
- Logan, S. (2002). GTK+ Programming in C. Prentice Hall.
- Репозиторий исходного кода GTK на GitLab (GNOME).
- История проекта GIMP и GTK из архива разработчиков.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →