Глава 1. Введение

Содержание
Система X Window
Xlib, Xt и Motif
Классы виджетов и их иерархия

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

Эта книга описывает программый интерфейс приложений (API - Application Programming Interface). Это набор средств которые Motif предоставляет разработчику приложения для создания и взаимодействия с Motif для создания приложения. Эта книга не является справочником, она не пытается дать исчерпывающее описание всех деталей Motif. Она фокусирует внимание на обзоре архитектуры Motif, разъясняет концепции и соглашения, необходимые для использования его API и предоставляет некоторые примеры. Эта книга дополняет другие из набора документации на Motif:

Иитерфейс прикладных программ Motif реализован на языке C. Motif требует, чтобы приложения написанные на C согласовывались с диалектом ANSI C. Эта книга подразумевает знание ANSI C, также как и остальные справочные и учебные книги. Также возможно написание программ на других языках, включая C++, но эта книга дает объяснения и примеры только для приложений написанных на C.

Система X Window

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

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

Дисплей является абстракцией, предсавляющей устройства ввода и вывода, контролируемые одним сервером. Типично дисплей состоит из клавиатуры, устройства указания и одного или более экранов. Экран является абстракцией, представляющей одно растровое устройство вывода.

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

Клиент запрашивает сервер для создания или уничтожения окон, а окна являются ресурсами управляемые сервером. Сервер поддерживает другие ресурсы, включая следующие:

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

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

Каждый клиент запрашивает сервер посылать ему события отдельных типов происходящие в конкретных окнах. Сервер обычно сообщает о событиях произошедших в некотором окне. Например, клавиатура концептуально подключена к одному из окон, называемых окном фокуса. Когда пользователь нажмет клавишу, сервер обычно сообщает о произошедшем событии окну фокуса. Если клиент запросил сервер отправлять ему события типа \eventtype{KeyPress} происходящие в некотором окне, сервер будет отправлять клиенту событие когда пользователь нажимает клавишу пока это окно имеет фокус.

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

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