# Основные технологии

## Графические интерфейсы

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

Платформа GNOME использует разветвлённую графическую технологию пользовательского интерфейса: начиная от стандартных элементах управления до API для рисования высококачественной графики. Использование графических технологий в GNOME позволяет создавать целостные, интуитивно понятные и эстетически приятные приложения.

### Поуровневый обзор графических библиотек

### GTK+

GTK+ — это основная библиотека, используемая для построения интерфейсов пользователя. Она предоставляет все графические элементы управления пользователя или виджеты, используемые в графических приложениях. Современные объектно-ориентированные программные интерфейсы позволяют конструировать привлекательные и естественные интерфейсы для пользователя без необходимости иметь дело с низкоуровневым программированием и взаимодействия устройств.

В дополнение к стандартным элементам управления: кнопок, флажков, текстовых полей, GTK+ также содержит мощный API «Модель-Внешний вид-Контроллер» (MVC) для древовидных полей, многострочных редакторов, действий меню и панелей.

Элементы управления в GTK+ располагаются в окне в соответствии с моделью упаковки в коробку. Программист указывает только то, как упаковать виджеты относительно друг друга в рамках контейнера, а не абсолютные координаты. GTK+ гарантирует, что размер окна будет соответствовать его содержимому и при необходимости будет автоматически изменён.

Так как GTK+ предлагает гибкий API, то разработать новые виджеты достаточно легко. Большое количество библиотек третьих сторон обеспечивает дополнительные элементы управления, и многие разработчики создают свои виджеты для конкретных целей.

GTK+ обрабатывает множество сложных деталей пользовательского интерфейса и взаимодействия с пользователем и предоставляет простой и мощный API, позволяющий сосредоточится на основных задачах приложения. Приложения, использующие GTK+ автоматически наследуют установленные пользователем тему и шрифты, а также будет корректно работать с технологиями специальных возможностей, их поведение будет привычным для пользователей.

Для получения более полной информации о GTK+ обратитесь к GTK+ Reference Manual или посетите веб-сайт GTK+.

### Libglade

Заметим, что Libglade устарел и в новом коде нужно использовать GtkBuilder.

Libglade — это библиотека для динамического построения интерфейса пользователя из описаний на языке XML. Для конструирования интерфейса пользователя можно использовать дизайнер интерфейсов, например Glade, и затем импортировать описание интерфейса в приложение. Что позволяет легко конструировать сложное взаимное расположение элементов и подгонять детали расположения.

Libglade позволяет программисту сконцентрироваться на логике приложения, оставляя полноценное построение интерфейса. Дизайнеры графического интерфейса также могут легко создавать интерфейсы без знаний того, как работает программа.

За дополнительной информацией о Libglade обратитесь к Libglade Reference Manual.

### Pango

Pango — ключевая библиотека обработки текста и шрифтов в платформе GNOME. Она отвечает за расположение и прорисовку текста и используется в GTK+. Pango используется для решения различных задач работы со шрифтами и прорисовки. На большинстве систем GNOME Pango использует библиотеки FreeType, fontconfig и Cairo для доступа к шрифтам и прорисовки текста. На других системах Pango использует специфичные шрифтовые механизмы: Uniscribe на Microsoft Windows и ATSUI на MacOS.

Pango широко поддерживает различные системы письменности, используемые во всем мире. Многие системы письменности имеют сложные правила расположения символов и составления знаков. С помощью Pango можно писать и корректно отображать почти все языки, что позволяет пользователю в любом месте просматривать текст на родном языке. Поддержка различных систем письменности осуществляется автоматически и разработчику не нужно писать специальный код для поддержки разных языков.

#### Многоязыковой вывод с помощью Pango

Снимок экрана текстового редактора gedit, который отражает фразы на разных языках и системах письменности.

Pango поддерживает стилизацию текста, обычно используемую в документах и интерфейсах, включая курсив, высоту шрифта и подчёркивание. Pango использует простой XML-подобный словарь, называемый PangoMarkup, который позволяет устанавливать размер шрифта, цвет, стиль и другие атрибуты текста. С помощью PangoMarkup можно описать внутренние стили без ручного редактирования блоков текста. PangoMarkup можно использовать напрямую из GTK+, благодаря чему легко стилизовать текст в графических интерфейсах.

При необходимости расположить текст непосредственно на экране или другом устройстве вывода следует использовать библиотеку Pango напрямую, при этом текст будет выводиться согласованно с библиотекой GTK+ и остальной частью платформы GNOME. Что поможет создать переносимый код и, что ещё более важно, гарантирует, что приложение сможет корректно отобразить текст на сотнях различных языков.

За дополнительной информации о Pango обратитесь к Справочному руководству Pango.

### GDK

GDK — это низкоуровневая библиотека, используемая GTK+ для работы с графикой и устройствами ввода. Хотя непосредственное использование библиотеки GDK в коде довольно редко, она содержит весь функционал необходимый для прорисовки объектов и текста на экране, а также взаимодействия с пользователем с помощью различных устройств ввода. GDK работает на разных платформах, включая the X Window System, Microsoft Windows, DirectFB и Quartz. Независимо от того на какой платформе работает GDK, он имеет стабильный программный интерфейс, позволяя GTK+ и приложениям, написанным с использованием GTK+, без модификации работать на разных платформах.

GDK предоставляет графический контекст и графические примитивы, удобные для прорисовки простых объектов и вывода изображений на экран. Так как Cairo предоставляет систему отрисовки с большими возможностями, GDK содержит перехватчики для использования контекста Cairo внутри GDK.

GDK позволяет использовать события клавиатуры, мыши и других устройств ввода, вместо использования высокоуровневых сигналов GTK+. Также GDK предоставляет доступ к низкоуровневым процедурам перетаскивания и работы с данными системного буфера обмена. При реализации собственных элементов управления, возможно, понадобится этот функционал для реализации корректного взаимодействия с элементами интерфейса.

GDK содержит и другой функционал, необходимый для реализации полноценного графического пакета, например GTK+. Так как GDK выступает в роли уровня абстракции платформы, позволяя GTK+ работать в различных средах, он обеспечивает API для всего системного функционала, необходимого GTK+, например получение информации о множественных дисплеях, разрешении экрана и глубине цвета, цветовых картах и курсорах.

Необходимость в использовании GDK возникает, если есть потребность в низкоуровневом доступе к слою, находящемуся под оконной системой, включая низкоуровневый доступ к событиям, окнам и буферу обмена. Использование GDK для таких задач гарантирует переносимость кода и интеграцию с остальной частью кода, использующего GTK+. В основном, не следует использовать примитивные процедуры отрисовки из GDK, вместо этого следует использовать расширенный функционал Cairo.

Для получения более полной информации посетите веб-сайт gtkmm.

### Cairo

Cairo — это библиотека двумерной графики с разветвлённым API для отрисовки векторной графики, составления изображений и отображения сглаженного текста. Cairo поддерживает множество систем вывода, включая X Window System, Microsoft Windows и буферы изображений, позволяя составлять переносимый код для отрисовки графики на различных устройствах вывода.

Модель прорисовки Cairo похожа на модели PostScript и PDF. API Cairo работает с такими графическими операциями, как создание и заполнение кубических кривых Безье, создание изображений и афинные преобразования. Эти векторные операция позволяют выводить качественную сглаженную графику без работы с графикой на уровне пикселов в коде приложения.

Богатая модель отрисовки Cairo позволяет выводить качественную графику на разные устройства вывода. Можно использовать одинаковый API как для вывода прекрасной графики и текста на экран, так и для создания изображений или создания вывода, пригодного для печати.

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

За дополнительной информацией о Cairo обратитесь к руководству Cairo: A Vector Graphics Library.

## Виртуальная файловая система

GIO — часть библиотеки GLib, ключевая библиотека, используемая для операций с файлами и каталогами в приложениях GNOME. GIO реализует уровень абстракции унифицированной файловой системы с возможностью подключения дополнительных модулей. В GNOME библиотека GVFS является внутренним компонентом GIO, реализующим работу с различными сетевыми и локальными протоколами. С помощью GIO и GVFS приложения могут работать с файлами на удалённых машинах так же легко, как с локальными.

GIO может предоставить расширенную информацию о файлах и каталогах, включая тип MIME, значок файла и какое приложение можно использовать для открытия файла. Так как библиотека GVFS использует стандарты freedesktop.org для определения типов файлов и их связей, то она работает корректно в различных свободных средах рабочего стола, помогая разработчикам создавать приложения, работающие в различных средах.

GIO используется повсюду в среде рабочего стола GNOME. Файловый менеджер Nautilus использует GIO для отображения файлов и каталогов на локальных и удалённых системах. С точки зрения пользователя сетевые серверы выглядят как локальные папки, и он может перетаскивать файлы между ними, просматривать свойства файлов и открывать их с помощью приложений. Использование GIO позволяет приложению открывать все файлы, к которым пользователь может получить доступ на своём рабочем столе.

Для получения более полной информации посетите веб-сайт gtkmm.

В предыдущих версиях GNOME для доступа к фалам и папкам использовалась библиотека GnomeVFS, которая обеспечивает похожий функционал, включая прозрачный доступ к удалённым папкам, но имеет множество ограничений, которые были устранены в GIO. Библиотека GnomeVFS устарела и не должна использовать в новом коде, хотя она и будет поддерживаться на протяжении всего жизненного цикла GNOME 2. За дополнительной информацией обратитесь к GnomeVFS - Filesystem Abstraction Library.

## Конфигурирование и блокирование настроек

GConf — это система для хранения и получения данных о конфигурации GNOME. GConf состоит из двух частей: клиентской библиотеки для доступа к установкам и службы, которая отвечает за хранение и предоставление этих параметров. Использование службы позволяет GConf использовать различные внутренние интерфейсы для хранение параметров, проверки ввода и обеспечивать одновременный доступ разных приложений.

Параметры, находящиеся в GConf, сохраняются и возвращаются с использованием уникального ключа или строки-идентификатора. Ключи используют простое иерархическое пространство имен для избежания конфликта между приложениями и средой. Вы можете предоставить файл схемы с описанием ваших ключей конфигурации. Это позволяет GConf проверять правильность ввода пользовательских данных и отображать локализованную документацию о ключах. Кроме того, это помогает системным администраторам, которые могут устанавливать несколько параметров за раз, без необходимости перемещаться между диалоговыми окнами.

GConf может искать настройки из различных каталогов настроек, обычно, из различных мест в файловой системе. При корректно настроенных системных источниках, GConf позволяет системным администраторам устанавливать настройки по умолчанию и принудительные настройки. Такие инструменты, как Редактор конфигурации GNOME и Sabayon позволяют легко развернуть полностью настроенную систему с помощью GConf.

Пользовательская библиотека GConf поддерживает уведомления об изменениях настроек, что позволяет легко обеспечить мгновенную реакцию приложения, независимо от того сделаны ли изменения внутри приложения или с помощью другого инструмента. Установка значения ключа уведомит все заинтересованные приложения, что позволяет без особых усилий работать с настройками всего окружения рабочего стола или нескольких приложений одновременно.

GConf позволяет легко заблокировать системные настройки для предотвращения их изменения пользователями путем указания ключей только для чтения. Дополнительно GNOME поддерживает ряд высокоуровневых ключей, позволяющих заблокировать такие действия как сохранение на диск и изменение расположения панели.Такие инструменты какPessulus позволяют администраторам легко находить и блокировать важные ключи.

Вам следует использовать GConf для хранения всех параметров приложения пользователя. Использование GConf упрощает одновременный доступ к параметрами и даёт доступ к параметрам для системных администраторов, а также для инструментов конфигурирования и резервирования.

Для получения более полной информации прочтите Справочное руководство по GConf.

## Интернационализация

Платформа разработки и рабочий стол GNOME полностью поддерживают интернационализацию и локализацию приложений. Интернационализация — это гарантия того, что приложение может быть локализовано, включая возможность перевода всех литералов, корректно используя числовые и форматные строки и выполнения всех подстроек для различных особенностей представления времени, даты, единиц измерения и форматирования.

GNOME использует стандартный механизм gettext и связанные с ним инструменты для выполнения локализации. Поддержка локализации с помощью gettext встроена в каждый компонент платформы GNOME. Любой исходный код можно просканировать на наличие специально помеченных литералов с помощью автоматизированных инструментов. Эти строки затем помещаются в файлы PO, что позволяет переводчикам отслеживать свои переводы. С помощью gettext можно легко и эффективно получить доступ из каталогов переводов, установленных с приложением, к переведённым версиям всех видимых пользователем строк текста в приложении.

Такие домены каталоги могут быть созданы с помощью файлов PO, которые используются переводчиками для отслеживания изменения строк и обновления их перевода. GNOME поставляется с intltool — инструментом управления переводами в фалах PO. С его помощью переводчики могут использовать файлы PO для перевода не только строк текста в приложениях, но и других используемых типов файлов, например файлов схем GConf, файлов содержимого рабочего стола и XML файлов.

GNOME также предоставляет утилиту xml2po, которая является частью пакета gnome-doc-utils package. С её помощью переводчики могут использовать файлы PO для перевода документации, составленной в различных форматах XML, включая XHTML и DocBook.

Интернационализация включает в себя не только возможность перевода текстовых строк, GNOME поддерживает разработку приложений на каждом этапе. GTK+ автоматически подстраивает свое представление для языков, читаемых справа налево, а Pango полностью поддерживает двунаправленный текст и различные системы письменности. GTK+ поддерживает разные методы ввода, позволяя эффективно использовать клавиатуры для различных языков. Вся платформа GNOME использует кодировку Unicode UTF-8, обеспечивая доступ к символам и системам письменности всего мира.

### Gnumeric на разных языках

Снимок экрана приложения Gnumeric, запущенного на иврите, японском и сербском языках.

Интернационализация приложения упрощает его доступность для многих пользователей во всём мире. Программисты должны обеспечить корректную интернационализацию приложения перед тем, как оно может быть полностью локализовано, в то время как профессиональные переводчики обеспечат перевод на все языки.

Дополнительную информацию о интернационализации в GNOME обратитесь к Руководству по локализации приложений GNOME.

## Специальные возможности

Специальные возможности — это возможность использования приложения людьми с ограниченными возможностями. Ограниченные возможности проявляются во многих формах: зрительные, двигательные, слуховые и языковые и другие ограничения. Существует множество людей с какими-либо ограничениями и разработка приложения доступного для них позволяет большему количеству людей использовать приложения более эффективно.

GNOME поддерживает специальные возможности с помощью платформы ATK, которая определяет набор интерфейсов, к которым привязываются графические компоненты. Что позволяет, например, программам синтеза речи читать вслух текст интерфейса пользователя и взаимодействовать с его элементами управления. Поддержка ATK встроена в GTK+ и остальную часть платформы GNOME с использованием библиотеки GAIL, поэтому любые приложения, использующие GTK+ бесплатно получают достаточную поддержку.

Тем не менее, следует помнить о специальных возможностях при разработке приложения. Хотя интерфейсы GTK+ по умолчанию обеспечивают достаточную поддержку специальных возможностей, часто можно улучшить работу приложения с инструментами специальных возможностей, снабдив ATK дополнительной информацией. При разработке пользовательского виджета следует убедиться, что его свойства доступны ATK. Следует избегать использования звука, графики и цвета как единственных методов представления информации пользователю.

Рабочий стол GNOME поставляется с множеством инструментов специальных возможностей, помогающих пользователям с ограничениями полноценно использовать рабочий стол и приложения. Приложения, полностью реализующие ATK, будут в состоянии работать с этими инструментами, которые включают в себя: чтение текста с экрана вслух, увеличительное стекло, экранную клавиатуру и Dasher — инновационное средство ввода текста с предсказанием.

Для получения полных рекомендаций по поддержке специальных возможностей обратитесь к GNOME Accessibility for Developers. А также к ATK - Accessibility Toolkit и Справке по библиотеке GAIL.

## Аудио и видео

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

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

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

Архитектура GStreamer позволяет с помощью подключаемых модулей добавлять кодеки, декодеры и фильтры содержимого любых типов. Сторонние разработчики могут создавать подключаемые модули GStreamer, которые автоматически станут доступными другим приложениям, использующим GStreamer. Подключаемые модули могут обеспечивать поддержку дополнительных форматов или добавлять новую функциональность и эффекты.

В приложении следует использовать GStreamer если необходимо прочитать или воспроизвести мультимедиа содержимое, а также для манипуляций со звуком и видео. Использование GStreamer облегчает разработку приложений и обеспечивает хорошо протестированными элементами для множества целей.

Исчерпывающая информация по GStreamer находится по адресам: The GStreamer Application Development Manual, The GStreamer 0.10 Core Reference Manual, и the GStreamer documentation page.

## Печать

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

### Печать GNOME

Заметим, что этот раздел устарел и вместо libgnomeprint и libgnomeprintui нужно использовать GtkPrint.Функции печати, встроенные непосредственно в GTK+ начиная с версии 2.10, предоставляют межплатформенный программный интерфейс печати для всех приложений. Стабильность программного и двоичного интерфейсов гарантирует, что Gnomeprint продолжит работать и поддерживаться весь жизненный цикл GNOME 2.

Подсистема печати GNOME состоит из двух библиотек, помогающих обеспечить высококачественную печать и целостный интерфейс приложения. В основе подсистемы печати находится библиотека libgnomeprint — библиотеки для создания данных в формате PostScript для отправки на принтер. Над ней находится библиотека libgnomeprintui, которая обеспечивает стандартные элементы управления печатью для пользовательского интерфейса.

Библиотека libgnomeprint реализует графическую модель PostScript, используемую большинством принтеров. Принтеры, не поддерживающие PostScript, используются с помощью CUPS, описанного ниже. Кроме стандартной графической модели PostScript libgnomeprint также поддерживает альфа-каналы и сглаживание.

Библиотека libgnomeprintui предоставляет стандартный диалог печати, диалог просмотра печати и множество других элементов управления и функциональность, необходимые для создания интуитивного пользовательского интерфейса печати. Подсистема печати GNOME берет на себя детали поиска принтеров, постановки в очередь задач печати, а также обеспечивает экспорт в форматах PostScript и PDF непосредственно в диалоге печати.

Библиотека libgnomeprint используется для формирования данных в формате PostScript для печати. А библиотека libgnomeprintui используется для построения пользовательского интерфейса печати, даже если готовые для печати данные получаются из другого источника. Использование подсистемы печати GNOME обеспечивает целостность пользовательского интерфейса и возможностей, которые пользователи ожидают от печатающих приложений.

### CUPS

На большинстве систем GNOME CUPS (Common UNIX Printing System — общая система печати UNIX) выступает в роли низкоуровневой подсистемы печати. CUPS предоставляет современную, богатую возможностями архитектуру для поиска принтеров, доступа к параметрам принтеров, а также управление очередью заданий на печать для различных типов принтеров.

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

CUPS обеспечивает унифицированный интерфейс печати, независимо от расположения и типа принтера. Различные протоколы печати обрабатываются CUPS однообразно путём автоматического применения фильтров к содержимому, отправляемому на принтеры. Приложениям достаточно предоставить данные в формате PostScript, а CUPS автоматически конвертирует их для принтеров, не поддерживающих PostScript.

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

В большинстве случаев в приложении нет необходимости напрямую взаимодействовать с CUPS, так как с помощью подсистемы печати GNOME можно получить доступ к мощности и гибкости CUPS автоматически. Основа CUPS помогает создать больше удобств для пользователя с меньшим объемом программирования.