Основы программирования в Linux - Мэтью Нейл
- Дата:08.09.2024
- Категория: Компьютеры и Интернет / Интернет
- Название: Основы программирования в Linux
- Автор: Мэтью Нейл
- Просмотров:0
- Комментариев:0
Шрифт:
Интервал:
Закладка:
Введение в GTK+
Теперь, когда вы познакомились с системой X Window System, самое время рассмотреть комплект инструментальных средств GTK+ Toolkit. GTK+ появился на свет как часть популярного графического редактора GNU Image Manipulation Program (GIMP), от которого он и унаследовал свое имя (The Gimp ToolKit). Очевидно, что программисты GIMP всерьез предвидели превращение GTK+ в самостоятельный проект, поскольку он вырос и стал одним из самых мощных и популярных комплектов инструментов. Домашнюю страницу проекта GTK+ можно найти по адресу http://www.gtk.org.
ПримечаниеВ итоге, GTK+ — это библиотека, которая существенно упрощает создание графических интерфейсов пользователей (Graphical User Interface, GUI), предоставляя набор готовых компонентов, именуемых виджетами, которые вы соединяете вместе с помощью легких в использовании вызовов функций, включенных в логическую структуру вашего приложения.
Несмотря на то, что GTK+ — это проект GNU, как и GIMP, он выпущен на условиях более либеральной лицензии (Lesser General Public License, Стандартная общественная лицензия ограниченного применения GNU), которая освобождает программное обеспечение (включая патентованное программное обеспечение с закрытым программным кодом), написанное с использованием GTK+, от уплаты лицензионных вознаграждений или авторских гонораров, а также других ограничений. Свобода, предлагаемая лицензией GTK+, отличает этот комплект инструментов от его конкурента Qt (который будет обсуждаться в следующей главе), чья лицензия GPL запрещает разработку коммерческого программного обеспечения с использованием Qt (в этом случае вы должны купить коммерческую лицензию для Qt).
Комплект GTK+ целиком написан на языке С и большая часть программного обеспечения GTK+ также написана на С. К счастью, существует ряд привязок к языкам (language binding), позволяющих применять GTK+ в предпочитаемом вами языке программирования, будь то С++, Python, PHP, Ruby, Perl, C# или Java.
Комплект GTK+ сформирован как надстройка для ряда других библиотек, К ним относятся следующие:
□ GLib — предоставляет низкоуровневые структуры данных, типы, поддержку потоков, циклов событий и динамической загрузки;
□ GObject — реализует объектно-ориентированную систему на языке С, не требующую применения языка С++;
□ Pango — поддерживает визуализацию и форматирование текста;
□ ATK — помогает создавать приложения с доступом и позволяет пользователям запускать ваши приложения с помощью средств чтения экрана и других средств доступа;
□ GDK (GIMP Drawing Kit) — обрабатывает визуализацию низкоуровневой графики поверх библиотеки Xlib;
□ GdkPixbuf — помогает манипулировать изображениями в программах GTK+;
□ Xlib — предоставляет низкоуровневую графику в системах Linux и UNIX.
Система типов GLib
Если вы когда-нибудь просматривали программный код GTK+, то могли удивиться, увидев множество типов данных языка С с префиксом g, например, gint, gchar, gshort, а также незнакомые типы gint32 и gpointer. Дело в том, что комплект GTK+ основан на библиотеках переносимости языка С (portability libraries), названных GLib и GObject, которые определяют эти типы для того, чтобы способствовать межплатформным разработкам.
GLib и GObject помогают межплатформным разработкам, обеспечивая стандартный набор типов данных замещения, функций и макросов для поддержки управления памятью и общих задач. Эти типы, функции и макросы означают, что, как программисты GTK+, мы можем быть уверены в том, что наш программный код надежно переносится на другие платформы и архитектуры.
В библиотеке Glib также определено несколько очень удобных констант:
<b>#include <glib/gmacros.h></b>
<b>#define FALSE 0</b>
<b>#define TRUE !FALSE</b>
Дополнительные типы данных — это типы, служащие заменой для стандартных типов данных C (из соображений совместимости и читабельности) и гарантирующие одинаковый размер в байтах на. всех платформах:
□ gint, guint, gchar, guchar, glong, gulong, gfloat и gdouble — просто замены для стандартных типов С для совместимости;
□ gpointer — синоним типа (void*);
□ gboolean — полезен для представления логических значений и служит оболочкой для int;
□ gint8, guint8, gint16, guint16, gint32 и guint32 — знаковые и беззнаковые типы с гарантированным размером в байтах.
Удобно то, что применение библиотек GLib и GObject почти прозрачно. Glib широко используется в GTK+, поэтому если у вас есть работающая установка GTK+, то вы обнаружите, что библиотека Glib уже установлена. Как вы увидите позже в этой главе, при программировании с помощью комплекта GTK+ вам даже не придется явно включать заголовочный файл glib.h.
Система объектов GTK+
Все, у кого уже есть опыт программирования GUI, возможно, поймут наше утверждение о строгой приверженности библиотек GUI концепции объектно-ориентированного программирования (ООП), настолько строгой, что все современные комплекты инструментов, включая GTK+, написаны в стиле объектно-ориентированного программирования.
Несмотря на то, что комплект инструментов GTK+ написан на чистом С, он поддерживает объекты и ООП благодаря библиотеке GObject. Эта библиотека поддерживает наследование объектов и полиморфизм с помощью макросов.
Давайте рассмотрим образец наследования и полиморфизма на примере иерархии объектов GtkWindow, взятой из документации GTK+ API.
GObject
+---GInitiallyUnowned
+----GtkObject
+----GtkWidget
+----GtkContainer
+----GtkBin
+----GtkWindow
Этот список объектов говорит о том, что объект GtkWindow — потомок GtkBin, и, следовательно, любую функцию, которую вы вызываете с объектом GtkBin, вы можете вызвать и с объектом GtkWindow. Точно так же объект GtkWindow наследует из объекта GtkContainer, который в свою очередь наследует из объекта GtkWidget.
Для удобства все функции создания виджетов возвращают тип GtkWidget. Например,
- Вопросы истории: UNIX, Linux, BSD и другие - Федорчук Алексей Викторович "alv" - Прочая околокомпьтерная литература
- Linux Mint и его Cinnamon. Очерки применителя - Алексей Федорчук - Программное обеспечение
- Язык программирования C++. Пятое издание - Стенли Липпман - Программирование
- Аквариум. (Новое издание, исправленное и переработанное) - Виктор Суворов (Резун) - Шпионский детектив
- Интерфейс: новые направления в проектировании компьютерных систем - Джефф Раскин - Техническая литература