Xlib
- Медіафайли у Вікісховищі
Xlib (X library — бібліотека X) — програмна бібліотека функцій клієнта системи X Window, написана на мові Сі. Містить функції для взаємодії з так званим X-сервером. Бібліотека дозволяє використовувати вищий рівень абстракції, без знання деталей роботи основного протоколу системи X Window.
Деякі користувацькі програми використовують Xlib безпосередньо (наприклад, Opera), інші використовують спеціальні інструментарії «віджетів» — «надбудови» над базовою бібліотекою Xlib:
- Вбудовані засоби (Xt)
- Набір віджетів Athena (Xaw)
- Motif
- GTK+
- Qt (версія для X11)
- wxWidgets
Бібліотека 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> extern int errno; int main (void) { Display *d; Window w; XEvent e; char *msg = "Hello, World!"; int s; /* З'єднатися з 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 = DefaultScreen (d); /* Створити вікно */ w = XCreateSimpleWindow (d, RootWindow (d, s), 10, 10, 200, 200, 1, BlackPixel (d, s), WhitePixel (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); return 0; }
Клієнт (програма) створює з'єднання з X сервером функцією XOpenDisplay, в яку передається вказівник на DISPLAY, визначений через змінну середовища виконання. У UNIX це можна зробити командою export DISPLAY = ".0:0". Як змінну DISPLAY можна вказати і віддалену машину з запущеним X сервером. Функція (макрос) DefaultScreen вибирає поточний екран (в X Window може бути декілька екранів), XCreateSimpleWindow створює вікно, а XSelectInput визначає події, на які вікно має реагувати. XMapWindow виводить вікно на екран, а XNextEvent вибирає з черги подію, яку вище було визначено. При подію Expose у вікні малюється прямокутник і виводиться рядок "Hello World!". При натисканні клавіші на клавіатурі програма завершує роботу.
Посилання
- (англ.) Керівництво з програмування з бібліотекою Xlib
- (англ.) Список функцій бібліотеки Xlib [Архівовано 1 квітня 2021 у Wayback Machine.]
- (англ.) Kenton Lee's pages on X Window and Motif [Архівовано 20 травня 2013 у Wayback Machine.]
- (англ.) Підручник Xlib [Архівовано 16 березня 2012 у Wayback Machine.]
- (англ.) Докладний навчальний курс Xlib
- (англ.) Використання Xlib для створення скрінсейвера [Архівовано 19 березня 2012 у Wayback Machine.]
- (рос.) Xlib - интерфейс с X Window на мові C
- (рос.) Програмування з Xlib на C++
- (рос.) Програмування в середовищі X Window на основі бібліотеки Xlib [Архівовано 4 січня 2012 у Wayback Machine.]
|
- ↑ а б в https://gitlab.freedesktop.org/xorg/lib/libx11/-/blob/master/COPYING