X协议的c语言绑定(XCB: The X protocol C-language Binding) 是一种替代Xlib具有占用空间小,延迟隐藏,直接访问协议,提高线程的支持,和可扩展性。
- 基本的窗口和绘制(basicwindowsanddrawing)
- 事件(events)
- 文本和字体(fonts)
- 窗口的内容和操作(windowcontextandmanipulation)
- 颜色和像素地图(https://xcb.freedesktop.org/colorsandpixmaps/)
- 鼠标光标(mousecursors)
- Xlib 到XCB的翻译引导(xlibtoxcbtranslationguide)
介绍
这个手册是用来介绍给想用XCB library进行编程需要的人们。 像使用Xlib library来使用XCB,因为不是大多数的编程人员都想要写X的应用程序。而更多的开发者是想使用更高级的GUI 开发工具,如Motif,LessTiff,GTK,Qt,EWL,or ETK 或者更高级的使用library Cairo来进行绘制。虽然, 不是所有的XCB的基础都很复杂,了其他一些库的上层的东西也不是坏事。
在读完这个手册之后,一个人可以写简单图形程序而不是好看的图形界面(至少是相对简单的)。在写应用程序之前,这个先前的关于上面库的了解是更有必要的。
什么是XCB,为什么它为存在?
XCB("X C Bing")是一个低级的api给X window server。 XCB是Xlib的一个替代产物,Xlib曾是多年以来标准的C绑定的给X Window System 协议的库。Xlib表现得很优秀,但是对于应用程序来说也有很多不理想的地方,例如:
- 小平台: Xlib包含在大段的代码,精简起来十分困难
- 延迟隐藏:Xlib需要有效的同步回复:他们会一直阻塞直到获取到结果,不管这个结果是否立即需要
- 直接访问协议:Xlib需要大量的缓存,层和相似的优化。由于这个通性,它很难简单的发出特定的X 协议请求和处理特定的响应
- 线程化应用程序:Xlib尽量会支持多线程,它的api的容错性较差
- 新的扩展:Xlib的底部架构提供了有限的支持给新的X的扩展客户端代码。
XCB被设计用来解决上述的问题,目前已经解决的有:
- 工具包的实现
- 直接进行协议级的编程
- 轻量级的调用常用的Xlib api.
Xcb 的全称是 X 协议 C 库,它是一种让在 X Window 活动图形框架中的 Linux 中的程序更易于使用。Xcb 是一种为原生 X 协议提供一个高级接口的库。它允许用户使用函数调用,而不是手动构造消息来访问 X 协议。Xcb 的特点是它是轻量级的,低维护,运行速度快。Xcb 使用在链接器中编译的函数库来缩短天生 X 协议消息的小编程意味,它让用户可以不必担心包装 X 协议消息的技术细节。
在开始使用 Xcb 之前,我们需要一种方法来安装它。如果你使用的是 Ubuntu,你可以使用下面的命令来安装:
“`bash
sudo apt-get install libxcb1-dev
安装之后,我们就可以开始使用 Xcb。要想创建图形界面,我们首先需要做的就是创建 xcb 的连接:
```C
xcb_connection_t *conn = xcb_connect(NULL, NULL);
连接建立之后,我们还需要获取窗口:
“`C
xcb_window_t window = xcb_generate_id(conn);
uint32_t value_list[] = {600, 400};
xcb_create_window(conn,
XCB_COPY_FROM_PARENT,
window,
screen->root,
0, 0,
value_list[0], value_list[1],
0,
XCB_WINDOW_CLASS_INPUT_OUTPUT,
screen->root_visual,
0, NULL );
在窗口创建之后,我们需要把它显示在屏幕上:
```C
xcb_map_window(conn, window);
xcb_flush(conn);
经过以上操作,我们就创建了一个空白窗口。现在,如果我们想要把它绘制成我们想要的样子,我们可以使用 Xcb 的一些其他功能。
另一种在 Linux 中开发图形界面的方法是使用 Qt。Qt 是一个开源的 C++ 框架,它的优势在于它的易用性,以及它的强大的图形功能。此外,它还支持跨平台开发,因此也被用作在 Linux 下开发图形界面的工具。