Оригинальный автор (ы) | Барт Мэсси |
---|---|
Разработчик (и) | Джейми Шарп, Джош Triplett, Bart Massey |
Первый выпуск | 2001; 19 лет назад (2001 г.) |
Стабильный выпуск | 1.14 / февраль 2020 г.; 9 месяцев назад (2020-02) |
Репозиторий | |
Написано на | C |
Операционная система | POSIX |
Тип | клиентская библиотека X11 |
Лицензия | Лицензия MIT |
Веб-сайт | xcb.freedesktop.org |
XCB (привязка на языке C по протоколу X) - это библиотека, реализующая на стороне клиента протокол сервера отображения X11. XCB написан на языке программирования C и распространяется по лицензии MIT. Проект был начат в 2001 году Барт Мэсси и направлен на замену Xlib.
XCB был разработан как небольшая модернизированная замена Xlib, ранее являвшейся основной библиотекой C для взаимодействия с системой X Window, совпадающей с более полным пересмотром реализации X, который произошел в начале 2000-х годов. Основные цели XCB:
Требуемое уменьшение размера достигается в первую очередь за счет ограничения области действия XCB для обработки X протокол и опускает функциональные возможности Xlib, такие как его обширная служебная библиотека, большая часть которой мало используется приложениями. Это приводит к уменьшению размера скомпилированной библиотеки в тридцать раз (по состоянию на 2004 г.). Вторичные цели включают в себя создание интерфейса C асинхронным, упрощение многопоточности и упрощение реализации расширений (с помощью описаний протоколов XML ).
Описания протокола ядра и расширения находятся в XML, а программа, написанная на Python, создает привязки C. (В предыдущих версиях использовались XSLT и M4.)
Дальнейшая цель - иметь возможность использовать эти описания протокола для создания документации протокола, дополнительных языковых привязок и сервера -боковые заглушки.
Мэсси и другие работали, чтобы доказать, что ключевые части XCB формально верны, используя Z-нотацию. (Уже давно известно, что Xlib содержит ошибки.)
Xlib / XCB обеспечивает двоичный интерфейс приложения совместимость как с Xlib, так и с XCB, обеспечивая путь инкрементного портирования. Xlib / XCB использует уровень протокола Xlib, но заменяет транспортный уровень Xlib на XCB и предоставляет доступ к базовому соединению XCB для прямого использования XCB. Xlib / XCB позволяет приложению открывать одно соединение с сервером отображения X и использовать как XCB, так и Xlib, возможно, с помощью смеси библиотек, предназначенных для одного или другого.
// Простое приложение XCB для открытия окна и рисования в нем блока // Чтобы скомпилировать его с помощью GNU, используйте: // gcc xc -lxcb #include#include #include int main (недействительно) {xcb_connection_t * c; xcb_screen_t * s; xcb_window_t w; xcb_gcontext_t g; xcb_generic_event_t * е; uint32_t mask; значения uint32_t [2]; int done = 0; xcb_rectangle_t r = {20, 20, 60, 60}; // открываем соединение с сервером c = xcb_connect (NULL, NULL); if (xcb_connection_has_error (c)) {printf ("Невозможно открыть дисплей \ n"); выход (EXIT_FAILURE); } // получаем первый экран s = xcb_setup_roots_iterator (xcb_get_setup (c)).data; // создаем контекст черной графики g = xcb_generate_id (c); w = s->корень; маска = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES; значения [0] = s->black_pixel; значения [1] = 0; xcb_create_gc (c, g, w, маска, значения); // создаем окно w = xcb_generate_id (c); маска = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK; значения [0] = s->white_pixel; значения [1] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS; xcb_create_window (c, s->root_depth, w, s->root, 10, 10, 100, 100, 1, XCB_WINDOW_CLASS_INPUT_OUTPUT, s->root_visual, маска, значения); // отобразить (показать) окно xcb_map_window (c, w); xcb_flush (с); // цикл событий while (! done (e = xcb_wait_for_event (c))) {switch (e->response_type ~ 0x80) {case XCB_EXPOSE: // рисуем или перерисовываем окно xcb_poly_fill_rectangle (c, w, g, 1, р); xcb_flush (с); перемена; case XCB_KEY_PRESS: // выход при нажатии клавиши done = 1; перемена; } бесплатно (e); } // закрываем соединение с сервером xcb_disconnect (c); выход (EXIT_SUCCESS); }
XCB имеет сопоставимый, но немного более низкий уровень API, чем Xlib, как можно увидеть на этом примере.
Создатели XCB изобрели специализированный язык описания интерфейсов для моделирования протокола X11 независящим от языка способом и облегчения создания привязок к другим языкам программирования. Сама libxcb реализована как генератор кода и крошечная заглушка служебных функций на C.
Пример:
Логотип XCB был разработан Героидом Моллой, автором веб-комикса Котенок Неко, и пожертвован проекту.