КТвП    

  Задание на практику ~ 
  Доступ к осциллографу ~ 
  Проверка доступа ~ 
  Язык SCPI ~ 
  Справка по gnuplot ~ 
  Справка по GD ~ 
  Справка по Xlib ~ 
  Справка по SDL ~ 
/Студентам/КТвП/Справка по Xlib

:: in progress...

Использование библиотеки Xlib

Введение

Полное руководство по программированию с использованием библиотеки Xlib можно посмотреть, например, здесь.

X Window - это стандартная для UNIX-подобных ОС оконная система, основанная на кратко описанных ниже концепциях.

Во-первых, в X Window существуют понятия "дисплей" (display) и "экран" (screen), при этом под "дисплеем" понимается компьютер, у которого есть устройства ввода в виде клавиатуры и мыши, а также один или БОЛЕЕ "экранов". Если экранов несколько, то им могут соответствовать как реальные физические устройства, так и виртуальные экраны.

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

В третьих, как правило, в состав X Window входит особая программа, называемая "менеджер окон" (window manager). Именно эта программа определяет внешний вид окон, в которых "рисуют" другие программы. Таким образом, X Window не подразумевает какого-то конкретного внешнего вида окон (например, цвет заголовка окна или вид/расположение кнопки "свернуть окно"). Это определяется оконным менеджером. Стандартный дистрибутив X Window включает в себя простой оконный менеджер twm. Другие дистрибутивы могут содержать иные менеджеры окон.

В четвертых, X Window основана на концепции "программы, приводимой в действие событиями" (event-driven programm). Это означает, что не программа диктует пользователю, что надо делать в конкретный момент (например, выбрать из меню какой-то пункт), а наоборот, пользователь практически в любой момент может задавать действия, которые должна выполнить программа. Главный цикл программы для X Window, как правило, получает информацию о событиях от X-сервера и обрабатывает их. К событиям, помимо действий пользователя (нажатие клавиш клавиатуры, кнопок мыши, перемещение мыши), относится также взаимодействие с другими программами (например, в результате свертывания окна какой-то программы, оказалась видна ранее закрытая часть окна, что требует реакции в виде перерисовки этой части окна).

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

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

  1. Управление цветом
  2. Работа с курсорами
  3. Управление данными
  4. Связь с X-сервером и получение информации о нем
  5. Рисование
  6. Работа с событиями
  7. Средства для обработки ошибок
  8. Работа со шрифтами
  9. Межклиентское взаимодействие
  10. Работа с текстом
  11. Управление окнами

и др.

Концепции X

В протоколе X предусмотрено 4 типа сообщений (пакетов):

  1. запрос
  2. ответ
  3. событие
  4. ошибка

Пакет типа "запрос" посылается от клиента к серверу. В нем может содержаться, к примеру, указание нарисовать линию или просьба сообщить текущие размеры окна.

Пакет типа "ответ" посылается от сервера к клиенту в ответ на некоторые запросы. Так, просьба сообщить текущие размеры окна подразумевает отправку ответа, а запрос на рисование линии (и прочие подобные запросы) - нет.

Пакет типа "событие" посылается от сервера к клиенту (асинхронно, без предварительного запроса). Содержимое такого пакета зависит от типа события; например, для события "нажата кнопка мыши" нужно обозначить, какая именно кнопка нажата и где при этом находился курсор.

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

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

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

Помимо буферизации, для увеличения производительности X Window эксплуатирует концепцию "ресурсов". Примеры ресурсов: окно, шрифт, курсор, графический контекст. Каждый ресурс описывается на стороне сервера той или иной структурой, а клиенту известен только идентификатор этого ресурса, который и передаются всякий раз в сторону сервера, когда нужно произвести те или иные манипуляции с этим ресурсом.

Каждое окно в X Window имеет несколько свойств. Каждое свойство определяется текстовым названием и т.наз. "атомом" - идентификатором свойства. Одно из важнейших применений механизма свойств - взаимодействие с менеджером окон: приложение задает СТАНДАРТНЫЕ свойства своего окна, используемые сервером (например, желательный диапазон размеров).

Характеристики окна....

Простейшая программа программа для X Window

Программа должна выполнить следующие действия:

  1. Установить соедининение клиента с X сервером при помощи функции XOpenDisplay(), в случае неудачи выход с сообщением об ошибке.
  2. Получить информацию о физическом экране, это можно использовать, чтобы вычислить желаемый размер окна.
  3. Создать окно с помощью функции XCreateSimpleWindow().
  4. Установить свойства для менеджера окна.
  5. Выбрать тип события, который будет обрабатываться XSelectInput().
  6. Создать графический контекст, чтобы управлять запросами на прорисовку.
  7. Показать окно с помощью функции XMapWindow().
  8. Бесконечный цикл для приёма событий
  9. Создать запрос на перерисовку Expose, также здесь описываются действия программы по умолчанию.
  10. Добавить другие события, KeyPress, ButtonPress, или другие.

Для компиляции вышеприведённого исходного текста используйте следующую команду:

gcc -Wall -o xw-ex xw-ex.c -L/usr/X11R6/lib -lX11

Дата последней модификации: 2011-11-10


/Студентам/КТвП/Справка по Xlib

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

Valid HTML 4.0 Strict Valid CSS!