VOOZH about

URL: https://ru.wikipedia.org/wiki/Xlib

⇱ Xlib — Википедия


Перейти к содержанию
Материал из Википедии — свободной энциклопедии
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 17 августа 2018 года; проверки требуют 3 правки.

Xlib (X library, рус. библиотека «икс») — библиотека функций клиента системы X Window, написанная на языке Си.

Содержит функции для взаимодействия с т. н. X-сервером. Библиотека позволяет использовать более высокий уровень абстракции, без знания деталей работы основного протокола системы X Window.

Некоторые пользовательские приложения используют Xlib напрямую (например, Opera), другие используют специальные инструментарии «виджетов» - «надстройки» над базовой библиотекой Xlib.

👁 Image
Xlib и другие библиотеки её использующие

Библиотека Xlib появилась около 1985 года и на настоящее время используется как основа и как основной графический интерфейс пользователя во многих Юникс-подобных операционных системах.

Библиотека XCB - попытка разработки замены Xlib.

Функции XLib

[править | править код]

Функции XLib могут быть сгруппированы в несколько категорий:

  1. Операции управления соединением с X сервером, такие как XOpenDisplay, XCloseDisplay
  2. Запросы X серверу, такие как XCreateWindow, XCreateSimpleWindow, XCreateGC, XCreateColomap
  3. Операции клиентской части, такие как управления событиями: XNextEvent, или операции с локальными данными XCreateImage.

Пример программы

[править | править код]

Следующий пример программы устанавливает соединение с X сервером и выводит на экран окно с приветствием:

/*
 Компилируется след. строкой: cc test.c -o test -lX11
 */

#include<X11/Xlib.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>

externinterrno;

intmain(void){
Display*d;
Windoww;
XEvente;
constchar*msg="Hello, World!";
ints;

/* Соединиться с X сервером, если X сервер на удаленной машине
 * следует разрешить на машине, где запущен X Server 
 * удаленные соединения командой xhost+ (см. man xhost)
 */
if((d=XOpenDisplay(getenv("DISPLAY")))==NULL){
printf("Can't connect X server:%s\n",strerror(errno));
exit(1);
}

s=XDefaultScreen(d);

/* Создать окно */
w=XCreateSimpleWindow(d,RootWindow(d,s),10,10,200,200,1,
XBlackPixel(d,s),XWhitePixel(d,s));

/* На какие события будем реагировать */
XSelectInput(d,w,ExposureMask|KeyPressMask);

/* Вывести окно на экран */
XMapWindow(d,w);

/* Бесконечный цикл обработки событий */
while(1){
XNextEvent(d,&e);

/* Перерисовать окно */
if(e.type==Expose){
XFillRectangle(d,w,DefaultGC(d,s),20,20,10,10);
XDrawString(d,w,DefaultGC(d,s),50,50,msg,strlen(msg));
}
/* При нажатии кнопки-выход */
if(e.type==KeyPress)
break;
}

/* Закрыть соединение с X сервером */
XCloseDisplay(d);

return0;
}

Клиент (программа) создает соединение с X сервером функцией XOpenDisplay, в которую передается указатель на DISPLAY, определенный через переменную среды исполнения. В UNIX это можно сделать командой export DISPLAY=":0.0". В качестве переменной DISPLAY можно указать и удаленную машину с запущенным X сервером. Функция (макрос) DefaultScreen выбирает текущий экран (в X Window может быть несколько экранов), XCreateSimpleWindow создает окно, а XSelectInput определяет события, на которые окно должно реагировать. XMapWindow выводит окно на экран, а XNextEvent выбирает из очереди событие, которое выше было определено. При событии Expose в окне рисуется прямоугольник и выводится строка "Hello World!". При нажатии клавиши на клавиатуре программа завершает работу.