XCB

редактировать
XCB
Xcb logo.svg
Оригинальный автор (ы) Барт Мэсси
Разработчик (и) Джейми Шарп, Джош Triplett, Bart Massey
Первый выпуск2001; 19 лет назад (2001 г.)
Стабильный выпуск 1.14 / февраль 2020 г.; 9 месяцев назад (2020-02)
Репозиторий Измените это в Викиданных
Написано наC
Операционная система POSIX
Тип клиентская библиотека X11
Лицензия Лицензия MIT
Веб-сайтxcb.freedesktop.org
X11-клиенты используют XCB для связи с X-сервером. Более полное представление о графическом стеке Linux Программы часто используют GTK или FLTK или Qt для их виджетов с графическим интерфейсом. Более полное представление о компонентах операционной системы для домашних компьютеров.

XCB (привязка на языке C по протоколу X) - это библиотека, реализующая на стороне клиента протокол сервера отображения X11. XCB написан на языке программирования C и распространяется по лицензии MIT. Проект был начат в 2001 году Барт Мэсси и направлен на замену Xlib.

Содержание
  • 1 Обзор
    • 1.1 Совместимость с Xlib
  • 2 Пример
  • 3 Описание протокола
  • 4 Логотип
  • 5 Привязки других языков
  • 6 Примечания
  • 7 Ссылки
  • 8 Внешние ссылки
Обзор

XCB был разработан как небольшая модернизированная замена Xlib, ранее являвшейся основной библиотекой C для взаимодействия с системой X Window, совпадающей с более полным пересмотром реализации X, который произошел в начале 2000-х годов. Основные цели XCB:

  • уменьшить размер и сложность библиотеки
  • обеспечить прямой доступ к протоколу X11

Требуемое уменьшение размера достигается в первую очередь за счет ограничения области действия XCB для обработки X протокол и опускает функциональные возможности Xlib, такие как его обширная служебная библиотека, большая часть которой мало используется приложениями. Это приводит к уменьшению размера скомпилированной библиотеки в тридцать раз (по состоянию на 2004 г.). Вторичные цели включают в себя создание интерфейса C асинхронным, упрощение многопоточности и упрощение реализации расширений (с помощью описаний протоколов XML ).

Описания протокола ядра и расширения находятся в XML, а программа, написанная на Python, создает привязки C. (В предыдущих версиях использовались XSLT и M4.)

Дальнейшая цель - иметь возможность использовать эти описания протокола для создания документации протокола, дополнительных языковых привязок и сервера -боковые заглушки.

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

Совместимость с 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 был разработан Героидом Моллой, автором веб-комикса Котенок Неко, и пожертвован проекту.

Привязки других языков
  • XCB.pm - модуль Perl, реализующий привязки к XCB.
  • xpyb - Привязка Python к системе X Window с использованием XCB. По состоянию на июнь 2013 года он не поддерживает Python 3. Предоставлено freedesktop.org.
  • xcffib - еще одна привязка Python, которая поддерживает Python 2 и 3, а также несколько дополнительных расширений X, чем xpyb.
Примечания
Ссылки
Внешние ссылки
  • Портал свободного программного обеспечения
Последняя правка сделана 2021-06-22 06:12:49
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте