Литмир - Электронная Библиотека
Содержание  
A
A

Введение в 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 &lt;glib/gmacros.h&gt;</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
. Например,

280
{"b":"285844","o":1}