Xlib (X library, рус. библиотека «икс») — библиотека функций клиента системы X Window, написанная на языке Си.
Содержит функции для взаимодействия с т. н. X-сервером. Библиотека позволяет использовать более высокий уровень абстракции, без знания деталей работы основного протокола системы X Window.
Некоторые пользовательские приложения используют Xlib напрямую (например, Opera), другие используют специальные инструментарии «виджетов» - «надстройки» над базовой библиотекой Xlib.
- Встроенные средства (Xt)
- Набор виджетов Athena (Xaw)
- Motif
- GTK+
- Qt (версия для X11)
- wxWidgets
- SDL
- SFML
Библиотека Xlib появилась около 1985 года и на настоящее время используется как основа и как основной графический интерфейс пользователя во многих Юникс-подобных операционных системах.
Библиотека XCB - попытка разработки замены Xlib.
Функции XLib
[править | править код]Функции XLib могут быть сгруппированы в несколько категорий:
- Операции управления соединением с X сервером, такие как
XOpenDisplay,XCloseDisplay - Запросы X серверу, такие как
XCreateWindow,XCreateSimpleWindow,XCreateGC,XCreateColomap - Операции клиентской части, такие как управления событиями:
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!". При нажатии клавиши на клавиатуре программа завершает работу.
Ссылки
[править | править код]- (англ.) Руководство по программированию с использованием библиотеки Xlib
- (англ.) Список функций библиотеки Xlib
- (англ.) Kenton Lee's pages on X Window and Motif Архивная копия от 20 мая 2013 на Wayback Machine
- (англ.) Учебник по Xlib
- (англ.) Подробный обучающий курс Xlib
- (англ.) Использование Xlib для создания скринсейвера
- (рус.) Xlib - интерфейс с X Window на языке C
- (рус.) Программирование с Xlib на C++ (недоступная ссылка с 14-05-2013 [4714 дней] — история)
- (рус.) Программирование в среде X Window на основе библиотеки Xlib
